资源描述
某些JAVA学习笔记
准备工作
1、JDK:java develop kit ,java开发工具包;
2、JRE:java runtime environment,java 运营时环境;
3、JDK 三个版本:
J2SE:java原则版,桌面程序和小应用程序开发
J2EE:java公司版,公司级开发(WEB开发)
J2ME:重要是手持移动设备程序开发;
4、JAVA特性:
a 简朴
java屏弃了c++中某些复杂操作,如指针、构造等
b 面向对象
java是完全面向对象
c 健壮
java通过检查编译和运营时错误来保证程序可靠性
java提供垃圾回收机制,保证了内存不会泄露
d 安全
e 解释
java是解释执行,而不是编译执行,通过生成java字节码,来解释执行
f 平台无关
java生成字节码,由java解释器来解释
g 多线程
在语言级上支持多线程
h 动态
java将变量或办法引用转换成符号引用保存下来,传递给解释器,由解释器来动态决定其加载;
5、java跨平台原理:
.java跨平台是通过JVM来实现。Java编译器在编译java源代码时,并不是将变量和办法引用编译为数值引用,也不拟定内存布局,而是将这些信息保存在字节码中,由解释器在运营时候拟定内存布局。也就是说,java编译器生成字节码中,并不包括与特定硬件平台有关信息。
.java解释器执行过程分为:字节码装载、校验、执行。在装载过程中,由装载器装载字节码,所有本地代码都被装载到同一种内存命名空间里,而所有外部引用代码均有自己内存命名空间,本地代码只是保存了对其引用符号信息。当所有字节码都装载完毕后,java解释器就拟定了内存布局。
.通过实现不同平台下JVM,来实现字节码跨平台;
6、jdk''bin''jar.exe 可以对程序进行打包、发布;
7、在java中,文献名必要与被声明为public类相似,因此在java文献中,最多只能有一种public类;
8、java解释器加载是类,因而,对类名大小写是敏感;
9、/** …..*/这种注释可以自动生成一种注释文档;
10、当定义了classpath后,java解释器就会按照classpath进行查找,而不查找当前目录,若想查找当前,则在classpath中加入。;
11、java提供了8种基本数据类型:
byte 有符号1字节整数 (-128---127)
注 byte类型参加运算时,java会将其类型自动提高为int,
如 byte a ;a= (byte)(a*2);
short 有符号2字节整数 注 同上
int (4)
long (8) 注 默认1.3这样数,默以为double
float (4)
double (8)
char 无符号2个字节 unicode编码,表达
boolean
12、java数组在定义时,不能直接分派空间;
Int[] array;
Array={1,3};//这种写法是error
13、java中二维数组,列数可以不相似,事实上每一行都是一种一维数组;
14、int i=3 ,count;
Count=(i++)+(i++)+(i++);
Out:count=12;
Count=(++i)+(++i)+(++i);
Out:count=15;
位运算
1、计算机数据惯用16进制表达;
2、原码:第一位为符号位,0表达正,1表达负;
反码:正数反码是原码自身,负数反码是符号位不变,其她各位按原码取反;
补码:正数补码是原码自身,负数补码是符号位不变,其她各位取反加1;
3、计算机采用补码进行数据解决;
4、位运算符:
& 按位与 只有两位都为1时,成果为1;
| 按位或 两位任意一位为1时,成果为1;
^ 按位异或 只有两位不同步,成果才为1;
~ 按位取反
5、移位运算符:
<< 左移
>> 带符号右移 (负数:所有空位都补1)
>>> 无符号右移
6、API
Java.lang.Integer. toHexString(int i); //整型转换为其相应十六进制数
7、移位运算效率要高于存储运算,在某些讲求效率程序中,应考虑使用移位运算;
8、<<1 左移一位,相称于乘以2;
>>1 右移一位,相称于除以2;
Java面向对象编程
1、OOP:描述是对象和对象之间互相作用;
2、面向过程和面向对象编程区别:
.面向过程编程,普通是先拟定算法,然后考虑数据构造,而面向对象编程,则是先拟定数据构造,在设计算法;
.面向过程编程,往往是将数据保存到数据构造中,并通过办法来操作数据,而面向对象编程中,则是将数据和办法组织到一种对象中;
3、类是对象摸板,对象是类实例;
4、面向对象编程思路:先将现实世界实体抽象成对象,然后考虑解决办法;
5、类构造办法,没有返回类型,名字与类名相似,构造函数用于对类对象定义初始化状态,每个类必要有构造函数,若没显示定义,则java编译器会自动生成一种不含参数构造办法,若显示定义,则java不会提供任何默认构造办法;
6、new 核心字:
.为对象分派空间 .引起构造函数调用 .返回一种对象引用
7、办法重载(OverLoad)
.构成重载条件:办法名称相似,参数个数或参数类型不同;
8、this 核心字:
.this核心字代表着一种特定类对象自身;
.this 只在办法内部使用,代表调用办法对象自身;
.this 可以简化构造办法调用this();
9、java成员办法在内存中都只包括一份拷贝,被所有对象所共享;而成员变量则有多份拷贝,属于不同对象所拥有。当特定对象调用一种成员办法时候,this被表达为指代该对象,去调用成员办法,然后与该对象成员变量进行关联;
10、static 核心字
.被定义为static办法或变量,是属于一种类,而不属于某一种对象;
.static办法或变量,在类加载时候,就分派了内存空间,并且在内存中只有一份拷贝;
.在static办法中,不可以引用非static办法和变量,而在非static办法中,可以引用static办法或变量;
.static办法和变量可以通过类和对象来引用(实质还是通过类来引用)
11、final 核心字
.被声明为final常量,是不容许被修改,并且在定义时,就必要对其进行初始化(实际也可以将初始化放到构造函数中);
.常把final常量,同步声明为static,可以节约空间;
12、java中通过extends 实现继承,不容许多继承;
13、override
在子类中实现一种与父类中,具备相似名称,返回类型,参数办法,称为办法重写;
14、super 核心字
.super 提供了子类中访问被重写或隐藏了父类办法或变量办法;
.在子类构造函数中,都会在第一句隐式地加入一句super(),如果父类中没有这样构造函数,则会报错;
15、多态:
java中依照传递参数所引用对象不同,来调用相应子类办法;
.编译时多态:办法重载;
.运营时多态:依照传递对象不同,来调用不同办法;
16、instanceof
用于判断一种对象与否为一种类实例;
包
1、使用package核心字定义包,包层次相应目录层次;
2、使用 javac –d 目录 *.java 编译,生成包
使用 java 包名.类名来执行文献;
3、使用import 来导入一种包;
类修饰符
1、.public:公共类
.default:包内可见
2、final:被声明为final类,是最后类,不容许被继承;
.java.lang.String类是个final类;
3、abstract:包括抽象办法类;
不容许产生抽象类对象;
可以将不包括任何抽象办法类,声明为abstract,以避免产生这个类任何对象;
4、办法访问阐明符
public 公共
protected 同一包中或不同包中子类可以访问
default 同一包内可以访问
private 同一种类内可以访问
5、其她办法阐明符
. static
. final
将办法定义为final,则在继承过程中,子类将不能重写该办法;
private和static办法,自然都是final;
. abstract 不包括办法体办法;
. native:JNI(Java Native Interface)
.JNI容许JVM中运营java程序与其她语言编写应用程序进行互操作;
.JNI可以理解为java程序和本地应用程序之间中介;
.JNI程序编写环节:
1、写一段java代码;
2、编译java代码
3、创立 .h文献(使用javah –jni 类名)
4、写一种本地办法实现
5、创立一种共享库
6、执行java程序;
垃圾回收
1、没有任何引用对象,成为垃圾内存,会被垃圾回收器回收;
2、垃圾回收器是自动运营,当JVM感觉到内存不够时,就会自动运营来解决垃圾内存;
3、垃圾回收器在真正回收一种对象之前,会调用finalize()办法,子类重写这个办法,来做某些配备系统资源或执行其她清除工作;
4、API
Java.lang.Object. finalize();//垃圾回收前调用该办法
Java.lang.System.gc() //运营垃圾回收器
接口
1、接口中所有办法默以为public abstract,那么在实现接口类中,也必要为public;
2、实现一种接口,若想去创立一种实现类对象,那么就必要去实现接口中所有办法;
否则,实现类必要声明为abstract;
3、接口中容许有数据成员,这些成员默以为 Public static final
4、java中容许一种接口继承另一种接口;
5、java 中不容许类多继承,但容许接口多继承;
6、先继承类,然后再实现接口;
内部类
1、在一种类中,定义一种类,这个类就叫做内部类;
2、当咱们建立一种内部类时,内部类对象就会与外部类对象之间产生某种联系,这种联系是通过this 引用形成,从而使内部类可以随意访问外部类成员(涉及private)
3、在内部类办法中,通过this.x 引用内部类成员变量;通过outer.this.x引用外部类成员变量;
4、使用外部类名.内部类名(outer.inner)方式,在outer类外部引用内部类;
5、在未产生一种外部类对象时,不能使用new来直接创立一种内部类对象,由于内部类对象都是和一种外部类对象想关联,使用 Inner in=outer.new Inner()可以创立(outer为已创立外部类对象);
6、内部类可以放到办法、条件语句体、语句块中,但不论嵌套层次有多深,内部类都可以随意访问外部类成员;
7、当内部类在一种办法内部定义时候,那么办法参数或局部变量,必要声明为final,才可以被内部类调用;
8、内部类可以被声明为protected 和private;
9、内部类可以被声明为static类,这时,创立内部类对象就不需要必要一方面产生一种外部类对象做为前提了,而这样,内部类也不能随意访问外部类非static成员了;
(static切断了外部类与内部类之间关系)
10、非static内部类中,不能有静态办法或变量存在;
11、内部类可以实现接口;
12、将内部类声明为private,可以较好隐藏实现细节;
13、匿名内部类可以用于实现适配器类,在AWT编程中,经常使用到;
异常解决
1、Exception类:定义了程序中遇到轻微错误条件,需要咱们在程序中进行解决;
2、Error类:定义了程序中遇到严重错误条件,内存溢出,文献格式错误等,不需要咱们去解决,而由java 运营时系统来进行解决;
3、Java程序如果在运营过程,发生了异常,就会自动生成一种异常对象,并将该异常对
象提交给java运营时系统(抛出异常throws),接受到异常对象,java运营时系统就会查找可以解决该异常代码,并将该异常对象交给它进行解决(捕获异常catch)。如果找不到可以解决该异常代码,java程序就会终结运营;
4、try/catch/finally 来解决异常;
5、在try中,发生异常语句后程序段,不会被执行,而是直接跳转到catch语句里去;
执行完catch里语句,会继续执行背面语句;finally里语句始终都要执行;
6、API
Java.lang.Throwable. getMessage()
Java.lang.Throwable. toString()
Java.lang.Throwable. printStackTrace() //以上都是捕获异常信息
6、在办法参数列表后,跟上 throws Exception 用来声明,该办法有也许会抛出异常。一旦,产生了异常,则异常会被抛给该办法调用者。如果办法调用者不做解决,仍旧可以逐级向上抛,直到main函数也不做解决,将该异常抛给 java runtime system来解决;
7、throw 实际抛出一种异常
throws 声明抛出一种异常
8、RunTime 异常普通不需要咱们去解决,而由运营时系统自己解决;
9、子类在覆盖父类办法时候,不能抛出新异常,而只能是相似异常或该异常子集;
String类
1、String 类是final类,不容许被继承;
2、= = 是比较变量值(引用对象地址)与否相等
equals()是比较变量内容(引用对象内容)与否相等;
3、+ 用于连接字符串;
4、+ 和+=是java中唯一被重载操作符;
5、String 变量是个常量,一旦被创立,就不能被变化;
6、在解决大量字符串程序中,惯用 StringBuffer 来代替String ;
7、API
Java.lang.StringBuffer.append() //
8、StringBuffer 创立对象空间初始为16个字符,但当空间不够时候,会自动增长;
9、java中传递参数,都是以传值方式,基本类型是传递值拷贝,引用类型是传递引用拷贝;
10、当打印一种对象时候,会调用该对象toString办法;
克隆机制:
.为了获得对象一份拷贝,咱们可以使用Object类中clone()办法,在派生类中重写clone()办法,并声名为public;
.必要在继承类中实现cloneable接口(标记接口),来告诉编译器:该对象可以克隆了;
.在继承类clone()中调用 super。Clone();
.浅拷贝:当在类中没有引用对象存在时,类中所有变量都可以拷贝过去;
深拷贝:当类中有存在引用对象时,将该引用对象一同克隆一份克隆办法;(将引用对象所相应类也重写clone办法,并且实现cloneable接口,并且在引用类clone办法中,将clone办法返回值赋值给引用变量中);
数组操作:
1、API
java.lang.system.arraycopy //数组拷贝
java.util.Arrays.sort // 对数组进行排序
java.util.Arrays.binarySearch // 对有序数组进行搜索
2、排序对象数组,数组中所有对象都必要实现Comparable接口;
封装类:
1、针对八种基本类型,java中存在八个封装类;
2、数字字符串转换为Integer类型: valueOf(String s);
数字字符串转换为int 类型: parseInt(String s);
反射API
1、java.lang.reflect包
单例模式:
1、每一种类都只有一种实例;
2、单例模式构造办法是private
3、重要用于:需要一种类只提供一种实例时候,例如计数器;
4、单例类一种实现:
class Singleton
{
private static Singleton st=new Singleton();
private Singleton()
{
}
public static Singleton getInstance()
{
return st;
}
}
5、参照书《java与模式》阎宏电子工业出版社
多线程:
1、程序:程序是一系列计算机指令集合,以文献形式存储在计算机磁盘上;
进程:进程是一种程序在其自身地址空间内一次执行活动,它可以申请系统资源,被调度、运营;
线称:线程是一种进程中一种单一持续控制流程,一种进程可以拥有各种线程,没有独立内存空间,而是与其她线称共享同一进程地址空间;
2、进程与进程切换上下文切换耗时,远远低于线程间切换效率;
3、java在语言级支持多线程;
4、实现多线程办法:
一、继承Thread 类;
二、实现Runnable接口;
5、实现run()办法,并用start()启动一种线程;
6、setDaemon(boolean )设立一种线程为后台线程,当程序线程都为后抬线程时,程序就会退出;
7、yield()办法可以使一种线程放弃自己时间片,而让出执行机会给其她线程;
8、setPriority设立一种线程优先级;
9、java线程调度机制,不支持时间片轮换,而是支持抢占式方式,对于具备相似级别线程,如果操作系统支持时间片轮换,则java虚拟机也支持这种方式;
10、sleep():在指定毫秒数内让当前正在执行线程休眠(暂停执行)。该线程不丢失任何监视器所属权。
11、线程同步:同步块和同步办法;
.synchronized(obj)块,一种线程进入synchronized块前,先给obj对象监视器加锁,其她线程则不能进入,等离开时,则对监视器解锁;
.synchronized办法,使用synchronized声明一种办法,这种办法锁是加到this对象上边;
12、线程死锁:
13、wait():导致当前线程等待,直到其她线程调用此对象 notify() 办法或 notifyAll() 办法
notify():唤醒在此对象监视器上等待单个线程。如果所有线程都在此对象上等待,则会选取唤醒其中一种线程。选取是任意性,并在对实现做出决定期发生。线程通过调用其中一种wait办法,在对象监视器上等待。
14、终结线程:
.设立一种flag变量;
.Intrrupte() 中断有一种线程;
集合类:
1、集合框架(Collections Framework):就是一种用来表达和操作集合统一架构,包括了实现集合类和接口;
2、集合框架中接口:
CollectionaSetasortedSet MapasortedMap
a List
.collection:集合层次中根接口,JDK中没有提供这个接口直接实现类;
.set:不能包括重复元素。Sortedset是元素按照升序排列set;
.list:是一种有序集合(不是指排列顺序),可以包括重复元素,提供按索引访问办法;
.map:包括了key-value对。不能包括重复元素。Sortedmap是一种将key值按升序排列map;
3、ArrayList
.arraylist可以当作是一种可以增长容量数组;
.arraylist实现是使用了一种对象数组,当容量不够时候,会重新分派一种数组,将本来数组中元素拷贝到新数组中;
.数组a List (Arrays.asList())
Lista数组 (arrayList.toArray())
.迭代器(Itertator):
.对于没有提供get办法集合类,可以使用iterator来返回集合中元素;
.可以提供一种通用办法来返回元素,如
Pubilc static vid printElems(Collection c)
{
Iterator i=c.iterator();
While(i.hasNext())
{
System.out.println(i.next());
}
}
4、collections
.collections类中所有办法都是static
.自然排序
.使用比较器排序
5、LinkedList
.使用双向循环链表实现;
.可以实现栈、队列、双向队列;
.ArrayList和LinkedList比较:
.arrayList低层是采用数组来实现,而linkedlist是采用双向链表实现,linkedlist每一种对象中,都包括了除了自身数据元素外,两个值,一种指向前一种元素,一种指向后一种元素;
.如果经常要在list中第一种位置插入数据或频繁插入或删除操作,则使用LinkedList
如果要经常地查找某一种元素,则使用ArrayList,它提供了按索引查找;
6、HashSet
.实现set接口hash table,依托hash map来实现;
.hashset默认负载因子是0.75
.每一种对象均有个hashCode,依照内存地址计算出来;
.hashset中存储元素,则元素类必要实现hashCode()和equals()
7、ThreeSet
.ThreeSet是依托threeMap来实现;
.ThreeSet中元素是有序,缺省按照升序排列,因而threeset中元素必要实现Comparable接口;
.HashSet 和TreeSet比较:
HashSet是基于hash算法来实现,普通其性能都是优于TreeSet,普通都是使用hashset;只有使用到排序功能时候,才会使用TreeSet;
8、HashMap
9、TreeMap
.按照key排序
.HashMap和TreeMap比较:
与set同样;
I/O操作
1、一种java中File类,即可以表达一种文献,也可以表达一种目录;
2、在程序运营过程中,产生运营时暂时程序,可以通过deleteOnEixt(),在程序结束时候清除这些中间文献;
3、java中读取和写入都是通过流来完毕;
4、流:字节源或目;
5、流分类:节点流和过滤流(需要一种存在节点流对象);
6、InputStream:
Abstract int read()
Int read(byte[])
Int read(byte[],int off,int length)
Void close()
7、outputStream:
Abstract void write(int b)
Void write(byte[] b)
Void write(byte[] b,int off,int length)
Void flush()
Void close()
8、基本流:
.FileInputStream 和 FileOutputStream (节点流)
.BufferedInputStream 和 BufferedOutputStream (过滤流)
9、当使用bufferedoutputstream()时候,只有当缓冲区满时候,才会输出,可以使用flush()或关闭 close()办法强制输出;
10、DataInputStream 和DataOutputStream (过滤流)
提供对基本数据类型读写操作;
11、PipedInputStream 和 PipedOutputStream (管道流)
用于线程之间通信;
12、java输入''输出,提供是一种链结机制,可以把两个流首尾相结,形成一种流管道。这种模式被称为装饰模型(Decorater)。
13、Reader 和 Writer 是用来读写字符流;
InputStream 和 OutputStream 是用来读写字节流
展开阅读全文