instance of
在垃圾收集器将对象删除之前,做清理工作
在object类中定义,子类覆盖:整理系统资源或执行其他清理工作
删除对象前(确定该对象未被引用),调用对象的方法
throw用于方法中,抛出异常(检查exception)
throws用于方法后
接口方法抛运行时异常,少返回null。
少Throwable,多exception。exception要明确。
finally在try catch中的return执行之前,会覆盖try catch中的return
try catch中有system.exit(0),则finally不执行
finally中少return/抛异常
overload:方法重载,不能通过访问权限、返回类型、异常重载,按照参数类型、个数、顺序,多个同名方法
override:方法覆盖,子类覆盖父类方法(多态性)。比父类方法更少的异常,更大的访问权限,返回值小于等于父类。若父类为private,则新加方法
构造方法不能重写,只能重载
abstract:方法实现移交给子类,不能同为static(类加载时无方法实现)/final(不可继承)/synchronized(需要同步操作)
native:方法实现移交给本地操作系统
不能同时出现在构造方法里,不在static中使用
this:当前类的引用对象
super:引用对象的父类对象,父类储存空间标识
protect:同包,非同包子类
default:同包
只读,值不可变
引用类型:引用不变,对象的值可变
当两边都是包装类型时,==比较引用地址,equals 比较值,不进行类型转换
Integer num1 = 256;
Integer num2 = 256;
System.out.println(num2 == num1);
false
System.out.println(num2.equals(num1));
true
一边为表达式时,==比较两边数值(自动拆箱)
String、Date重写equals,比较值
元素类型相同时,equals先比较hashcode,再比较。(equals和hashcode一起重写)
equals为true,则hashcode相等,但hashcode相等equals不一定为true(hash冲突)
每个对象都有默认的散列值,两个对象==相等,则hashcode一定相等
修饰属性阻止其序列化
若修饰引用类型,必须实现serializable
反序列化时变量的值设为初始值
反序列化:
实现:
作用:
浅克隆:new一个新对象,基本类型的数据复制一份,其他类型的复制一份引用
深克隆:全部复制一份
基本数据类型为深克隆,引用类型为浅克隆,string是引用类型,但可以认为是深克隆,stringBuffer和stringBuilder为浅克隆,主动拷贝为深克隆
实现
自动拆箱装箱是一种编译特性
//装箱
Integer num1 = Integer.valueOf("1");
//拆箱
int num2 = num1.intValue();
Integer:-128~127 有一个数据缓冲池,范围内的数字,返回池中对象的引用,范围外的新建对象。
Short、Byte、Character、Long类似于Integer,Float和Double每次都返回新对象
StringBuilder | StringBuffer | String |
---|---|---|
效率高 | 中 | 低 |
非安全 | 线程安全(synchronized实现) | final |
String是final的,所以其成员方法都是final的,不允许继承。具有唯一性、不变性,可做map的key
不同的字符串变量都指向字符串池的同一个字符串
创建时hashcode就被缓存
String str = "AB";//class文件的部分内容编译生成字面常量"AB"和符号引用
//运行期间,字面常量存于运行时常量池
String str = new String("AB");//类加载时在运行时常量池创建对象"AB"
//运行期间在堆上创建对象"AB"
String str = "A" + "B";
String str = "AB";//二者相等
String str1 = "A";
String str2 = "B";
String str = str1 + str2;//新建字符串
抽象类 | 接口 |
---|---|
可以有默认的方法实现 | default方法 |
子类为抽象类,不实现抽象方法 | 必须实现 |
不能实例化 | 不能实例化 |
有构造器,普通方法,成员变量,是类 | 有静态方法常量,静态方法,default方法,是接口 |
public/protected/default | public static final |
有main方法可以运行 | 无 |
可以添加新方法,不需要改变代码 | 改变实现类,添加新接口 |
继承一个类 | 实现多个接口 |
抽象类可以实现多个接口,不实现接口方法 | |
快 | 慢,找实现类的方法 |