java 构造函数是如何执行的
1.构造函数不是方法!!原因1:方法的话,会直接执行方法体内的代码,但是构造函数首先执行的不是{}里的代码块,而是给对象的成员初始化;2.方法可以被调用其他方法调用,但是构造函数不能被方法或变量调用。package com.statics.www;public class Son {//构造函数执行第二步:private int num2=1*cal2();//构造函数执行第一步:public static int num1=1*cal1();//构造函数第0步:public static int cal1(){System.out.println("构造函数第一步:静态变量赋值!");return 1;}public static int cal2(){System.out.println("构造函数第二步:非静态全局变量赋值");return 2;}{System.out.println("构造函数第三步:代码块!");}public Son(){System.out.println("构造函数第四步:执行构造函数内部代码块!");}}执行结果为:
2. 从上面测试得出结论:构造函数初始化对象时,执行的顺序是0.方法优先存在于任何变量或者对象,存在于类中,而不是对象中。即构造对象前,方法就存在。第一步. 静态变量赋值第二步.代码块或者全局变量,(执行顺序由代码位置决定,如果代码块在前,优先执行代码块;如果变量在前,优先变量赋值)第三步.执行构造函数内部代码3.继承中的构造函数执行顺序:0.子类重写了父类的方法;1.调用父类构造函数();2.调用子类构造函数();父类代码:package com.statics.www;public class Father {private int num=1;public Father(){System.out.println("构造father,接下来调用Test()");Test();}public void Test(){System.out.println("调用Father被重写的方法Test(),现在的Num值是"+num);}}子类代码:package com.statics.www;public class Son extends Father {private int num=1;public Son(){System.out.println("执行Son构造函数内部代码块!");}public void Test(){System.out.println("调用Son被重写的方法Test(),现在的Num值是"+num);}}可以看出被调用的Test()方法是子类的Test(),另外特别注意Num =0!!!!!!因为父类的num 是private的不能继承,但是子类的num还没有被赋值(要等到父类构造完成,才能构造子类),所以默认是0
补充:软件开发 , Java ,