国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java——對象初始化順序使用詳解

Java——對象初始化順序使用詳解

2020-09-11 10:09lim_dev Java教程

本篇文章介紹了,Java對象初始化順序的使用。需要的朋友參考下

一、 代碼塊的概念

在探究對象初始化順序之前,我們先通過代碼來了解一下代碼塊的概念。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Test{
  public static String str1; //靜態字段
 
  public String str2;     //普通字段
 
  static{          
    //靜態代碼塊
  }
 
  {
    //構造代碼塊
  }
 
  public Test() {
    //構造函數
  }
}

二、 創建子類對象時,對象的初始化順序

1. 字段初始化、代碼塊和構造函數的執行順序

我們先看代碼和結果

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class CodeBlockTest {
  public static void main(String[] args) {
    Child child = new Child();
  }
}
class Father {
  public static String fatherStr1 = "fatherStr1(靜態字段初始化值)";
 
  public String fatherStr2 = "fatherStr2(字段初始化值)";
  static {
    System.out.println("父類靜態代碼塊:" + fatherStr1);
    fatherStr1 = "fatherStr1(靜態代碼塊賦值)";
  }
  {
    System.out.println("父類構造代碼塊:" + fatherStr2);
    fatherStr2 = "fatherStr2(構造代碼塊賦值)";
  }
  public Father() {
    System.out.println("父類構造函數塊:" + fatherStr2);
    fatherStr2 = "fatherStr2(構造函數賦值)";
  }
}
class Child extends Father {
  public static String childStr1 = "childStr1(靜態字段初始化值)";
  public String childStr2 = "childStr2(字段初始化值)";
  static {
    System.out.println("子類靜態代碼塊:" + childStr1);
    childStr1 = "childStr1(靜態代碼塊賦值)";
  }
  {
    System.out.println("子類構造代碼塊:" + childStr2);
    childStr2 = "childStr2(構造代碼塊賦值)";
  }
  public Child() {
    System.out.println("子類構造函數:" + childStr2);
    childStr2 = "childStr2(構造函數賦值)";
  }
}
//  輸出結果:
//  父類靜態代碼塊:fatherStr1(靜態字段初始化值)
//  子類靜態代碼塊:childStr1(靜態字段初始化值)
//  父類構造代碼塊:fatherStr2(字段初始化值)
//  父類構造函數塊:fatherStr2(構造代碼塊賦值)
//  子類構造代碼塊:childStr2(字段初始化值)
//  子類構造函數:childStr2(構造代碼塊賦值)

通過每執行一個代碼塊或構造函數,輸出字段在上一代碼塊執行后的值,以此來探究對象的初始化順序。

由目前的輸出結果可知,對于對象的初始化順序,我們可以得出以下結論:

1. 父類靜態字段初始化

2. 父類靜態代碼塊、子類靜態字段初始化 (接下來探究兩者的順序)

3. 子類靜態代碼塊

4. 父類普通字段初始化

5. 父類構造代碼塊

6. 父類構造函數

7. 子類普通字段初始化

8. 子類構造代碼塊

9. 子類構造函數

2. 父類靜態代碼塊和子類靜態字段初始化的執行順序

還是一樣,我們通過代碼的執行結果來探究兩者間的執行順序。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class CodeBloacTest2 {
  public static void main(String[] args) {
    Child child = new Child();
  }
}
class Father {
  public static String fatherStr = "(靜態字段初始化值)";
  static {
    System.out.println("父類靜態代碼塊:fatherStr" + fatherStr);
    fatherStr = "(靜態代碼塊賦值)";
  }
}
class Child extends Father {
  public static String childStr = fatherStr;
  static {
    System.out.println("子類靜態代碼塊:childStr = fatherStr" + childStr);
    childStr = "(靜態代碼塊賦值)";
  }
}
//  輸出結果:
//  父類靜態代碼塊:fatherStr(靜態字段初始化值)
//  子類靜態代碼塊:childStr = fatherStr(靜態代碼塊賦值)

我們在子類靜態字段childStr初始化的時候,賦的是父類靜態字段fatherStr的值。由輸出結果可知,childStr初始化后的值是父類靜態代碼塊執行后賦予fatherStr的值。由此可知兩者的執行順序為:父類靜態代碼塊==>子類靜態字段初始化

三、 結論

父類靜態字段初始化

父類靜態代碼塊

子類靜態字段初始化

子類靜態代碼塊

父類普通字段初始化

父類構造代碼塊

父類構造函數

子類普通字段初始化

子類構造代碼塊

子類構造函數

通過結論我們可以很明顯的看出:static字段、代碼塊的執行順序優先于非static字段、代碼塊。這是因為在靜態域是屬于類的,在類加載后就一直存在;而普通域需要創建對象才能訪問。而在創建對象時,需要先加載父類,然后再加載子類,因此父類的靜態字段初始化和靜態代碼塊執行先于子類。

以上內容希望對各位朋友有所幫助

原文鏈接:http://blog.csdn.net/lim_dev/article/details/70161726

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品欧美一区二区三区不卡 | 人人澡人人射 | 亚洲国产一区二区三区日本久久久 | 密桃在线视频 | 亚洲精品一 | 欧美自拍视频 | 99久久免费精品 | 亚洲aⅴ网站 | 国产aⅴ | 天天干天天干天天干天天射 | 欧美精品成人一区二区三区四区 | 久久国产一区 | 99精品欧美一区二区三区综合在线 | 久草福利资源 | www国产亚洲精品久久网站 | 91亚洲精品乱码久久久久久蜜桃 | 一级毛片免费看 | 夜夜操操 | 亚洲一区在线免费观看 | 中文字幕一区二区三 | 欧美亚洲视频 | 久久中文字幕一区二区 | 久久综合av | 国产精品激情 | 欧美日一区二区 | 精品少妇一区二区三区在线播放 | 亚洲成av人片在线观看 | 精品久草| 国产一区二区三区久久 | 国产aaaaav久久久一区二区 | 欧美日韩伊人 | 国产一区二区视频在线观看 | www.91色.com| 99国产精品99久久久久久 | 午夜电影网址 | 日韩在线播放一区二区 | 欧美日本精品 | 日韩成人在线看 | 亚洲精品一区二区三区在线 | 黄色电影在线免费观看 | 久久综合九色综合欧美狠狠 |