1. final、finally和finalize的区别:
- final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
- finally是异常处理语句结构的一部分,表示总是执行。
- finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖方法提供垃圾收集时的其他资源的回收,比如关闭文件等。
2. 关于序列化:
- 对象序列化的所属类需要实现Serializable接口
- 使用ObjectOutputStream和ObjectInputStream可以将对象进行传输
- 声明为static和transient类型的成员不能被串行化。因为static代表类的状态,transient代表对象的临时数据。
3. Collection和Collections的区别:
- Collection是java.util下的接口,它是各种集合结构的父接口。
- Collections是java.util下的类,它包含各种有关集合操作的静态方法。
4.关于构造方法的几点注意事项
5. 关于类的名字的获取:
package test;
import java.util.Date;
public class SuperTest extends Date {
private void test(){
System.out.println(getClass().getName());
System.out.println(super.getClass().getName());
}
public static void main(String[] args){
new SuperTest().test();
}
}
输出结果:
extend.SuperTest
extend.SuperTest
TestSuper和Date的getClass都没有重写,因此调用的是Object的getClass,而Object的getClass作用是返回运行时类的名字。
6. static的初始化:
public class Test {
static int cnt = 6;
static {
cnt += 9;
}
public static void main(String[] args){
System.out.println("cnt= " + cnt);
}
static {
cnt /= 3;
}
}
输出结果:
cnt= 5
初始化顺序:
1.先父类,后子类
2.先属性,后构造函数
3.先静态,后非静态
4.先静态属性,后静态代码块
5.同一类型(非数据类型,指以上),按代码先后顺序
7. 接口的变量定义:
public interface IService { String NAME = "default"; }
接口中的变量默认为public static final的,方法默认为public abstract的