一、final
final修饰类,类不可被继承。
The type FinalB cannot subclass the final class FinalA
译:FinalB类型不能将最终类FinalA子类化
final修饰变量,变量必须被初始化,且初始化后,变量不可被修改。
从下面的例子可以得知即使是基本类型,也需要初始化。
The blank final field c may not have been initialized
空白的最终字段c可能尚未初始化
The final field FinalC.c cannot be assigned
无法分配最终字段FinalC.c
final修饰方法,类被继承后方法不可重写。
Cannot override the final method from FinalD
译:无法覆盖FinlanD的最终方法
final还可在方法中作为局部变量使用,可在参数中修饰,也可在方法体中修饰
final的错误使用
final的正确使用
在方法中,final修饰的局部变量作为参数传递进入另一个方法体,是可修改的,两者作用域不一样。
在方法(非构造方法)中,没有显示调用super.sex()无法进入父类中同样的方法,这是重写。
二、static
static不能修饰类,修饰类的只有public、abstract和final
Illegal modifier for the class A; only public, abstract & final are permitted
(对于类对象)类A的非法修饰符; 只允许public,abstract和final
static修饰变量,该变量可在static初始静态块中初始化变量。
static初始化静态块不能初始化非静态变量。不能通过类对象直接调用非静态变量
Cannot make a static reference to the non-static field age
(在静态初始块中初始化非静态对象或直接使用类对象(非对象实例)调用非静态方法)无法对非静态字段age进行静态引用
在方法内部,static不能修饰局部变量,局部变量只能使用final修饰。
Illegal modifier for parameter num; only final is permitted
(方法内部)参数num的修饰符非法; 只有final是被允许的
类对象无法直接调用非静态方法
Cannot make a static reference to the non-static method print() from the type A
无法对类型A的非静态方法print()进行静态引用
当类中没有定义构造方法,系统会为类提供一个默认的无参构造方法,无参构造方法会调用super();
无论是显示调用还是隐式调用或者自定义构造方法,系统都会默认在进入构造方法之初调用super(),初始化父类的静态块。
根据结果可得知,当继承一个带有静态初始块对象时,会先执行父类的静态初始块。
在未产生对象之前,构造方法不会初始化。