變數的作用域規定了變數所能使用的範圍,只有在作用域範圍內變數才能被使用。根據變數宣告地點的不同,變數的作用域也不同。
根據作用域的不同,一般將變數分為不同的型別:類變數、區域性變數、方法引數變數及例外處理引數變數。下面對這幾種變數進行詳細說明。
類變數
類變數也稱為
成員變數,宣告在類中,不屬於任何一個方法,作用域是整個類。
例 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 塊。