計(jì)算機(jī)等級(jí)二級(jí)java變量

字號(hào):

變量是Java 程序的一個(gè)基本存儲(chǔ)單元。變量由一個(gè)標(biāo)識(shí)符,類型及一個(gè)可選初始值的組合定義。此外,所有的變量都有一個(gè)作用域,定義變量的可見性,生存期。接下來討論變量的這些元素。
    3.8.1 聲明一個(gè)變量
    在Java 中,所有的變量必須先聲明再使用?;镜淖兞柯暶鞣椒ㄈ缦拢簍ype identifier [ = value][,identifier [= value] ...] ;
    type 是Java 的基本類型之一,或類及接口類型的名字(類和接口類型在本書第1部分的后部討論)。標(biāo)識(shí)符(identifier )是變量的名字,指定一個(gè)等號(hào)和一個(gè)值來初始化變量。請(qǐng)記住初始化表達(dá)式必須產(chǎn)生與指定的變量類型一樣(或兼容)的變量。聲明指定類型的多個(gè)變量時(shí),使用逗號(hào)將各變量分開。
    以下是幾個(gè)各種變量聲明的例子。注意有一些包括了初始化。
    int a, b, c; // declares three ints, a, b, and c.int d = 3, e, f = 5; // declares three more ints, initializing // d and f.byte z = 22; // initializes z.
    double pi = 3.14159; // declares an approximation of pi.char x = ’x’; // the variable x has the value ’x’.
    你選擇的標(biāo)識(shí)符名稱沒有任何表明它們類型的東西。許多讀者記得FORTRAN 預(yù)先規(guī)定從I到N的所有標(biāo)識(shí)符都為整型,其他的標(biāo)識(shí)符為實(shí)型。Java 允許任何合法的標(biāo)識(shí)符具有任何它們聲明的類型。
    3.8.2 動(dòng)態(tài)初始化
    盡管前面的例子僅將字面量作為其初始值,Java 也允許在變量聲明時(shí)使用任何有效的表達(dá)式來動(dòng)態(tài)地初始化變量。
    例如,下面的短程序在給定直角三角形兩個(gè)直角邊長度的情況下,求其斜邊長度。
    // Demonstrate dynamic initialization.
    class DynInit {
    public static void main(String args[]) {
    double a = 3.0, b = 4.0;
    // c is dynamically initialized
    double c = Math.sqrt(a * a + b * b);
    System.out.println("Hypotenuse is " + c);
    }
    }
    這里,定義了3個(gè)局部變量a,b,c。前兩個(gè)變量a和b初始化為常量。然而直角三角形的斜邊c被動(dòng)態(tài)地初始化(使用勾股定理)。該程序用了Java 另外一個(gè)內(nèi)置的方法sqrt(),它是Math類的一個(gè)成員,計(jì)算它的參數(shù)的平方根。這里關(guān)鍵的一點(diǎn)是初始化表達(dá)式可以使用任何有效的元素,包括方法調(diào)用、其他變量或字面量。
    3.8.3 變量的作用域和生存期
    到目前為止,我們使用的所有變量都是在方法main() 的后面被聲明。然而,Java 允許變量在任何程序塊內(nèi)被聲明。在第2章中已解釋過了,程序塊被包括在一對(duì)大括號(hào)中。一個(gè)程序塊定義了一個(gè)作用域(scope )。這樣,你每次開始一個(gè)新塊,你就創(chuàng)建了一個(gè)新的作用域。你可能從先前的編程經(jīng)驗(yàn)知道,一個(gè)作用域決定了哪些對(duì)象對(duì)程序的其他部分是可見的,它也決定了這些對(duì)象的生存期。
    大多數(shù)其他計(jì)算機(jī)語言定義了兩大類作用域:全局和局部。然而,這些傳統(tǒng)型的作用域不適合Java 的嚴(yán)格的面向?qū)ο蟮哪P?。?dāng)然將一個(gè)變量定義為全局變量是可行的,但這是例外而不是規(guī)則。在Java 中2個(gè)主要的作用域是通過類和方法定義的。盡管類的作用域和方法的作用域的區(qū)別有點(diǎn)人為劃定。因?yàn)轭惖淖饔糜蛴腥舾瑟?dú)特的特點(diǎn)和屬性,而且這些特點(diǎn)和屬性不能應(yīng)用到方法定義的作用域,這些差別還是很有意義的。因?yàn)橛胁顒e,類(以及在其內(nèi)定義的變量)的作用域?qū)⒈煌七t到第6章當(dāng)討論類時(shí)再來討論。到現(xiàn)在為止,我們將僅僅考慮由方法或在一個(gè)方法內(nèi)定義的作用域。
    方法定義的作用域以它的左大括號(hào)開始。但是,如果該方法有參數(shù),那么它們也被包括在該方法的作用域中。本書在第5章將進(jìn)一步討論參數(shù),因此,現(xiàn)在可認(rèn)為它們與方法中其他變量的作用域一樣。
    作為一個(gè)通用規(guī)則,在一個(gè)作用域中定義的變量對(duì)于該作用域外的程序是不可見(即訪問)的。因此,當(dāng)你在一個(gè)作用域中定義一個(gè)變量時(shí),你就將該變量局部化并且保護(hù)它不被非授權(quán)訪問和/或修改。實(shí)際上,作用域規(guī)則為封裝提供了基礎(chǔ)。
    作用域可以進(jìn)行嵌套。例如每次當(dāng)你創(chuàng)建一個(gè)程序塊,你就創(chuàng)建了一個(gè)新的嵌套的作用域。這樣,外面的作用域包含內(nèi)部的作用域。這意味著外部作用域定義的對(duì)象對(duì)于內(nèi)部作用域中的程序是可見的。但是,反過來就是錯(cuò)誤的。內(nèi)部作用域定義的對(duì)象對(duì)于外部是不可見的。
    為理解嵌套作用域的效果,考慮下面的程序:
    // Demonstrate block scope.
    class Scope {
    public static void main(String args[]) {
    int x; // known to all code within main
    x = 10;
    if(x == 10) { // start new scope