1. 程式人生 > >java復習基礎篇——代碼執行順序

java復習基礎篇——代碼執行順序

創建對象 span 相同 static 需要 成員 函數 stat 圖片

代碼塊:在Java中,使用{}括起來的代碼成為代碼塊

根據其位置和聲明的不同,可以分為局部代碼塊:局部位置,用於限定變量的生命周期

構造代碼塊:在類中的成員位置,用{}括起來的代碼。每次調用構造方法執行前,都會先執行構造代碼塊。

作用:可以把多個構造方法的共同代碼放在一起。

靜態代碼塊:在類中的成員位置,用{}括起來的代碼,只不過它用static修飾

作用:一般是對類進行初始化

public class BlockTest {
    {
    System.out.println("444 BlockTest構造代碼塊(上)!");
    }

      public static void main(String[] args) {
      {
      System.out.println("222 局部代碼塊運行!");
      }
    System.out.println("333 BlockTest主方法執行了");
    BlockTest blockTest = new BlockTest();
    Coder cd = new Coder();
    Coder cd2 = new Coder();
                      }

    static {
    System.out.println("111 BlockTest靜態代碼塊被執行");
       }

    {
    System.out.println("555 BlockTest構造代碼塊被執行(下)");
    }

      public BlockTest() {
      System.out.println("666 BlockTest無參構造執行");
              }
        }    class Coder {

    static {
    System.out.println("777 Coder靜態代碼塊被執行");
      }

    {
    System.out.println("888 Coder構造代碼塊被執行");
    }

      public Coder() {
      System.out.println("999 Coder無參構造執行");
             }
          }

執行順序結果:

技術分享圖片

【1】靜態代碼塊

作用:是對類進行初始化,若一個類包含多個靜態代碼塊,那則是按照代碼執行順序執行。

1.隨著類的加載而執行,而且只一次。

2.優先於主函數執行。

3. 當類進入內存時,首先進行靜態代碼加載,例如靜態代碼塊,用static 修飾的變量,函數等。靜態代碼塊用於初始化類。構造函數是對對象進行初始化,而靜態代碼塊可以對類進行初始化,就如在靜態代碼塊中把靜態變量 num 修改他的值。而且在一些不需要對類實例化的場合,靜態代碼塊也可以非常有用。

【2】構造代碼塊

在類中:

格式:{構造代碼塊執行語句}

作用:就是給所有對象進行初始化。

註意幾點:1.每次創建對象他都會執行。

2.構造代碼快是優於構造函數執行。

3.構造代碼塊與構造函數的區別是:構造代碼塊是給所有對象進行統一初始化,而構造函數是給對應的對象初始化,因為構造函數是可以多個的,運行哪個構造函數就會建立什麽樣的對象,但無論建立哪個對象,都會先執行相同的構造代碼塊。也就是說,構造代碼塊中定義的是不同對象共性的初始化內容。

【3】局部代碼塊

局部代碼塊,又叫普通代碼塊。它是作用在方法中的代碼塊。

作用:是控制變量的生命周期。

在程序中當我們定義完成一個局部變量x之後,並且在接下來的代碼中,不想再用到它時,那麽就沒必要讓x在內存中繼續占用空間。因此就有了局部代碼塊。

面試題?

靜態代碼塊、構造代碼塊、構造方法的執行順序?

靜態代碼塊>構造代碼塊>構造方法

靜態代碼塊:只執行一次

構造方法:每次調用構造方法都執行

java復習基礎篇——代碼執行順序