java中靜態代碼執行順序


1.Java中靜態變量只能在類主體中定義,不能在方法中定義。 靜態變量屬於類所有而不屬於方法。

2.  靜態塊:用static申明,JVM加載類時執行,僅執行一次
  構造塊:類中直接用{}定義,每一次創建對象時執行
執行順序優先級:靜態塊>main()>構造塊>構造方法
3. 類的加載順序
  (1) 父類靜態對象和靜態代碼塊
  (2) 子類靜態對象和靜態代碼塊
  (3) 父類非靜態對象和非靜態代碼塊
  (4) 父類構造函數
  (5) 子類 非靜態對象和非靜態代碼塊
  (6) 子類構造函數

 4.例子(看了一目了然)

 1 class Root{
 2     static {
 3         System.out.println("Root的靜態初始化塊。");
 4     }
 5     {
 6         System.out.println("Root的普通初始化塊。");
 7     }
 8     public Root(){
 9         System.out.println("Root的無參構造函數。");
10     }
11 }
12 
13 class Mid extends Root{
14     static {
15         System.out.println("Mid的靜態初始化塊。");
16     }
17     {
18         System.out.println("Mid的普通初始化塊。");
19     }
20     public Mid() {
21         System.out.println("Mid的無參構造函數。");
22     }
23     public Mid(String msg) {
24     System.out.println("Mid的帶參數構造函數,參數值為:" + msg);
25     }
26 }
27 
28 class Leaf extends Mid{
29     static {
30         System.out.println("Leaf的靜態初始化塊。");
31     }
32     {
33         System.out.println("Leaf的普通初始化塊。");
34     }
35     public Leaf() {
36         super("Leaf傳給Mid");
37         System.out.println("執行Leaf的構造函數。");    
38     }
39 }
40     
41 
42 public class staticTest {
43     public static void main(String[] args) {
44         new Leaf();
45         new Leaf();
46     }
47 }

執行結果

 注意:

靜態初始化塊僅在第一次使用類時執行初始化操作。上面例子中,第二次創建Leaf對象是,靜態初始化塊並沒有執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM