初试化的是类的实例对象
1)静态的大于代码块,代码块大于构造方法
静态块先执行,并且只执行一次
代码块比构造方法先执行,并行new几次运行几次(运行结果)
public class Person {
public Person() {
System.out.println("Person 构造方法");
}
static {
System.out.println("Person 静态代码块");
}
{
System.out.println("Person 普通代码块");
}
}
public class Start {
public static void main(String[] args) {
Person person = new Person();
System.out.println("-------");
Person person2 = new Person();
}
}
2)通过数组定义引用类,不会触发此类的加载
通过数组定义引用类,不会加载此类,因为加载此类必定会调用static静态代码快
public class Start {
public static void main(String[] args) {
Person[] persons = new Person[10];
}
}
3)加载子类会同时加载和初始化父类
先执行父类的静态块(看下图运行结果)
在执行子类的静态块(看下图运行结果)
在执行父类的普通块和构造方法(看下图运行结果)
最后执行子类的普通块和构造方法(看下图运行结果)
public class Man extends Person {
public Man() {
System.out.println("Man 构造方法");
}
static {
System.out.println("Man 静态代码块");
}
{
System.out.println("Man 普通代码块");
}
}
public class Start {
public static void main(String[] args) {