{
System.out.println("我是demo的内部代码块");
}
System.out.println("我是demo的内部静态代码块");
}
public Demo() {
System.out.println("我是demo的构造方法");
}
static class test3 {
{
System.out.println("我是test3的内部静态类代码块");
}
static {
System.out.println("我是test3的内部静态类的静态代码块");
}
System.out.println("我是test3内部静态类的构造方法");
}
}
}
class Test extends Demo {
static {
System.out.println("我是test方法的静态代码块");
}
public Test() {
System.out.println("我是Test方法的构造方法");
}
public static void main(String[] args) {
new Test();
new Demo();
new Demo.test3();
}
}
程序运行结果:
}
程序加载顺序:父类静态代码块——子类静态代码块——父类非静态代码块——父类构造方法——子类非静态代码块——子类构造方法
1. 在运行程序的时候,哪怕对象没有new,当类中有静态代码块,静态代码块会执行。(其实这也可以解释static修饰的方法或者参数是不需要通过对象去调用的,在程序运行的时候就已经就绪了)
2. 当程序内new对象时,首先运行的是对象类中的代码块,然后才是类的构造方法。
3. static修饰的代码块总比没有用static修饰的先运行
4. 当父类中含有static修饰的代码块时候,先运行父类的,再运行子类的
(这几条总结摘抄)
静态代码块只执行一次, 构造块(非静态代码块) 调用一次构造方法执行一次