使用static修饰的方法、属性,存储在jvm中的方法区,可以被其他进程共享,在运行过程中当中会优先加载,且类加载只会初始化一次。
在类加载中初始化顺序:
public class A { public int x=3; { System.out.println("A的代码块"); } static { System.out.println("A的静态代码块"); } public A() { System.out.println("A的构造方法"); } public void b() { System.out.println("A:b"); } } public class B extends A{ public int x=3; { System.out.println("B的代码块"); } static { System.out.println("B的静态代码块"); } public B() { super(); System.out.println("B的构造方法"); } public void a() { System.out.println("A:a"); } @Override public void b() { System.out.println("B:b"); } public void test() { B b =new B(); b.b(); System.out.println(b.x); }
最后测试结果为
可见加载顺序为所有的静态方法,然后是父类的方法,之后是子类的方法,最后是各自的构造方法
使用static修饰的方法可以直接通过类名.方法名调用
使用final修饰的变量属于常量,其值为只读类型
使用final修饰的方法不能被重写
使用final修饰的类不能被继承
例如String类就是使用final修饰的,不能被继承,且在定义数组时使用的是final修饰的,因此使用String的字符串都是不可变的。可变的只有StringBulider,StringBuffer
使用final修饰的变量只能被初始化一次
al修饰的,因此使用String的字符串都是不可变的。可变的只有StringBulider,StringBuffer
使用final修饰的变量只能被初始化一次
使用final修饰的变量名需要大写