final
- final关键声明的属性为常量。
特征:
- final修饰的属性(实例变量)在声明时就应该赋初值
- final修饰基本类型变量不能再被修改,引用类型的引用变量不能修改
例如:final A a = new A();
那么final A a = new B();
就是不合法的了。但是呢a.c = 1;
是合法的,只是引用的对象new A()
不能变其他对象,被引用的对象本身还是可以被修改的。
- final修饰的方法
public class A { public final void method(){ System.out.println("我不能被重写了"); } } class B extends A{ @Override public final void method() { // method() cannot override method() in 'com.meng.javase.A';overridden method is final } }
- final修饰的类
public final class A { } class B extends A{ //Cannot inherit from final 'com.meng.javase.A'(不能继承final修饰的类) }
static
- static修饰的属性、方法、代码块初始化顺序
静态变量和静态语句块优先于实例例变量和普通语句块,静态变量和静态语句块的初始化顺序取决于它们
在代码中的顺序。public static String staticField = "静态变量"; static { System.out.println("静态语句块"); } public String field = "实例例变量"; { System.out.println("普通语句块"); }
最后才是构造函数的初始化。public InitialOrderTest() { System.out.println("构造函数"); }
---存在继承的情况下,初始化顺序为:
---父类(静态变量、静态语句块)
---子类(静态变量、静态语句块)
---父类(实例例变量、普通语句块)
---父类(构造函数)
---子类(实例例变量、普通语句块)
---子类(构造函数)