一、数据类型
1)基础数据类型
类型 | 基础类型 | 占用内存 | 默认值 | 取值范围 | |
整型 | byte | 1个字节 | 0 | -2^7 | 2^7-1 |
short | 2个字节 | 0 | -2^15 | 2^15-1 | |
int | 4个字节 | 0 | -2^31 | 2^31-1 | |
long | 8个字节 | 0L | -2^63 | 2^63-1 | |
浮点型 | float | 4个字节 | 0F | -3.403E38 | 3.403E38 |
double | 8个字节 | 0D | -1.79803E308 | 1.798E308 | |
字符型 | char | 2个字节 | '\u0000' | 'A'... | |
布尔型 | boolean | 1个字节 | FALSE | TRUE | FALSE |
switch【byte、short、char、int、1.5(enum )1.7(String)】
2)引用类型
类、接口、数组、枚举、标注[注解]
强引用(Strong Reference)
A a = new A(); 开发中的正常引用对象都为强引用对象,垃圾回收器无法回收具有强引用对象,当虚拟机内存空间不足时抛出OOM,程序终止。
软引用(Soft Reference)
具有软引用对象在内存空间充足时,垃圾回收器回收时不会回收具有软引用对象,在内存空间不足时回收具有软引用对象。
弱应用(Weak Reference)
弱化版的软引用,无论垃圾回收时内存空间是否充足都会回收掉具有弱引用的对象。
虚引用(Phantom Reference)
虚引用不会影响对象的生命周期,系统虚设,在任何时候垃圾回收都会回收掉具有虚引用的对象,虚引用必须与应用队列(ReferenceQueue)一起使用,主要用来跟踪对象被垃圾回收器回收的活动。
3)基本数据类型 VS 引用类型
基本类型创建时直接在栈上分配内存,数据直接存储在栈上。
引用类型创建时先在栈上给其引用(句柄)分配内存,对象的具体信息在堆中分配内存,栈中的引用指向堆中的对象地址信息。
4)String(引用类型)
被final修饰,不能被继承,底层是char数组,Sting对象指向的内存地址是可变的,地址指向的内容是不可变的(内容不可变的优势:方便构建String常量池,节省内存开销;线程安全;代码安全);
Xx.toString() Objiect的方法,不允许null, String.valueOf() 允许null,但是转换结果为"null";
String、StringBuilder、StringBuffer;String[线程安全]对象不可变[每次改变时都会生成一个新对象],StringBuilder[线程不安全]、StringBuffer[线程安全]每次改变时不会生成新对象
String.intern()方法会到常量池中查找是否存在该对象,如果存在,返回该对象。不存在的话就创建该对象并返回该对象(jdk1.6),(jdk1.7)会在常量池中存一个指向堆中的那个对象的引用。
5)== equals hashcode
== 基础数据类型值相等 、引用类型引用地址信息相等,equals内容信息相等(默认情况与==相同的逻辑,需要重写【自反性a.equals(a) 对称性a.equals(b) => b.equals(a) ) 传递性a.equals(b) b.equals(c) => a.equals(c)】)
equals、hashcode equals = true hashcode = true ,equals = false hashcode可以=,当重写equals时必须重写hashcode 反例:hashSet中的对象当只重写equals没有重写hashcode时排重失效。
二、万物皆对象
1)封装
隐藏对象属性和实现的细节,增加安全性简化编程,使用者不必要关注具体细节(private default protected public)
2)继承
子类继承父类,具有父类非私有的属性和方法,实现了代码复用
3)多态
继承、重写、父类引用指向子类对象(编译时多态【重载】,运行时多态【重写】)
三、异常
1)错误(Error)
错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。【OutOfMemoryError,IOError】
2)检查异常(CheckedException)
最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。【IOException、SQLException、NamingException ...】
3)运行时异常(RuntimeException)
运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。【NullPointerException、ClassNotFoundException、ArrayIndexOutOfBoundsException、...】
4)异常捕获、抛出
java try catch finally throw throws
java7 try-with-resource 代码简洁,避免资源关闭问题
Reader stringReader= new StringReader(message);
BufferedReader bufferedReader = new BufferedReader(stringReader);
try (BufferedReader newBufferedReader = bufferedReader) {
return newBufferedReader.readLine();
}
Lombok:@SneakyThrows 代码简洁 (方法上@SneakyThrows(XxxException.class))
四、序列化
1)Java序列化
2)Hessian序列化
3)Json 序列化
4)xml 序列化
5) Protocol Buffers序列化
/ | 序列化速度 | 序列化后字节长度 | 反序列化速度 | 可靠性 | 可读性 | 通用性 |
java | 5 | 5 | 5 | 1 | 0 | 0 |
Hessian | 3 | 3 | 4 | 4 | 0 | 1 |
Json | 2 | 2 | 2 | 3 | 1 | 2 |
xml | 4 | 4 | 3 | 2 | 2 | 2 |
Protocol Buffers | 1 | 1 | 1 | 2 | 0 | 1 |
五、IO
六、反射,注解
@浅见 @如有疏漏请帮忙补充完善 @开发一家人 0000018 完善中 感兴趣可以 点赞 收藏 评论 大家一起交流呀