静态代码块:
随着类的加载而执行,并且只执行一次
实例化代码块:
执行多次
静态代码块的优先级高于实例化代码块(之后才是构造函数)
public class test {
public static void main(String[] args) {
Demo01 t1 = new Demo01();
Demo01 t2 = new Demo01();
Demo01 t3 = new Demo01();
}
}
class Demo01{
static {
System.out.println("静态代码块。。。。");
}
{
System.out.println("实例化代码块。。。");
}
}
结果:
静态代码块。。。。
实例化代码块。。。
实例化代码块。。。
实例化代码块。。。
如果涉及到继承
初始化一个类的子类,对父类来说也是主动使用,简单的说就是初始化一个类时,如果他有父类,会先初始化父类
public class test {
public static void main(String[] args) {
Children t1 = new Children();
Children t2 = new Children();
Children t3 = new Children();
}
}
class Children extends Parent{
public Children(){
System.out.println("子类,构造函数。。。。");
}
static {
System.out.println("子类,静态代码块。。。。");
}
{
System.out.println("子类,实例化代码块。。。");
}
}
class Parent{
public Parent(){
System.out.println("父类,构造函数。。。。");
}
static {
System.out.println("父类,静态代码块。。。。");
}
{
System.out.println("父类,实例化代码块。。。");
}
}
结果:
父类,静态代码块。。。。
子类,静态代码块。。。。
父类,实例化代码块。。。
父类,构造函数。。。。
子类,实例化代码块。。。
子类,构造函数。。。。
父类,实例化代码块。。。
父类,构造函数。。。。
子类,实例化代码块。。。
子类,构造函数。。。。
父类,实例化代码块。。。
父类,构造函数。。。。
子类,实例化代码块。。。
子类,构造函数。。。。