Java變數的作用域

2020-07-16 10:05:01
變數的作用域規定了變數所能使用的範圍,只有在作用域範圍內變數才能被使用。根據變數宣告地點的不同,變數的作用域也不同。

根據作用域的不同,一般將變數分為不同的型別:類變數、區域性變數、方法引數變數及例外處理引數變數。下面對這幾種變數進行詳細說明。

類變數

類變數也稱為成員變數,宣告在類中,不屬於任何一個方法,作用域是整個類。

例 1

假設在一個類中宣告了 3 個變數,下面編寫一個測試類輸出引起變數的值改變的範例程式碼。

變數宣告程式碼如下所示:
public class DataClass {
    int price=100;    // 定義類變數 price
    price String name;    // 定義類變數 name
    name int num;    // 定義類變數 num
}

測試類程式碼如下所示:
public class Test {
    public static void main(String[] args) {
        DataClass dc=new DataCLass();
        System.out.println("name="+dc.name);
        System.out.println("num="+dc.num);
        System.out.println("price="+dc.price);
    }
}

執行效果如下所示:
name=null
num=0
price=100

在本例的第一段程式碼中定義了 3 個成員變數,並對其中第一個變數 price 進行了初始化,而第二個 name 變數和第三個變數 num 沒有進行初始化。由輸出結果可以看出,第一個變數的值為顯示初始化的值,第二個和第三個變數的值則為系統預設初始化的值。

區域性變數

區域性變數是指在方法或者方法程式碼塊中定義的變數,其作用域是其所在的程式碼塊。

例 2

宣告兩個區域性變數並輸出其值,其實現程式碼如下:
public class Test2 {
    public static void main(String[] args) {
        int a=7;
        if(5>3) {
            int s=3;    // 宣告一個 int 型別的區域性變數
            System.out.println("s="+s);
            System.out.println("a="+a);
        }
        System.out.println("a="+a);
    }
}

上述範例中定義了 a 和 s 兩個區域性變星,其中 int 型別的 a 的作用域是整個 main() 方法,而 int 型別的變數 s 的作用域是 if 語句的程式碼塊內,其執行結果如下:
s=3
a=7
a=7

方法引數變數

作為方法引數宣告的變數的作用域是整個方法。

例 3

宣告一個方法引數變數,實現程式碼如下:
public class Test3 {
    public static void testFun(int n) {
        System.out.println("n="+n);
    }
    public static void main(String[] args) {
        testFun(B);
    }
}

在上述範例中定義了一個 testFun() 方法,該方法中包含一個 int 型別的引數變數 n,其作用域是 testFun() 方法體內。當呼叫方法時傳遞進了一個引數 3,因此其輸出控制台的 n 值是 3。

例外處理引數變數

例外處理引數變數的作用域是在例外處理塊中,該變數是將例外處理引數傳遞給例外處理塊,與方法引數變數類似。

例 4

宣告一個例外處理語句,實現程式碼如下:
public class Test4 {
    public static void test() {
        try {
            System.out.println("Hello!Exception!");
        } catch(Exception e) {   // 例外處理塊,引數為 Exception 型別
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        test();
    }
}

在上述範例中定義了例外處理語句,例外處理塊 catch 的引數為 Exception 型別的變數 e,作用域是整個 catch 塊。