corejavaWord格式.docx
《corejavaWord格式.docx》由会员分享,可在线阅读,更多相关《corejavaWord格式.docx(14页珍藏版)》请在冰点文库上搜索。
编码:
8
线程9
反射:
9
基本类型
整型:
byte8位
short16位
int32位
long64位
java中默认是int类型
float:
32位
double:
64位
java中默认是double
boolean:
truefalse
字符:
char:
0~65535
字面量是一个整数
以上是八种基本类型
java面向对象(对象和对象的引用)
classstudent{
intname;
intage;
intsex;
}
有了这个类(模板),就可以用它来创建对象:
studentstu1=newstudent();
通常把这条语句的动作称之为创建一个对象,其实,它包含了四个动作。
1)右边的"
newstudent"
,是以student类为模板,在堆空间里创建一个student类的对象(也简称为student对象)。
2)末尾的()意味着,在对象创建后,立即调用student类的构造函数,对刚生成的对象进行初始化。
构造函数是肯定有的。
如果你没写,Java会给你补上一个默认的构造函数。
3)左边的"
studentstu1"
创建了一个student类引用变量。
所谓student类引用,就是以后可以用来指向某个
student对象的对象引用,它指向的是某个student对象的内存地址(有点C语言中指针的味道)。
4)"
="
操作符使对象引用指向刚创建的那个student对象。
super关键字
与this互斥
必须写在构造器的第一行
子类继承父类一定会调用父类的构造器
如果没写则默认调用父类的无参数构造器,如果父类没有无惨构造器,会报错,所以建议
父类中一般添加无惨构造器
通过super()调用父类的构造器根据参数类型调用相对应的构造函数
java中只能单继承
一个类只能有一个父类,不能多继承,一个父类可以有多个子类
1构造器是不能继承的!
2子类构造器默认递归调用父类无参数构造器。
3创建子类实例默认先递归分配父类空间
4子类实例默认是父类型的实例
5如果父类没有无参数构造器,必须显示的调用
父类有参数构造器,使用super()调用父类构造器
6为了减少麻烦,建议所有类都提供无参数构造器。
7super()必须写在构造器第一行,和this()互斥
在构造器的第一行默认存在super();
public(公共)可以任意访问
prodect(友好的)在本类,子类,同包中进行访问
default(默认的):
如果不指定访问修饰符,默认是该类型;
在本类,同一包中可以访问
private(私有的):
只在本类中进行访问
建议:
类一般都是公共的,属性都是私有的.
静态的公共的
1可以修饰变量,表示属于类的属性,全体实例共享一份静态
变量。
2静态变量可以使用类名访问。
3静态变量可以修饰方法,表示属于类的方法。
4静态方法可以使用类名访问。
静态方法属于类全体的公共
方法,一般都是不依赖对象工具方法。
5静态方法只能访问静态资源(属性和方法)
6静态代码块,在类的加载后执行,可以用来初始化一些
配置信息,应用的不是非常广泛的。
Final
final:
修饰的类,不能再被继承
final修饰的方法,不能再被覆盖
final修饰的变量,初始化以后不允许再被修改了
finalstaticjava使用finalstatic修饰的变量作为常量。
一般要求常量名都有大写字母
abstract
抽象类不能实例化
1abstract修饰抽象方法,抽象方法不能有方法体
2包含抽象方法的类,一定是抽象类,使用abstract修饰
3抽象类不能直接实例化,使用抽象概念可以声明引用变量,
抽象概念的引用变量可以引用具体的子类实例。
4抽象类只能被继承,子类需要实现抽象类的抽象方法。
//1:
泛化的类型,不能创建实例
2:
半成品,完成的代码为了在子类中重用,没有完成的代码在子类中要不同的实现
3:
对子类方法的约束
接口:
interface
接口表示纯抽象的概念,没有任何具体的属性和方法
全部的方法都是抽象方法,全部的属性都是常量
接口只能被实现,一个子类实现接口必须实现接口的所有方法
一个子类可以实现多个接口,接口可以实现多继承。
接口不能被实例化
接口中声明的变量都是常量,省略了publicfinalstatic
接口中声明的方法都是抽象的省略了publicabstract
equals比较对象的内容是否相等默认比较的是==sun公司提供的内都覆盖了equals方法
==是比较的是引用地址是否相等
覆盖equals方法必须同时覆盖hashCode方法必须成对出现如果equals为true则这两个对象的hashCode值相等(不一定)
String字符串
char[]String
StringBuilder线程不安全的比StringBuffer快
StringBuffer线程安全的
方法:
append("
"
)加长字符串insert(int,String)向字符串的位置插入字符串
delete(int,int)删除字符串的一些部分
字符串对象一旦创建,内容永远不变不变模式
不变模式引用改变(改变字符串是复制了一个副本进行改变,改变了引用)
【xyz】字符集合匹配所包含的任意一个字符
[^xyz]负值字符集合匹配未包含的任意字符
[a-z]匹配指定范围内的任意字符
[^a-z]匹配任何不在指定范围内的任意字符
^p[az]以p开始后面是pa或是pz
p{3}p连续出现3遍
[0-9]{3}0到9的数字连续出现三遍的
[0-9]{6,8}0到9的数字连续6到8个
[0-9]{6,}0到9的数字在6个以上
java中的类
Object所有类的父类
包装类:
就是基本数据的对象类型
包装类是final的
包装类的对象是不改变的
包装类重写了toString()equals()hashCode()
IntegerBooleanDoubleLongShortByteFloat
时间和日期
Dated=newDate();
d.getTime();
得到时间的毫秒值
d.setTime(long);
设置时间
Calendarcal=newGregorianCalendar();
cal.getTime()得到日期类型
cal.setTime(Date)设置日历
DateFormatformat=newSimpleDateFormat("
yyyy-MM-ddHH:
mm:
ss"
);
日期格式化
format.format(Object)
format.format(Date);
Calendar
内部类
静态内部类:
静态内部类只能访问外部类的静态资源,非静态的方法可以访问静态内部类
可以使用外部类的类名访问,在类内部可以不用写类名;
成员内部类:
可以通过非静态方法进行访问,若要用静态方法进行访问
成员内部类名变量名=当前类对象.new成员内部类名();
局部内部类:
定义在方法内,只在该方法范围内有效,访问外部资源,变量前必须加final
匿名内部类:
是对继承类的实现,没有类名,省略了class关键字,{}就是类体,匿名内部类不能写构造器
每个类都会编译成一个独立的.class文件
Comparator:
比较器接口,里面定义了比较的行为和方法
List:
toArray转化为数组newArrayList(list)list的副本可以重复没有特定的顺序
Arrays.asList(ary)转化为可读的list
ArrayList实现数组非线程安全长度以50%的增加
vector实现数组的方式线程安全成倍的增加性能比ArrayList差
LinkedList双向链表的实现
set:
无序,不可以重复
HashSet:
基于HashMap实现的set集合
TreeSet:
基于TreeMap实现的set集合
HashMap:
散列表实现的Map后期的线程不安全的,速度快
Hashtable:
散列表实现的Map早期的线程安全的,速度慢
TreeMap:
二叉排序树表实现的Map
散列表(Hashtable,也叫哈希表),是根据关键码值(Keyvalue)而直接进行访问的数据结构。
也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。
这个映射函数叫做散列函数,存放记录的数组叫做散列表。
散列因子数除容量如果容量不够就进行扩充,但要扩充就要重新散列导致性能下降,所以要减少扩充的次数,如果一次给的容量很大,比较耗内存,所以要适当。
散列值是根据本身的hashCode值%容量将其放在该容量下其索引值下
HashMap新非线程安全性能好初始容量16加载因子0.75
HashTable旧线程安全性能稍差
Collections:
sort(list)对list中的对象进行自然排序,list中的对象必须实现Comparable接口
shuffle(list)将list中的元素打乱顺序
binarySearch(list,e)在有序的list中查找e的所在位置
Iterator迭代器接口hasNext()判断下一个是否有值返回true、false
next取到下一值,游标
行为方法意外的结果
异常类一般继承与Exception
调用抛异常的方法必须处理异常
使用trycatchfinally捕获
直接再抛出异常
依赖于具体业务逻辑,灵活处理异常
Throwable
|---Error是系统不可恢复的错误,由JVM发生
||-----OutOfMemoryError堆内存溢出
|-----StackOverflowError栈内存溢出
|----Exception程序可以检查处理的异常,常见的异常常见根
|--java.text.ParseExceptionformat解析对象时发生异常
如:
Dated=dateformat.parse("
2010-5-5"
|--RuntimeException非检查异常,Javac忽略对这类异常的检查,如异常抛出,异常处理
IllegalArgumentException表明向方法传递了一个不合法的参数
NullPointerException空指针异常
ArrayIndexOutOfBoundsException数组越界异常
ClassCastException类型转换异常
NumberFormatException整数转换异常
文件
Filefile=newFile();
默认路径是项目下
file.mkdir()创建文件夹
file.createNewFile()创建新文件
RandomAccessFile随机文件的读和写
指针从0开始
read()读取一个字节指针向下移
seek(long)从0开始指针跳到第几个位置
write()
byte[]b="
你撒地方"
.getBytes("
gbk"
得到byte数组以gbk的编码
write(buf,5,4)从数组的第五个开始写四个字节
byte[]buf=newbyte[7]一个缓冲区大小可放7个字节
read(buf);
从当前位置开始将缓冲区填满
I/O
输入输出流
--------------
InputStream/OutputStream字节流
reader/Writer字符流
FileInputStream/FileOutputStream节点流/字节流
BufferedInputStream/BufferedOutputStream缓冲流/字节流为其它流提供内存缓冲以提高读写效率
当io效率差时,可考虑接入BufferedIO
默认缓冲区大小是8k字节
可通过构造方法指定缓冲区大小s
flush()-手动刷出输出流中缓冲的数据
BufferedReader/BufferedWriter缓冲流/字符流BufferedReader的readLine()
读取正行数据,不包含末尾换行符
InputStreamReader/OutputStreamWriter转换流
DataInputStream/DataOutputStream字节流/处理流以字节方式读写基本数据
如果读写的数据具有固定的字节格式,可选用DataIO
PrintStream/PrintWriter打印输出流
ObjectOutputStream/ObjectInputStream字节流
1,序列化的对象必须实现Serializable接口
2,writeObject(Object)序列化对象
3,readObject()反序列化对象
4,static和transient成员不序列化
5,对象中成员类型也必须是可序列化的
java中实现的都是浅层复制
例如
在数组中
ary.clone()
Arrays.copyOf(ary,length);
实现的都是浅层复制
在对象序列化和反序列化后得到的对象是深层复制,对象序列化不仅保留一个对象的数据,而且递归保存对象引用每个对象的数据。
序列化:
就是为了保存内存中的对象,并且可以把保存的对象读出来
在没有序列化之前,每个保存在堆中的对象都有自己的状态,在序列化之后保存在一个文件中,当读取的时候在对内存中重新创建原来的对像(这两个对象的引用不同)
就是将文字进行序列化时候的规则
文字在内存中是char[]序列化以后是byte流(序列)
char[]数组转化成byte[]数组的过程
gbk1个英文一个字节汉字两个字节
utf-16所有文字都是双字节
utf-8英文1个字节,汉字三个字节
线程:
是进程中并发运行的过程(方法),线程并发也是通过分时共享cpu时间实现,线程属于进程
同步:
步调一致的顺序,如,上公交车,一个一个上,A线程请求某个资源时,该资源正在使用,因为同步机制的存在,A线程请求不到,A线程只能等待。
安全
异步:
步调不一致的同时执行,如:
大家一起上卡车,A线程请求某个资源时,该资源正在使用,因为没有同步机制的存在,A线程依然请求的到,无需等待。
不安全
线程的同步:
java.lang.class描述一种数据类型
8种基本类型
引用类型
类接口枚举数组
void
可以通过以下三种方式得到class获得某一个类的class对象
Class.forName("
包名.类名"
一般是接口和类枚举Anoation
类名.class全部
对象名.getClass()实现类
动态获取类的信息,以及动态调用类的方法和功能来源于java反射机制
反射机制主要提供以下功能:
1:
在运行时判断任意一个对象所属的类
2:
在运行时构造任意一个类的对象
3:
在运行时判断任意一个类的所有成员变量和方法
4:
在运行时调用任意一个对象的方法(注:
是在运行时,不是编译)
反射APIjava.lang.reflect
Class类:
代表一个类
Filed类:
代表类的成员变量,提供有关类或接口的属性信息,以及对它的动态访问权限。
反射字段可能是一个类属性和实例属性
Method:
代表类的方法
Constructor类:
代表类的构造方法
Array类:
提供了动态创建数组,以及访问数组元素的静态方法,该类中的所有方法都是静态方法