Father的静态代码块
Son的静态代码块
Father的非静态代码块
Father的构造方法
Son的非静态代码块
Son的构造方法
Father的非静态代码块
Father的构造方法
Son的非静态代码块
Son的构造方法java
静态方法块只执行一次函数
静态方法块在类加载时被执行,因此,只要类含有main函数,无论是否生成生成相应的对象,静态代码块都会执行this
java规定,在执行构造函数以前必须执行父类的构造函数,直到这个类是java.lang.Object类的构造函数。
然而函数的入口是子类构造函数,所以任何构造函数第一句必须是执行父类构造函数,若是没有添加super关键字,那么编译器会为该构造函数第一句添加一个super()语句(你能够这么理解,固然编译之后并非这样)。若是有super关键字显示的调用父类构造函数,就是用指定的那个父类构造函数,不然使用默认的无参数构造函数。也有一种状况例外,就是存在this关键字,调用本类其它构造函数,可是按照递归调用,最终仍是会调用父类构造函数。
若是你继承的父类没有无参数构造函数,那么你这个类第一句必须显示的调用super关键字来调用父类对应的有参数构造函数,不然不能经过编译。spa
1 package chap1; 2 3 class Father { 4 5 static { 6 System.out.println("Father的静态代码块"); 7 } 8 9 { 10 System.out.println("Father的非静态代码块"); 11 } 12 13 public Father() { 14 System.out.println("Father的构造方法"); 15 } 16 } 17 public class Son extends Father{ 18 19 static{ 20 System.out.println("Son的静态代码块"); 21 } 22 23 { 24 System.out.println("Son的非静态代码块"); 25 } 26 27 public Son(){ 28 System.out.println("Son的构造方法"); 29 } 30 31 public static void main(String[] args) { 32 Son son = new Son(); 33 Son son2 = new Son(); 34 } 35 }