问题描述:
Java实例化一个类,若这个类中不仅有构造方法,还有代码块,静态代码块,和就地初始化一个别的类的实例,那么代码的执行顺序是怎样的呢?
样例以及运行结果
people类
package Extends;
import Dog.Dog;
class people {
public int age=100;
public String name;
Dog dog=new Dog();
public people() {
System.out.println("people");
}
{
System.out.println("people的代码块");
}
static {
System.out.println("people中的静态代码块");
}
}
dog类
public class Dog {
String name;
int age;
public Dog(){
name="大黄";
age=3;
System.out.println("dog的初始化");
}
}
主函数
public class Main {
public static void main(String[] args) {
people p1=new people();
System.out.println("---------");
people p2=new people();
}
}
原因分析:
这里再people类中,不仅有代码块,静态代码块,构造方法,还就地初始化了一个dog实例,由结果可知,静态代码块的执行始终是最早的,但是执行一次,下来的同级别为:就地初始化和代码块,两者谁写的前面就先执行谁,最后执行的是构造方法。
import Dog.Dog;
class people {
public int age=100;
public String name;
public people() {
System.out.println("people");
}
{
System.out.println("people的代码块");
}
static {
System.out.println("people中的静态代码块");
}
Dog dog=new Dog();
}
这时dog的构造就在代码块之后。