Java類初始化順序

Java煩的編譯代碼都存在於其獨立的文件之中,該文件只在需要使用程序代碼時才會被加載。也就是說,Java類的代碼在初次使用時才加載。類的加載通常發生在創建類的第一個對象之時,當訪問static域或static方法時也會發生加載。所有的static對象和static代碼段都會在加載時依程序中的順序而依次初始化。

關於當訪問static域或static方法時也會發生加載,其意思是,如果我們調用一個類的靜態方法,那麼該類就會被加載,例如:
public class TestStatic {
public static void test(){
System.out.println("1");
}
static{
System.out.println("2");
}
public static void main(String[] args) {
TestStatic.test();
}
}
運行之則結果為:
2
1
如果某類有一個父類,則初始化時將先行加載其父類,編譯器不會關心開發人員是否打算創建父類的對象,例如:
public class TestStaticChild extends TestStatic{
public static void main(String[] args) {
System.out.println("3");
}
}
運行之則結果為:
2
3

------------------------------------------------------------------------------------------------------------------------------------
Java類的初始化順序為:

Main->靜態變量、靜態初始化塊、類變量、初始化塊->構造方法

 

 

曾经做过一道笔试题,没有拍下来,也没抄下来,我在记忆的基础上加了些优化,我觉得对于理解,类的初始化顺序很有帮助,写出来与诸位共享。

 

public class Parent {
 protected static String str = getTestMsg();
 static{
  System.out.println("1");
 }
 {
  System.out.println("2");
 }
 public Parent(){
  System.out.println("3");
 }
 private static String getTestMsg(){
  System.out.println("4");
  return null;
 }
 static class innerClass{
  static{
   System.out.println("5");
  }
 }
 public static void main(String[] args) {
  Parent p = new Child();
 }
}

/**

子类

**/

public class Child extends Parent {
 static {
  System.out.println("6");
 }{
  System.out.println("7");
 }
 public Child(){
  System.out.println("8");
 }
}

结果是:4,1,6,2,3,7,8


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值