一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

服務器之家 - 編程語言 - Java教程 - Java中靜態代碼塊、構造代碼塊、構造函數和普通代碼塊的區別

Java中靜態代碼塊、構造代碼塊、構造函數和普通代碼塊的區別

2023-05-08 01:01未知服務器之家 Java教程

目錄 1、靜態代碼塊 ①、格式 ②、執行時機 ③、靜態代碼塊的作用 ④、靜態代碼塊不能存在任何方法體中 ⑤、靜態代碼塊不能訪問普通變量 2、構造代碼塊 ①、格式 ②、執行時機 ③、構造代碼塊的作用 3、構造函數 4、普通代碼

目錄
  • 1、靜態代碼塊
    • ①、格式
    • ②、執行時機
    • ③、靜態代碼塊的作用
    • ④、靜態代碼塊不能存在任何方法體中
    • ⑤、靜態代碼塊不能訪問普通變量
  • 2、構造代碼塊
    • ①、格式
    • ②、執行時機
    • ③、構造代碼塊的作用
  • 3、構造函數
    • 4、普通代碼塊
      • 5、執行順序
        • 6、父類和子類執行順序

          1、靜態代碼塊

          ①、格式

          在java類中(方法中不能存在靜態代碼塊)使用static關鍵字和{}聲明的代碼塊:

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

          ②、執行時機

          靜態代碼塊在類被加載的時候就運行了,而且只運行一次,并且優先于各種代碼塊以及構造函數。如果一個類中有多個靜態代碼塊,會按照書寫順序依次執行。后面在比較的時候會通過具體實例來證明。

          ③、靜態代碼塊的作用

          一般情況下,如果有些代碼需要在項目啟動的時候就執行,這時候就需要靜態代碼塊。比如一個項目啟動需要加載的很多配置文件等資源,我們就可以都放入靜態代碼塊中。

          ④、靜態代碼塊不能存在任何方法體中

          這個應該很好理解,首先我們要明確靜態代碼塊是在類加載的時候就要運行了。我們分情況討論:

          對于普通方法,由于普通方法是通過加載類,然后new出實例化對象,通過對象才能運行這個方法,而靜態代碼塊只需要加載類之后就能運行了。

          對于靜態方法,在類加載的時候,靜態方法也已經加載了,但是我們必須要通過類名或者對象名才能訪問,也就是說相比于靜態代碼塊,靜態代碼塊是主動運行的,而靜態方法是被動運行的。

          不管是哪種方法,我們需要明確靜態代碼塊的存在在類加載的時候就自動運行了,而放在不管是普通方法還是靜態方法中,都是不能自動運行的。

          ⑤、靜態代碼塊不能訪問普通變量

          這個理解思維同上,普通變量只能通過對象來調用,是不能放在靜態代碼塊中的。

          2、構造代碼塊

          ①、格式

          在java類中使用{}聲明的代碼塊(和靜態代碼塊的區別是少了static關鍵字):

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

          ②、執行時機

          構造代碼塊在創建對象時被調用,每次創建對象都會調用一次,但是優先于構造函數執行。需要注意的是,聽名字我們就知道,構造代碼塊不是優先于構造函數執行,而是依托于構造函數,也就是說,如果你不實例化對象,構造代碼塊是不會執行的。怎么理解呢?我們看看下面這段代碼:

          public class CodeBlock {
              {
                  System.out.println("構造代碼塊");
              }
              public CodeBlock(){
                  System.out.println("無參構造函數");
              }
              public CodeBlock(String str){
                  System.out.println("有參構造函數");
              }
          }

          我們反編譯生成的class文件:

          Java中靜態代碼塊、構造代碼塊、構造函數和普通代碼塊的區別

          5、執行順序

          靜態代碼塊>構造代碼塊>構造函數>普通代碼塊 

          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();;
                  System.out.println("---------------");
                  new CodeBlock().sayHello();;
              }
          }

          反編譯生成的class文件:

          Java中靜態代碼塊、構造代碼塊、構造函數和普通代碼塊的區別

          原文地址:https://thinkstu.blog.csdn.net/article/details/129020228

          延伸 · 閱讀

          精彩推薦
          主站蜘蛛池模板: 国产第一页无线好源 | 美女翘臀跪床被打屁股作文 | 国产麻豆剧果冻传媒观看免费视频 | 亚洲日本久久一区二区va | 亚洲色图图 | 91传媒制片厂果冻有限公司 | 办公室里被迫高h | 国产麻豆剧果冻传媒观看免费视频 | 国产亚洲欧美成人久久片 | 99精品视频在线观看re | www.伊人| 精品久久日日躁夜夜躁AV | 2023最新伦理片 | 国产高清在线视频一区二区三区 | 奇米888在线看奇米999 | 国产精品久久久久久久牛牛 | 久久精品手机观看 | 9久re在线观看视频精品 | 爽好大快深点一视频 | 国产一卡| 91欧美国产 | 亚洲aⅴ男人的天堂在线观看 | 精品久久久久久久国产潘金莲 | 国产裸舞在线一区二区 | 色综合欧美色综合七久久 | 久久99精品国产自在自线 | 99久久国产综合精品网成人影院 | 欧美一区二区三区免费看 | 久久久久久久久女黄9999 | 国产一级黄毛片 | 午夜欧美精品久久久久久久久 | 国产日韩欧美综合在线 | 国产成人www| 男女姓交大视频免费观看 | 欧美伊人久久久久久久久影院 | 精品国产日韩一区三区 | 四虎综合九九色九九综合色 | 久久嫩草影院网站 | 免费 视频| 国产福利不卡视频 | 日本视频在线播放 |