java new一个类对象,类中各部分执行顺序:
静态代码块—非静态代码块—构造函数—一般方法。
public class father { private String name; father(){ System.out.println("--父类的无参构造函数--"); } father(String name){ this.name=name; System.out.println("--父类的有参构造函数--"+this.name); } static{ System.out.println("--父类的静态代码块--"); } { System.out.println("--父类的非静态代码块--"); } public void speak(){ System.out.println("--父类的方法--"); } public static void main(String[] args) { System.out.println("--父类主程序--"); father father=new father("父亲的名字"); father.speak(); } }
运行如上main方法结果为:
创建子类继承该父类测试执行顺序。
1 public class Son extends father{ 2 private String name; 3 4 static{ 5 System.out.println("--子类的静态代码块--"); 6 } 7 8 { 9 System.out.println("--子类的非静态代码块--"); 10 } 11 12 Son(){ 13 System.out.println("--子类的无参构造函数--"); 14 } 15 16 Son(String name){ 17 this.name=name; 18 System.out.println("--子类的有参构造函数--"+this.name); 19 } 20 21 @Override 22 public void speak(){ 23 System.out.println("--子类Override了父类的方法--"); 24 } 25 26 public static void main(String[] args) { 27 System.out.println("--子类主程序--"); 28 29 Son son=new Son("儿子的名字"); 30 son.speak(); 31 } 32 }
运行如上main方法结果如下:
运行如下main方法:
1 public static void main(String[] args) { 2 System.out.println("--子类主程序--"); 3 4 Son son=new Son("儿子的名字"); 5 son.speak(); 6 7 father father=new father("父亲的名字"); 8 father.speak(); 9 10 }
结果如下:
所以:
new一个类对象,类中各部分执行顺序:静态代码块—非静态代码块—构造函数—一般方法。
子类继承父类各部分执行顺序为:父静态代码块--子静态代码块--父非静态代码--父无参构造函数--子静态代码块--子构造函数--方法。
注意:创建子类对象调用子类的构造方法的时候会先调用父类的构造方法,在子类的构造方法中调用父类的构造方法是用super(),如果没有写super(),则默认调用父类的无参构造方法。