java 初始化顺序

Father的静态代码块
Son的静态代码块
Father的非静态代码块
Father的构造方法
Son的非静态代码块
Son的构造方法
Father的非静态代码块
Father的构造方法
Son的非静态代码块
Son的构造方法

静态方法块只执行一次

静态方法块在类加载时被执行,所以,只要类含有main函数,不管是否生成生成相应的对象,静态代码块都会执行

 

java规定,在执行构造函数之前必须执行父类的构造函数,直到这个类是java.lang.Object类的构造函数。
然而函数的入口是子类构造函数,因此任何构造函数第一句必须是执行父类构造函数,如果没有添加super关键字,那么编译器会为该构造函数第一句添加一个super()语句(你可以这么理解,当然编译以后并不是这样)。如果有super关键字显示的调用父类构造函数,就是用指定的那个父类构造函数,否则使用默认的无参数构造函数。也有一种情况例外,就是存在this关键字,调用本类其它构造函数,但是按照递归调用,最终还是会调用父类构造函数。
如果你继承的父类没有无参数构造函数,那么你这个类第一句必须显示的调用super关键字来调用父类对应的有参数构造函数,否则不能通过编译。

 

 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 }

 

posted @ 2018-09-21 08:44  静静的yu  阅读(127)  评论(0编辑  收藏  举报