知识点:
1)、构造一个类对象,必须先构造它的父类对象。
2)、初始化一个类必须先初始化它的属性。
即:一个类先执行它的构造方法,构造方法方法之前需要执行super(),然后是成员变量,最后是构造函数内部的语句。
下面是一个例子:
public class Test { private String name="jack";//顺序4:执行成员变量 private int age=20;//顺序5: public Test(){//顺序3:在调用构造函数之前先要调用super(); //super();对super的调用必须是在构造函数的第一个语句 age=1000;//顺序6:在执行成员变量之后就执行构造函数内部语句 } public static void main(String[] args) {//顺序1:main函数是一个程序的入口 Test t=new Test();//顺序2:new对象调用构造函数 System.out.println(t.name+","+t.age);//顺序7:结果为jack,1000 } }
程序的执行顺序:先静态(先父类再子类),再非静态(先父类再子类)
整个程序的运行过程中,静态块只执行一次,而且内膜版对象只有一个(静态块通常在连接数据的时起初始化的作用)。
public class Test2 { public static void main(String[] args) { new A(); } } class A extends B{ {System.out.println("A成员。。。。。。");} static{System.out.println("A静态块");} public A(){ System.out.println("A的构造函数"); } } class B extends C{ {System.out.println("B成员。。。。。。");} static{System.out.println("B静态块");} public B(){ System.out.println("B的构造函数"); } } class C{ {System.out.println("C成员。。。。。。");} static{System.out.println("C静态块");} public C(){ System.out.println("C的构造函数"); } }