代码如下:
class A {
public A() {
System.out.println("class A");
}
{ System.out.println("I'm A class"); }
static { System.out.println("class A static"); }
}
public class B extends A {
public B() {
System.out.println("class B");
}
{ System.out.println("I'm B class"); }
static { System.out.println("class B static"); }
public static void main(String[] args) {
new B();
}
}
输出结果:
class A static
class B static
I'm A class
class A
I'm B class
class B
静态初始化块 > 初始化块(构造代码块)> 构造方法
注意:静态初始化块只会在类初次加载的时候执行
概念:
- 初始化块(构造代码块):直接在类中定义且没有加static关键字的代码块,在每个对象生成时都会被执行一次,可以初始化类的实例变量,格式{}
- 静态初始化块:使用static定义,当类装载到系统时执行一次,静态初始化块主要用于初始化静态变量和静态方法,格式static{}
static修饰的语句或变量的特点有:
- 随着类的加载而加载
- 为所有的对象共享
- 可以使用类名调用,即类方法 例如:
public class myClass{
public void fun(){
Helper.help(); //【类名+静态方法名】直接调用静态方法
}
}
public class Helper{
public static void help(){
System.out.println("静态方法");
}
}