2_1.4 final 變數

2011年8月10日 星期三

| | |

2_1.4 final 變數
        在撰寫程式以解決問題時,經常會使用算術的四則運算,像是在計算幾何圖形的面積、周長,以及體積,就可能同時使用加法與乘法計算。看看底下的範例

Chap2_1_9
// 計算圓的周長和面積(圓周率以浮點數常值表示)
class Chap2_1_9 {
public static void main(String[] args) {
int radius = 3;           //代表圓的半徑為3
System.out.println("圓半徑= " + radius);

System.out.println("圓周長 = " + 2 * 3.14 * radius+ "。");
System.out.println("圓面積 = " + 3.14 * radius* radius+ "。");
}
}

結果
圓半徑= 3
圓周長 = 18.84。
圓面積 = 28.259999999999998。


程式說明:
1. 上面程式在計算圓的周長和面積,使用的公式分別是,圓周長=直徑*圓周率,以及圓面積     =半徑*半徑*圓周率。
2. 變數r表示圓半徑,直徑就等於2*radius。另外,我們使用3.14來表示圓周率,讓程式方便計
   算圓周長和面積。最後,將計算得到的結果顯示到螢幕。

        事實上,圓周率的值並不等於3.14,而是無限小數3.14159265...。所以,我們基於計算上的方便,將該值簡化成3.14。但是,如果我們需要更高的精確度,而必須將3.14更改成3.1416的話,就會碰到更改數值的問題。當然,在這個範例中,我們只需要更改兩個地方,好像不是很困難。你可以直接找到需要更改的地方,將數值3.14更改成3.1416;或者,你也可以利用編譯器的「尋找/取代」功能,逐筆修改數值。

       不過,在一個實際的專案裡,這個問題可能變得非常複雜。因為,你可能會需要更改到非常多的檔案。這時候,利用變數來代表圓周率,應該是個不錯的解決方式。例如,可以利用變數PI來表示圓周率,然後依照需求來更改PI的數值,像是令PI=3.1416,就可解決這個問題。

       但是,對一個專案而言,圓周率(PI)應該是個固定數值。也就是說,你不會希望在不同的檔案裡,變數PI的數值內容會不同。換句話說,對同個專案來說,變數PI一旦給了數值,就不會在其他地方隨意更改它的內容。為了達到這個目的,我們可以這樣宣告final PI=3.1416;。

Chap2_1_10.java
// 計算圓的周長和面積(使用final變數表示圓周率)

class Chap2_1_10 {

public static void main(String[] args) {                        
                        final double PI = 3.1416;              // 圓周率
int radius = 3;

System.out.println("圓周長 = " + 2 * PI * radius + "。");
System.out.println("圓面積 = " + PI * radius* radius + "。");
}
}

結果
圓周長 = 18.8496。
圓面積 = 28.2744。


程式說明:
1. 本程式利用final變數PI來表示圓周率,讓程式更具可讀性,也可依照需求更彈性地修改程    式。
2. 使用final變數除了讓程式明瞭易懂外,也可以集中管理一些特定數值,本例中以final變數PI來    表示圓周率就是很好的示範。

       所以,我們可以將 final 變數,視為一種存放固定東西的箱子。當這個箱子已經有東西在裡面時,它就不允許再放入其它的東西。另外,不論是初始化或指定數值,對final變數而言,都只有一次的機會。.因此,應該盡量初始化final變數。

[重要] 使用final變數來表示特定的數值。

[補充] 建議使用大寫字母來命名final變數。

挑戰題 :

Err2_1_4.java
class Err2_1_4{

public static void main(String[] args){
final int x = 5;
int y = 3;

System.out.println("x + y = " + (x + y));

x = 6;
y = 9;

System.out.println("x + y = " + (x+y));

}
}

結果
D:\chap2\err\Err2_1_4.java:8: cannot assign a value to final variable x
x = 6;
^
1 error

0 意見:

張貼留言