IT兄弟連 Java語法教程 變量2

變量的做用域和生命週期java

到目前爲止,使用的全部變量都是在main()方法開始時聲明的,然而,Java容許在任何代碼塊(代碼塊以開花括號開始,以閉花括號結束)中聲明變量,代碼塊定義了做用域。所以,每當開始一個新的代碼塊時就建立了一個新的做用域。做用域決定了變量(對象)對程序的其它部分的可見性,而且也決定了這些變量(對象)的生命週期。學習

許多其餘的計算機語言定義了兩種通用的做用域類別,全局做用域和局部做用域。然而這些傳統的做用域不能很好地適應Java中嚴格的、面向對象的模型。雖然能夠建立屬於全局做用域的變量,但這只是例外,而不是規則。在Java中,兩種主要的做用域分別由類和方法定義的。儘管這種分類有些人爲的因素,可是,因爲類做用域具備的一些獨特屬性和特徵,不能應用於由方法定義的做用域,所以這種分類方法是有必定的道理的。因爲存在這種差異,對類做用域的介紹已經超出了本書的內容範圍,因此本書將只分析由方法定義及在方法中定義的做用域。對象

由方法定義的做用域從方法的開花括號開始。然而,若是方法具備參數,那麼它們也會被包含到方法的做用域中。做爲通用規則,在做用域中聲明的變量,對於在做用域以外定義的代碼是不可見的(即不可以使用)。所以,當在某個做用域中聲明變量時,就局部化對象了該變量,並保護它免受未受權的使用或修改。實際上,做用域規則爲封裝(將在學習面向階段時學習封裝,封裝是面向對象的三大特徵之一,面向對象的三大特徵分別是:封裝、繼承和多態)提供了基礎。blog

做用域是能夠嵌套的。例如,每當建立一個代碼塊時,就建立了一個新的、嵌套的做用域。當遇到這種狀況時,外層的做用域包圍了內層的做用域。這意味着在外層做用域中聲明的變量對內層做用域中的代碼是可見的。然而,反過來就不是這樣了,在內層做用域中聲明的變量,在內層做用域以外是不可見的。繼承

在代碼塊中,能夠在任意位置聲明變量,可是隻有在聲明以後變量纔是有效的。所以,若是在方法的開頭定義變量,那麼變量對於該方法的全部代碼都是可見的,相反,若是在代碼塊的末尾聲明變量,那麼變量是無用的,由於沒有代碼可以訪問該變量。生命週期

當進入變量的做用域時建立變量,當離開它們的做用域時銷燬變量。這意味着一旦離開做用域,變量就不會保持原來的值。因此,對於在方法中聲明的變量來講,在兩次調用該方法之間,變量不會保持它們的值。此外,對於在代碼塊中聲明的變量來講,當離開代碼塊時會丟失它們的值。所以,變量的生命週期被限制在做用域以內。作用域

若是變量聲明中包含初始化,那麼每當進入聲明變量的代碼塊時都會從新初始化變量。字符串

 

變量的使用編譯

使用變量的方式有不少,使用System.out.println()在控制檯輸出變量值是使用變量的一種方式,也可使用運算符完成變量之間的運算。新建Java源代碼文件Example01.java,編寫以下代碼:class

public class Example01{

    /**

     * main方法,程序執行的入口

     */

    public static void main(String[] args){

         int price = 10;

         int count = 5;

         System.out.println("商品總價:" + price * count);

    }

}

上面的案例在運算中,使用「*」完成了變量之間乘法運算,使用「+」完成了字符串與數字的拼接,最終輸入結果如圖2所示:

82e2f1bf588348b3a2e462ebff5b5314.png

圖2  Example01運行結果

 

須要注意的是僅僅聲明但沒有初始化的變量是不容許使用的,例如如下代碼:

public class Example01{

    /**

     * main方法,程序執行的入口

     */

    public static void main(String[] args){

         int price = 10;

         int count = 5;

         System.out.println("商品總價:" + price * count);

         int num;               //聲明一個變量可是沒有進行初始化

         System.out.println(num);        //使用一個未初始化的變量,在編譯階段將                                     //提示錯誤信息

    }

}

編譯以上代碼,控制檯將提示如圖3所示的錯誤。

9c8e800534394528bac2322192387d29.png

圖3  編譯錯誤

相關文章
相關標籤/搜索