1. instanceof 编译时,前面要么是后面类的子类,要么是后面类的父类,要么和后面类相同, 否则就会出现编译错误
2. 对于单例对象的序列化和反序列化 可以在单例类中实现下面方法,在反序列化的时候,调用,就能保证单例。
private Object readResolve()throws ObjectStreamException{
return instance;
}
3. 重载时,如果能同时满足多个方法,如果某个方法的形参要求参数范围越小, 那这个方法就越精确,也就会调用这个方法。P198
4. catch
catch进行捕获时,先捕获小异常,再捕获大的异常;
5. 子类重写父类的方法时,不能声明抛出比父类方法类型更多,范围更大的异常,
也就是说子类只能声明抛出父类方法所声明抛出的异常的子类
6. finally和return
public class A { public static String A(){ try{ System.out.println("1"); return "aaa"; }finally{ System.out.println("2"); return "bbb"; } } public static void main(String []args){ String s=A(); System.out.println(s); } }
系统输出:
1
2
bbb
这是由于当try执行到return语句时,会立即执行finally中的代码,这时里面的return语句就会导致该方法的结束。所以try里的return语句不会执行
7. finally遇到System.exit()的处理
public class A { public static void main(String []args){ try{ System.out.println("main"); System.exit(0); }catch(Exception e){ System.out.println("Exception"); }finally{ System.out.println("finally"); } } }
输出结果:
main
System.exit将立即停止所有的程序线程,它并不会使finally语句块得到调用,但是它在停止VM之前会执行关闭挂钩操作(这此挂钩操作是注册到Runtime.addShutdownHook上的线程),这对于释放VM之外的资源很有帮助。
8.finally 和 Runtime.getRuntime().exit(0)的处理同上
9.