java復習基礎篇——代碼執行順序
代碼塊:在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復習基礎篇——代碼執行順序