非靜態初始化塊與夠着函數的 執行順序

Posted github_white

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了非靜態初始化塊與夠着函數的 執行順序相关的知识,希望对你有一定的参考价值。

 

題目:

子類A繼承父類B,A a=new A();則父類B夠着函數、父類B靜態代碼塊、父類B非靜態代碼塊執行的先後順序是?

正確的執行順序是:杜磊B靜態代碼塊-》子類A靜態代碼塊-》父類B非靜態代碼塊-》父類B構造函數-》子類A非靜態代碼塊-》子類A構造函數

也就是説非靜態初始化塊的執行順序要在構造函數之前。

 1 class SuperClass{
 2     private static String str="Spuer Class Static Variable";
 3     static{
 4     System.out.println("Spuer Class Static Block:"+str);
 5     }
 6     public SuperClass(){
 7     System.out.println("Spuer class Constructor Menthod");
 8     }
 9     {
10     System.out.println("super class Block");
11     }
12     
13 }
14 
15 public class ObjectInit extends SuperClass{
16     private static String str="Class Static Variable";
17     static{
18     System.out.println{"Class Static Block:"+str};
19     }
20     public ObjectInit(){
21     System.out.println("constructor Menthod");
22     }
23     {
24     System.out.println("Class Block");
25     }
26     public static void main(String[] args){
27         @SuppressWarnings("unused")
28         ObjectInit a = new ObjectInit();
29     }
30 }


執行完之後可以看到順序如下:
Spuer Class Static Block:Spuer Class Static Variable
Class Static Block:Spuer Class Static Variable
Spuer Class Block
Spuer class Constructor Menthod
Class Block
Constructor Menthod

以上是关于非靜態初始化塊與夠着函數的 執行順序的主要内容,如果未能解决你的问题,请参考以下文章

第十章 內核同步的方法

Python 函數與常用模組 - 生成器並行運算

js函數

MATLAB自定义函数

Python 函數 Function

Caffe 源碼閱讀 caffe.cpp