中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何理解Java代碼塊

發布時間:2021-11-20 17:13:40 來源:億速云 閱讀:137 作者:柒染 欄目:大數據

如何理解Java代碼塊,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

靜態代碼塊

首先我們來回顧一下static關鍵字,static關鍵字可以修飾類和類的成員還有構造函數,特點就是在類創建對象前加載并且是所有對象共享的資源,比如靜態方法可以直接類名打點調用,不需要使用new關鍵字來創建對象。
關于靜態方法和非靜態方法的比較
靜態方法:
  1. 靜態方法只可以調用靜態成員不可以調用非靜態成員

  2. 沒有this對象

非靜態方法:
  1. 非靜態方法既可以調用非靜態成員也可以調用靜態成員

靜態代碼塊作用域:在類的內部方法外,使用static修飾

public class CodeBlock {    static{        System.out.println("這是靜態代碼塊");    }}

什么時候執行: 靜態代碼塊在類被加載的時候就運行了,而且只運行一次,并且優先于各種代碼塊以及構造函數。如果一個類中有多個靜態代碼塊,會按照書寫順序依次執行

關于靜態代碼塊的問題:
  1. 靜態代碼塊是否可以訪問方法?這個問題需要從上面的靜態方法來解答,靜態代碼塊是可以調用靜態方法,但是無法調用非靜態方法

  2. 靜態代碼塊是否可以放在方法體?這個是不可以的,即使是靜態方法也是不可以放靜態代碼塊的,且靜態代碼塊是只能放在類內部,無法放在靜態方法內部,因為靜態塊是加載類的時候就執行,而靜態方法是需要調用才執行,這里是有沖突的。

局部代碼塊

作用域:存在方法中

public static void main (String[] args){    {        int number = 1;    }    System.out.println(number);//異常}

 局部代碼塊執行順序是和普通語句一樣,只不過區分的是在代碼塊中的變量無法在代碼塊外部調用,如上所示,輸出number時異常,這樣有效的控制變量的生命周期,及早釋放提高內存使用率。

構造代碼塊

構造代碼塊作用域:在類的內部且在方法外,與靜態代碼塊的區別在于沒有static修飾,且在類創建對象時執行
public class CodeBlock {    {        System.out.println("這是構造代碼塊");    }}
構造代碼塊是在創建類的對象才執行,每次創建該類的實例就會執行一次,如有多個構造代碼塊,執行順序為從上至下。 

同部代碼塊

同步代碼塊作用域:在方法內部,用synchronized修飾的代碼塊 

public class CodeBlock {    public void syncMethod(Object obj){        synchronized  (obj){
       }    }}

synchronized實質上是一個鎖,為什么需要用鎖?當有多條線程同時訪問共享數據時,會發生資源搶占,如果不進行處理那么有可能會出現每個線程獲取到的數據都是不正確的,這里我們可以使用同步方法或者同步代碼塊,當一個線程進來時,我們需要把其他線程擋在外面,直到這個線程使用完后才讓其他線程使用該資源。

代碼塊執行順序
public class CodeBlock {    static{        System.out.println("靜態代碼塊");    }    {        System.out.println("構造代碼塊");    }    public CodeBlock(){        System.out.println("無參構造函數");    }
   public void sayHello(){        {            System.out.println("局部代碼塊");        }    }
   public static void main(String[] args) {        System.out.println("執行了main方法");
       new CodeBlock().sayHello();;    }}
執行結果
靜態代碼塊執行了main方法構造代碼塊無參構造函數局部代碼塊
執行順序為:靜態代碼塊-->構造代碼塊-->構造函數-->局部代碼塊(跟同步代碼塊是同一級別)
關于父子類的代碼塊執行順序,這里就不多花時間了,執行順序父類的執行在子類之前執行,除非是重寫父類的方法。

關于如何理解Java代碼塊問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

横峰县| 朝阳县| 太湖县| 嘉荫县| 千阳县| 治多县| 南岸区| 东山县| 社会| 大渡口区| 安图县| 浪卡子县| 陆丰市| 手机| 兴国县| 临泽县| 宁安市| 舞钢市| 乌兰县| 香港| 安康市| 凌源市| 莲花县| 洛川县| 广平县| 伊金霍洛旗| 云霄县| 乌兰察布市| 农安县| 育儿| 苗栗市| 环江| 孟津县| 六安市| 大同市| 织金县| 陈巴尔虎旗| 泽普县| 武夷山市| 冕宁县| 西华县|