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

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

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

服務器之家 - 編程語言 - Java教程 - 詳解java中的四種代碼塊

詳解java中的四種代碼塊

2021-03-01 12:16krisll Java教程

這篇文章主要介紹了詳解java中的四種代碼塊,具有一定借鑒價值,需要的朋友可以參考下。

詳解java中的四種代碼塊

java中用{}括起來的稱為代碼塊,代碼塊可分為以下四種:

一.簡介

1.普通代碼塊:

類中方法的方法體

2.構造代碼塊

構造塊會在創建對象時被調用,每次創建時都會被調用,優先于類構造函數執行。

3.靜態代碼塊:

用static{}包裹起來的代碼片段,只會執行一次。靜態代碼塊優先于構造塊執行。

4.同步代碼塊:

使用synchronized(){}包裹起來的代碼塊,在多線程環境下,對共享數據的讀寫操作是需要互斥進行的,否則會導致數據的不一致性。同步代碼塊需要寫在方法中。

二.靜態代碼塊和構造代碼塊的異同點

相同點:都是JVM加載類后且在構造函數執行之前執行,在類中可定義多個,一般在代碼塊中對一些static變量進行賦值。

不同點:靜態代碼塊在非靜態代碼塊之前執行。靜態代碼塊只在第一次new時執行一次,之后不在執行。而非靜態代碼塊每new一次就執行一次。

三.示例

普通代碼塊:在方法或語句中出現的{}就稱為普通代碼塊。普通代碼塊和一般語句的執行順序由他們在代碼中出現的次序決定,先出現先執行。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Test {
  public static void main(String[] args) {
    {
      int x = 3;
      System.out.println("普通代碼塊內的變量x=" + x);
    }
    int x = 1;
    System.out.println("主方法內的變量x=" + x);
    {
      int y = 7;
      System.out.println("普通代碼塊內的變量y=" + y);
    }
  }
}
/*
 * 運行結果  普通代碼塊內的變量x=3
 *      主方法內的變量x=1
 *      普通代碼塊內的變量y=7
 */

構造代碼塊:直接在類中定義且沒有加static關鍵字的代碼塊稱為{}構造代碼塊。構造代碼塊在創建對象時被調用,每次創建對象都會被調用,并且構造代碼塊的執行次序優先于類構造函數。如果存在多個構造代碼塊,執行順序由他們在代碼中出現的次序決定,先出現先執行。

?
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
public class Test1 {
    {
        System.out.println("第一構造塊");
    }
    public Test1(int i) {
        System.out.println("第" + i + "次調用" + "構造方法");
    }
    {
        System.out.println("第二構造塊");
    }
    public static void main(String[] args) {
        new Test1(0);
        new Test1(1);
        new Test1(2);
    }
}
/*
 * 執行結果 第一構造塊
 *      第二構造塊
 *      第0次調用構造方法
 *      第一構造塊
 *      第二構造塊
 *      第1次調用構造方法
 *      第一構造塊
 *      第二構造塊
 *      第2次調用構造方法
 */

靜態代碼塊:在java中使用static關鍵字聲明的代碼塊。靜態塊用于初始化類,為類的屬性初始化。每個靜態代碼塊只會執行一次。由于JVM在加載類時會執行靜態代碼塊,所以靜態代碼塊先于主方法執行。

如果類中包含多個靜態代碼塊,那么將按照"先定義的代碼先執行,后定義的代碼后執行"。

注意:

1.靜態代碼塊不能存在于任何方法體內。

2.靜態代碼塊不能直接訪問實例變量和實例方法,需要通過類的實例對象來訪問。

?
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
public class Test3 {
    public static String STATIC_FIELD = "靜態屬性";
    // 靜態塊
    static {
        System.out.println(STATIC_FIELD);
        System.out.println("靜態代碼塊1");
    }
    public String field = "非靜態屬性";
    // 非靜態塊
    {
        System.out.println(field);
        System.out.println("非靜態代碼塊2");
    }
    public InitOderTest() {
        System.out.println("無參構造函數");
    }
    public static void main(String[] args) {
        InitOderTest test = new InitOderTest();
    }
    // 非靜態塊
    {
        System.out.println(field);
        System.out.println("非靜態代碼塊1");
    }
    // 靜態塊
    static {
        System.out.println(STATIC_FIELD);
        System.out.println("靜態代碼塊2");
    }
}
/*
 * 運行結果 靜態屬性
 *      靜態代碼塊1
 *      靜態屬性
 *      靜態代碼塊2
 *      非靜態屬性
 *      非靜態代碼塊2
 *      非靜態屬性
 *      非靜態代碼塊1
 *      無參構造函數
 */

以下代碼演示了創建一個對象并調用方法各個代碼塊之間的優先關系:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Person {
    static{
        System.out.println("1.我是靜態塊,優先于構造塊執行!并且只有創建第一個對象的時候執行一次!");
    }
    {
        System.out.println("2.我是構造塊,優先于構造方法執行!每創建一個對象執行一次!");
    }
    public Person() {
        System.out.println("3.我是構造方法,每創建一個對象執行一次");
    }
    public void function1(){
        System.out.println("我是非靜態方法中的普通代碼塊,方法被調用時執行!");
    }
    public static void function2(){
        System.out.println("我是靜態方法中的普通代碼塊,方法被調用時執行,晚于靜態塊執行!");
    }
}

測試類:

?
1
2
3
4
5
6
7
8
9
public class HelloWrold {
    public static void main(String[] args) {
        new Person().function1();
        new Person().function1();
        System.out.println("=================");
        Person.function2();
        Person.function2();
    }
}

運行結果:

詳解java中的四種代碼塊

我們可以看出:靜態塊總是最先執行的,并且只有在創建該類的第一個實例的時候才會執行一次;第二執行的是構造塊;第三執行的是構造方法。

總結

以上就是本文關于詳解java中的四種代碼塊的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://blog.csdn.net/u012804721/article/details/52439311

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 午夜精品视频 | 日一区二区三区 | 人人干人人爱 | 少妇一区二区三区免费观看 | 中文字幕一二三区 | 国产精品高潮呻吟久久av野狼 | 欧美福利在线观看 | av午夜电影 | 成人伊人 | 久9re热视频这里只有精品 | 中文字幕日韩欧美一区二区三区 | 国产一区二区三区视频在线观看 | 成人在线免费看 | 欧洲精品一区 | 伦理午夜电影免费观看 | 一区日韩 | 日韩欧美国产一区二区 | 国产精品美女久久久久久久久久久 | 牛牛澡牛牛爽一区二区 | 玖玖爱国产| 激情综合网址 | a在线看 | 超级av | 欧美日本在线 | 丁香伊人 | 不卡一区二区三区视频 | 国产精品观看 | 香蕉成人 | 亚洲一区二区三区在线视频 | 激情五月综合 | 在线观看一区 | 欧美国产精品一区 | 国产精品无码久久久久 | 久久久精品在线观看 | 4h影院 | 天天躁人人躁人人躁狂躁 | 成人刺激视频在线 | 久久99精品国产.久久久久 | 欧美日韩成人在线观看 | 亚洲网在线 | 成人日韩在线视频 |