1. final, finally, finalize 的区别
final 可以用来修饰类,变量,方法。final 类不可以被继承;final 变量必须初始化,且不可以再修改;final 方法不可以被覆盖重写; 同时final 和 static 结合起来修饰变量,即为常量。
finally 是 异常处理语句(try catch ) 的一部分,表示不论是否有异常,都会执行 finally 的代码。常用作IO资源的关闭。
finalize 是 Object 类的一个方法,在垃圾搜集器清除这个对象的时候总会回调此方法。可以在其中整理系统资源或者关闭文件资源等。
2. int 和 Integer 的区别
Integer是int的包装类,int 是java的一种基本数据类型。
Integer的默认值为null, int的默认值为0。
Integer必须实例化后才能使用,而int不需要。
Integer变量实际上是对一个Integer对象的引用,通过new出来的任意两个Integer对象都不想等(因为地址不同)。
Integer与int进行比较,只要值相等,则为true。(因为在比较时会对Integer进行拆包装,实际上比较的是两个int)
非new生成的Integer对象与new Integer 对象,是不相等的。(因为 非new生成的Integer对象指向常量池中的对象,而new出来的对象是java堆中的对象)
两个非new生成的Integer对象,如果值在 -128 ~ 127 之间是相等的,否则不等。JAVA对值在-128 ~ 127 的Integer有缓存策略,用来节省内存和提高性能(对象重用),所以非new生成的 -128 ~ 127Integer对象都是Integer常量池中的。
Integer缓存请参考 Integer缓存池(IntegerCache)及整型缓存池
3. 什么是标记接口(Marker interface)?
标记接口是一个不含任何成员变量和成员方法的空接口,它用来表示特殊的目的。
Serializable:该类可以被序列化。
RandomAccess:JDK4,