初始化顺序
父类(静态变量、静态语句块)子类(静态变量、静态语句块)父类(实例变量、普通语句块)父类(构造函数)子类(实例变量、普通语句块)子类(构造函数)final可以用于成员变量(包括方法参数),方法、类。 1.final修饰类,表示该类不可被继承 2.final修饰变量,表示该变量不可以被修改,只允许赋值一次,如果修饰引用类型,final使引用不变,也就是不能引用其他对象,但是被引用的对象本身是可以修改的。 3.final修饰方法,表示该方法不可以被重写,private方法隐式的被指定为final,如果在子类中定义的方法和父类的一个pirvate方法签名相同,此时子类的方法不是重写父类方法,而是在子类中定义了一个新的方法
final变量抑制指令重排序: 在java语言中,用final修饰的字段被赋予了一些特殊的语义,它可以阻止某些重排序,具体的规则就这两条:
在构造方法内对一个final字段的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。初次读一个包含final字段对象的引用,与随后初次读这个final字段,这两个操作不能重排序。try catch finally
当try语句退出时肯定会执行finally语句。这确保了即使发了一个意想不到的异常也会执行finally语句块。但是finally的用处不仅是用来处理异常——它可以让程序员不会因为return、continue、或者break语句而忽略了清理代码。把清理代码放在finally语句块里是一个很好的做法,即便可能不会有异常发生也要这样做。无论try里执行了return语句、break语句、还是continue语句,finally语句块还会继续执行。注意,当try或者catch的代码在运行的时候,JVM退出了。那么finally语句块就不会执行。同样,如果线程在运行try或者catch的代码时被中断了或者被杀死了(killed),那么finally语句可能也不会执行了,即使整个运用还会继续执行。 finally是异常处理关键字,finally中的主体总会执行,不管异常发生是否。
该方法用于告诉垃圾回收器应该执行的操作,从object类继承而来。在从堆中永久删除对象之前,垃圾回收器调用对该对象的Finalize方法。注意,无法确切保证垃圾回收器何时调用该方法,也无法保证调用不同对象的方法的顺序。 即使一个对象包含另一个的对象的引用,或者在释放一个对象很久以前就释放了另一个对象,也可能会以任意的顺序调用这两个对象的finalize方法,如果比如保证采用特定的顺序,则必须提供自己特有的清理方法
Finalze已经不推荐使用,在JDK9中已经标记为过时
3、abstract abstract 关键字可以修饰类或方法。 abstract 类可以扩展(增加子类),但不能直接实例化。 abstract 方法不在声明它的类中实现,但必须在某个子类中重写。