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方法结果为:
创建子类继承该父类测试执行顺序:
public class Son extends father{ private String name; static{ System.out.println("--子类的静态代码块--"); } { System.out.println("--子类的非静态代码块--"); } Son(){ System.out.println("--子类的无参构造函数--"); } Son(String name){ this.name=name; System.out.println("--子类的有参构造函数--"+this.name); } @Override public void speak(){ System.out.println("--子类Override了父类的方法--"); } public static void main(String[] args) { System.out.println("--子类主程序--"); Son son=new Son("儿子的名字"); son.speak(); } }
运行如上main方法结果如下:
运行如下main方法:
public static void main(String[] args) { System.out.println("--子类主程序--"); Son son=new Son("儿子的名字"); son.speak(); father father=new father("父亲的名字"); father.speak(); }
结果如下:
总结:
new一个类对象,类中各部分执行顺序:静态代码块->非静态代码块->构造函数->一般方法。
子类继承父类各部分执行顺序为:父静态代码块->子静态代码块->父非静态代码->父无参构造函数->子非静态代码块->子构造函数->方法。
注意:创建子类对象调用子类的构造方法的时候会先调用父类的构造方法,在子类的构造方法中调用父类的构造方法是用super(),如果没有写super(),则默认调用父类的无参构造方法。