<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評(píng)論 :: 0 Trackbacks
    Java學(xué)習(xí)(一).Java基礎(chǔ)

    ?
    1、標(biāo)識(shí)符

    ??? Java語(yǔ)言的字符使用Unicode編碼標(biāo)準(zhǔn)。Unicode字符集中的每個(gè)字符為16位編碼。這樣,Java語(yǔ)言的字符就不僅可以表示常用的ASCII字符,即數(shù)字0~9、英文字母A~Z、a~z以及+、-、*、/等常用符號(hào),還可以表示如漢字、拉丁語(yǔ)、希臘語(yǔ)等其他語(yǔ)言文字。
    ??? 標(biāo)識(shí)符是由字母、數(shù)字、下劃線(_)、美元符($)組成的、必須以字母、下劃線或美元符開頭的、字符個(gè)數(shù)有限的字符序列。如i、count、myStack、GetValue、_length等都是合法的標(biāo)識(shí)符。Java語(yǔ)言在定義標(biāo)識(shí)符時(shí),其字母符號(hào)區(qū)分大小寫(或稱是大小寫敏感的),所以count、Count、COUNT表示不同的標(biāo)識(shí)符。標(biāo)識(shí)符可以用來(lái)命名變量名、常量名、類名等。
    ??? Java語(yǔ)言中有固定含義的標(biāo)識(shí)符稱作關(guān)鍵字。用戶不允許用關(guān)鍵字定義標(biāo)識(shí)符。Java語(yǔ)言中的關(guān)鍵字共有47個(gè),如下表所示。

    abstract ? boolean? ? break?? ???? byte? ??? case? ???? catch
    char? ???? class? ??? continue? ?? default ? do?? ????? double
    else? ???? extends? ? false?? ???? final? ?? finally ?? float
    for?? ???? if?? ????? implements? import? ? instanceof int
    interface long? ???? native?? ??? new?? ??? null? ???? package
    private? ? protected public?? ??? return? ? short? ??? static
    super? ??? switch? ?? synchronized this? ??? throw? ??? throws
    transient true? ???? try??? ????? void? ??? while
    注:goto也是保留的關(guān)鍵字,雖然不能在java中使用
    ?

    2、變量和常量

    ??? 程序通常要處理數(shù)據(jù),處理數(shù)據(jù)首先要保存數(shù)據(jù)。程序中要保存的數(shù)據(jù)都需要系統(tǒng)分配內(nèi)存空間。變量和常量都需要系統(tǒng)分配內(nèi)存空間。

    變量:
    ??? 變量是一個(gè)保存數(shù)據(jù)的內(nèi)存區(qū)域的名字。變量在使用時(shí)必須先定義(或稱聲明),然后才能用賦值語(yǔ)句(或其他形式)來(lái)為其賦值。
    ??? 變量定義是指示編譯器為特定數(shù)據(jù)類型的數(shù)值保存在內(nèi)存中分配適當(dāng)?shù)膬?nèi)存空間。這樣,在隨后的程序中就可以用賦值語(yǔ)句(或其他形式,如在變量定義時(shí)直接給出初始值)為該變量賦值。變量名的命名必須符合2.1節(jié)所說(shuō)的標(biāo)識(shí)符的命名規(guī)定。
    ??? 變量聲明的格式為:
    ??? <數(shù)據(jù)類型名><變量名表>;
    ??? 隨著程序規(guī)模的擴(kuò)大,經(jīng)常是多人合作完成一個(gè)程序的編寫。為了防止變量使用的混亂,變量的使用范圍是受限的,每個(gè)變量只在自己的使用范圍內(nèi)有效。變量的使用范圍稱作變量的作用域。變量的使用范圍是定義該變量的程序塊。
    ?
    【例2.1】關(guān)于變量作用域的示例
    public class Example2_1
    {
    ??? public static void main(String args[])
    ??? {
    ??????? int i = 10, j;
    ??????? j? = 20;
    ???????? {
    ??????????? int k = 100;
    ??????????? System.out.println("k = " + k );
    ??????? }
    //????? System.out.println("i = " + i + "? j = " + j + "??? k = " + k);
    ??????? System.out.println("i = " + i + "? j = " + j );
    ??? }
    }

    程序運(yùn)行結(jié)果:
    k = 100
    i = 10 j = 20

    ??? 程序說(shuō)明:
    ??? 在main函數(shù)中,定義了int類型的變量i和j,變量i在定義時(shí)給了初始化值10,變量j隨后用賦值語(yǔ)句賦了數(shù)值20。在此程序塊中,輸出語(yǔ)句輸出了變量i和j的當(dāng)前數(shù)值。在下一層程序塊(即下一層的花括號(hào)所括的范圍)內(nèi),又定義了int類型的變量k,由于此變量k的作用范圍只限于下一層程序塊內(nèi),所以輸出語(yǔ)句中如果包括了變量k(即如果使用了注釋掉的語(yǔ)句),則編譯器將指示錯(cuò)誤。
    ??? 在程序設(shè)計(jì)中,例子中所示的程序塊形式并不多見。常見的程序塊形式是if語(yǔ)句、while語(yǔ)句、for語(yǔ)句等后面跟隨的一對(duì)花括號(hào)。以此類推,可以知道,在一個(gè)函數(shù)中定義的變量只在該函數(shù)內(nèi)有效。

    常量:
    ??? 在程序設(shè)計(jì)中,有時(shí)需要定義一個(gè)變量,并要求該變量在整個(gè)程序運(yùn)行期間保持不變,這種在整個(gè)程序運(yùn)行期間保持不變的變量稱作常量。常量也是一種標(biāo)識(shí)符,所以定義常量時(shí)也要符合標(biāo)識(shí)符的規(guī)定。
    ??? 定義常量的方法是在定義變量的語(yǔ)句最前面加上關(guān)鍵字final。
    ??? 和變量類同,常量定義也是指示編譯器為特定數(shù)據(jù)類型的數(shù)值保存在內(nèi)存中分配適當(dāng)?shù)膬?nèi)存空間。常量和變量惟一的不同之處是,常量只允許在定義時(shí)給出其數(shù)值,并不允許在隨后的程序中改變其數(shù)值。在習(xí)慣上,常量名通常為全大寫字母。例如:final int MAXSIZE = 100; 就定義了常量MAXSIZE等于100。
    ?
    ?
    3、基本數(shù)據(jù)類型

    ??? 數(shù)據(jù)類型規(guī)定了一類數(shù)據(jù)的數(shù)據(jù)位長(zhǎng)度(或稱字符個(gè)數(shù))、取值范圍以及對(duì)該類數(shù)據(jù)所能進(jìn)行的操作。
    ??? Java語(yǔ)言中共定義了8種基本數(shù)據(jù)類型,其中4種為整型數(shù),2種為浮點(diǎn)型數(shù),1種為字符型數(shù),1種為布爾型數(shù)。數(shù)據(jù)類型不同,所定義的變量占用的內(nèi)存空間、取值范圍以及對(duì)該類數(shù)據(jù)所能進(jìn)行的操作也不同。
    ??? Java語(yǔ)言定義的8種基本數(shù)據(jù)類型及相應(yīng)的關(guān)鍵字如下:
    ? ? 型:byte 、short、 int、 long
    ? 浮點(diǎn)型:float、double
    ? 邏輯型:boolean
    ? 字符型:char

    1.整型
    ??? 整型數(shù)是零和有限范圍的正整數(shù)和負(fù)整數(shù)。由于4種不同整型數(shù)的數(shù)據(jù)位不同,所以相應(yīng)的正整數(shù)和負(fù)整數(shù)的范圍也不同。
    ??? Java的整數(shù)類型
    ??? 類型 ??????? 數(shù)據(jù)位 ??? 數(shù)值范圍
    ??? 字節(jié)型byte ? 8 bits ??? -128——127(即-2^7——2^7-1)
    ??? 短整型short 16 bits ??? -32768——32767(即-2^15——2^15-1)
    ??? ? int ?? 32 bits ??? -2147483648——2147483647(即-2^31——2^31-1)
    ??? 長(zhǎng)整型long ? 64 bits ??? -9223372036854775808——9223372036854775807(即-2^63——2^63-1)

    ??? Java的整型數(shù)可以表示為十進(jìn)制、八進(jìn)制或十六進(jìn)制。具體表示方法為:
    ? 十進(jìn)制:用若干個(gè)0~9之間的數(shù)字表示,并規(guī)定首位不能為0,如123。
    ? 八進(jìn)制:以0打頭,后跟若干個(gè)0~7之間的數(shù)字,如0123。
    ? 十六進(jìn)制:以0x或0X打頭,后跟若干個(gè)0~9之間的數(shù)字以及a~f之間的小寫字母或A~F之間的大寫字母,a~f或A~F分別表示數(shù)值10~15,如0X123E。
    ??? 注:字面值是在程序中用到的顯式數(shù)據(jù)值,如123就是一個(gè)字面值。
    ??????? Java語(yǔ)言規(guī)定,所有的整型字面值都隱含為int型。
    ??????? 若要將一個(gè)整數(shù)字面值明確地表示為long型時(shí),需在后面加L或l,如21474836470L或12345l。

    2.浮點(diǎn)型
    ??? 浮點(diǎn)型數(shù)由整數(shù)部分和小數(shù)部分組成。浮點(diǎn)型數(shù)用來(lái)表示實(shí)數(shù)。浮點(diǎn)數(shù)有兩種表示方式:
    ? 標(biāo)準(zhǔn)記數(shù)法:由整數(shù)部分、小數(shù)點(diǎn)和小數(shù)部分構(gòu)成。如123.123,123.0。
    ? 科學(xué)記數(shù)法:由整數(shù)、小數(shù)點(diǎn)、小數(shù)和指數(shù)部分構(gòu)成,指數(shù)部分由一個(gè)e或E后跟帶正負(fù)號(hào)的整數(shù)表示。如123.123用科學(xué)記數(shù)法可表示為1.23123E+2。需要注意的是,科學(xué)記數(shù)法中,一個(gè)浮點(diǎn)型數(shù)的整數(shù)部分不一定是小數(shù)點(diǎn)前的整數(shù)。
    ??? 浮點(diǎn)型數(shù)可以表示精度很高的或帶有小數(shù)部分的數(shù)值。當(dāng)一個(gè)變量要保存此類數(shù)值時(shí),該變量必須定義為浮點(diǎn)型變量。
    ??? Java語(yǔ)言的浮點(diǎn)型有float和double兩種。浮點(diǎn)數(shù)類型的類型、數(shù)據(jù)位和數(shù)值范圍如下:
    ??? Java的浮點(diǎn)數(shù)類型
    ??? 類型 ?????????? 數(shù)據(jù)位 ? 數(shù)值范圍
    ??? 單精度浮點(diǎn)float ? 32 bits ? 3.4e-038——3.4e+038
    ??? 雙精度浮點(diǎn)double 64 bits ? 1.7e-308——1.7e+308

    ??? Java語(yǔ)言規(guī)定,所有的浮點(diǎn)型字面值都隱含為double型。若要將一個(gè)浮點(diǎn)型字面值明確地表示為float型時(shí),需在后面加F或f,如123.123F或1.23123E+2f。
    ??? 在定義變量時(shí),對(duì)于整型變量或浮點(diǎn)型變量,要認(rèn)真分析變量可能的取值范圍,并選擇合適的數(shù)據(jù)類型來(lái)定義變量,以免造成內(nèi)存空間浪費(fèi),或由于超出數(shù)值范圍或數(shù)值精度不夠而造成出錯(cuò)。例如,如果一個(gè)變量的取值為確定的1到1000,則該變量應(yīng)定義成short類型。又例如,如果一個(gè)變量的可能取值無(wú)法準(zhǔn)確估計(jì),則應(yīng)按該變量可能的最大數(shù)值、并保留相當(dāng)?shù)膶捲3潭葋?lái)選擇該變量的數(shù)據(jù)類型。
    ?
    3.邏輯型
    ??? 邏輯型用來(lái)定義保存邏輯值的變量。邏輯型也稱為布爾型。邏輯值只有真(true)和假(false)兩個(gè)值。
    ??? 所有邏輯運(yùn)算(如a<b)的運(yùn)算結(jié)果值都是邏輯值,如當(dāng)a = 4,b = 6時(shí),邏輯運(yùn)算a<b的結(jié)果值就是true。
    ??? 邏輯型數(shù)值主要用在流程控制語(yǔ)句中的條件表達(dá)式,如if、while、for等語(yǔ)句的條件表達(dá)式都是邏輯型數(shù)值。
    ?
    4.字符型
    ??? Java語(yǔ)言中,一個(gè)Unicode標(biāo)準(zhǔn)下的編碼稱作一個(gè)字符。Unicode標(biāo)準(zhǔn)用16位編碼表示一個(gè)字符。字符型用來(lái)表示字符型變量和字符型字面值。
    ??? Java語(yǔ)言中,字符型字面值用一對(duì)單引號(hào)括起來(lái),如'a'、'A'、'#'等都是字符型字面值。由于一些控制字符不能在屏幕上直接顯示,以及字符串中特殊符號(hào)的表示等問(wèn)題,需要有特殊方法表示這些符號(hào)。不能直接顯示的控制字符字面值、或字符串中特殊符號(hào)表示使用轉(zhuǎn)義字符的表示方法。
    ??? 轉(zhuǎn)義字符類型
    ??? 轉(zhuǎn)義字符 ? 含義
    ??? \n ??????? 換行,將光標(biāo)移至下一行的開始
    ??? \t ??????? 水平制表,將光標(biāo)移至下個(gè)制表符位置
    ??? \r ??????? 回車,將光標(biāo)移至當(dāng)前行的開始
    ??? \\ ??????? 反斜杠,輸出一個(gè)反斜杠
    ??? \’ ?????? 單引號(hào),輸出一個(gè)單引號(hào)
    ??? \” ?????? 雙引號(hào),輸出一個(gè)雙引號(hào)

    ??? 如系統(tǒng)標(biāo)準(zhǔn)輸出語(yǔ)句System.out.print()表示輸出字符串后不換行,下面的輸出語(yǔ)句:
    ??? System.out.print("Hello!\n");表示輸出字符串"Hello!"后換行。
    ?
    ?
    4、賦值語(yǔ)句

    ??? 賦值語(yǔ)句的語(yǔ)法形式是:
    ??? <變量> = <表達(dá)式>;
    ??? 賦值語(yǔ)句中,等號(hào)(稱作賦值號(hào))是賦值語(yǔ)句的標(biāo)識(shí),<表達(dá)式>可以是一個(gè)常量,或另一個(gè)已賦過(guò)值的變量,或是由運(yùn)算符組成的一個(gè)表達(dá)式。是把一個(gè)常量或另一個(gè)已賦過(guò)值的變量中的數(shù)值賦給另一個(gè)變量。當(dāng)一個(gè)變量被用賦值語(yǔ)句重新賦值時(shí),該變量原先的賦值就被沖掉了,即該變量原先的賦值就沒(méi)有了。
    ??? Java語(yǔ)言是一種強(qiáng)類型語(yǔ)言,所謂強(qiáng)類型語(yǔ)言是指數(shù)據(jù)類型的匹配要求十分嚴(yán)格。如果一個(gè)表達(dá)式的數(shù)據(jù)類型不一致等問(wèn)題出現(xiàn),則編譯器給出類型不一致的出錯(cuò)信息。關(guān)于賦值語(yǔ)句的類型匹配有以下兩種情況:
    ??? (1)類型相同。類型相同是指賦值號(hào)左端的數(shù)據(jù)類型和賦值號(hào)右端的數(shù)據(jù)類型完全一致。此種情況可以正確賦值。例如:
    ???????? int smallValue =100;?? //類型相同
    ???????? long bigValue ? = 100L;?? //類型相同
    ??? (2)類型兼容。類型兼容是指賦值號(hào)左端的數(shù)據(jù)類型比賦值號(hào)右端的數(shù)據(jù)類型長(zhǎng)。此時(shí)系統(tǒng)會(huì)自動(dòng)將賦值號(hào)右端的數(shù)據(jù)類型轉(zhuǎn)化成和賦值號(hào)左端一樣的數(shù)據(jù)類型。這里所說(shuō)的數(shù)據(jù)類型長(zhǎng),是指數(shù)據(jù)類型的位數(shù)長(zhǎng),如long類型就比int類型的位數(shù)長(zhǎng)。例如:
    ???????? long bigval = 100;?? //100是int類型,將自動(dòng)轉(zhuǎn)化為100L
    ???????? double x = 12.345F;?? //12.345F是float類型,將自動(dòng)轉(zhuǎn)化為12.345
    ??? (3)類型不兼容若賦值號(hào)右端的數(shù)據(jù)類型比賦值號(hào)左端的數(shù)據(jù)類型長(zhǎng)則類型不兼容。此時(shí)系統(tǒng)在編譯時(shí)會(huì)產(chǎn)生“可能存在精度損失”的編譯錯(cuò)誤。例如:
    ???????? int smallValuel = 100L;? // 100L 是long類型,不兼容
    ???????? float x = 12.345;???? ?? //12.345是double類型,不兼容
    ??? 當(dāng)出現(xiàn)類型不兼容錯(cuò)誤時(shí),有兩種解決方法:
    ? 重新定義賦值號(hào)左端變量的數(shù)據(jù)類型,使之變成滿足要求的較長(zhǎng)的數(shù)據(jù)類型。
    ? 強(qiáng)制類型轉(zhuǎn)換方法把賦值號(hào)右端的數(shù)據(jù)類型轉(zhuǎn)換成和賦值號(hào)左端相同的數(shù)據(jù)類型。但要注意,強(qiáng)制類型轉(zhuǎn)換可能丟失數(shù)據(jù)或損失數(shù)據(jù)的精度。
    ??? 強(qiáng)制類型轉(zhuǎn)換的格式為:
    ??? (<目標(biāo)類型>)<表達(dá)式>
    ??? 例如:
    ??? int i;
    ??? long k = 100L;
    ??? i = (int) k;??? //把變量k中的數(shù)值強(qiáng)制轉(zhuǎn)換成int類型后賦給變量i

    ?
    5、運(yùn)算符和表達(dá)式

    ??? 在Java語(yǔ)言之前,C語(yǔ)言和C++語(yǔ)言是最為廣泛使用的高級(jí)程序設(shè)計(jì)語(yǔ)言,為了使Java語(yǔ)言能盡快被程序設(shè)計(jì)人員接受,Java語(yǔ)言設(shè)計(jì)者采用了把基本關(guān)鍵字和基本語(yǔ)句設(shè)計(jì)成和C/C++語(yǔ)言相同形式的方法。因此,對(duì)于已經(jīng)掌握C\C++語(yǔ)言的人來(lái)說(shuō),Java語(yǔ)言在基本關(guān)鍵字、運(yùn)算符、表達(dá)式、賦值語(yǔ)句、流程控制語(yǔ)句等方面,是和C/C++語(yǔ)言基本相同的。
    ??? Java的運(yùn)算符可分為4類:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符和位運(yùn)算符。
    ?
    1.算術(shù)運(yùn)算符
    ??? Java的算術(shù)運(yùn)算符分為一元運(yùn)算符和二元運(yùn)算符。一元運(yùn)算符只有一個(gè)操作數(shù);二元運(yùn)算符有兩個(gè)操作數(shù),運(yùn)算符位于兩個(gè)操作數(shù)之間。算術(shù)運(yùn)算符的操作數(shù)必須是數(shù)值類型。
    ??? (1)一元運(yùn)算符:
    ??? 一元運(yùn)算符有:正(+)、負(fù)(-)、加1(++)和減1(--)4個(gè)。
    ??? 加1、減1運(yùn)算符只允許用于數(shù)值類型的變量,不允許用于表達(dá)式中。加1、減1運(yùn)算符既可放在變量之前(如++i),也可放在變量之后(如i++),兩者的差別是:如果放在變量之前(如++i),則變量值先加1或減1,然后進(jìn)行其他相應(yīng)的操作(主要是賦值操作);如果放在變量之后(如i++),則先進(jìn)行其他相應(yīng)的操作,然后再進(jìn)行變量值加1或減1。
    ??? 例如:
    ??? int i=6,j,k,m,n;
    ??? j = +i;??? //取原值,即j=6
    ??? k = -i;??? //取負(fù)值,即k=-6
    ??? m = i++;??? //先m=i,再i=i+1,即m=6,i=7
    ??? m = ++i;??? //先i=i+1,再m=i,即i=7,m=7
    ??? n = j--;??? //先n=j,再j=j-1,即n=6,j=5
    ??? n = --j;??? //先j=j-1,再n=j,即j=5,n=5
    ??? 在書寫時(shí)還要注意的是:一元運(yùn)算符與其前后的操作數(shù)之間不允許有空格,否則編譯時(shí)會(huì)出錯(cuò)。
    ??? (2)二元運(yùn)算符
    ??? 二元運(yùn)算符有:加(+)、減(-)、乘(*)、除(/)、取余(%)。其中+、-、*、/完成加、減、乘、除四則運(yùn)算,%是求兩個(gè)操作數(shù)相除后的余數(shù)。
    ?
    ??? %求余操作舉例:
    ??? a % b = a - (a / b) * b
    ??? 取余運(yùn)算符既可用于兩個(gè)操作數(shù)都是整數(shù)的情況,也可用于兩個(gè)操作數(shù)都是浮點(diǎn)數(shù)(或一個(gè)操作數(shù)是浮點(diǎn)數(shù))的情況。當(dāng)兩個(gè)操作數(shù)都是浮點(diǎn)數(shù)時(shí),例如7.6 % 2.9時(shí),計(jì)算結(jié)果為:7.6 - 2 * 2.9 = 1.8。
    ??? 當(dāng)兩個(gè)操作數(shù)都是int類型數(shù)時(shí),a%b的計(jì)算公式為:
    ??? a % b = a - (int)(a / b) * b
    ??? 當(dāng)兩個(gè)操作數(shù)都是long類型(或其他整數(shù)類型)數(shù)時(shí),a%b的計(jì)算公式可以類推。

    ??? 當(dāng)參加二元運(yùn)算的兩個(gè)操作數(shù)的數(shù)據(jù)類型不同時(shí),所得結(jié)果的數(shù)據(jù)類型與精度較高(或位數(shù)更長(zhǎng))的那種數(shù)據(jù)類型一致。
    ?
    ??? 例如:
    ??? 7 / 3?? ? //整除,運(yùn)算結(jié)果為2
    ??? 7.0 / 3?? //除法,運(yùn)算結(jié)果為2.33333,即結(jié)果與精度較高的類型一致
    ??? 7 % 3?? ? //取余,運(yùn)算結(jié)果為1
    ??? 7.0 % 3?? //取余,運(yùn)算結(jié)果為1.0
    ??? -7 % 3?? //取余,運(yùn)算結(jié)果為-1,即運(yùn)算結(jié)果的符號(hào)與左操作數(shù)相同
    ??? 7 % -3?? //取余,運(yùn)算結(jié)果為1,即運(yùn)算結(jié)果的符號(hào)與左操作數(shù)相同

    2.關(guān)系運(yùn)算符
    ??? 關(guān)系運(yùn)算符用于比較兩個(gè)數(shù)值之間的大小,其運(yùn)算結(jié)果為一個(gè)邏輯類型的數(shù)值。關(guān)系運(yùn)算符有六個(gè):等于(==)、不等于(!=)、大于(>)、大于等于(>=)、小于(<)、小于等于(<=)。
    ?
    ??? 例如:
    ??? 9 <= 8?? ?? //運(yùn)算結(jié)果為false
    ??? 9.9 >= 8.8? //運(yùn)算結(jié)果為true
    ??? 'A' < 'a' ? //運(yùn)算結(jié)果為true,因字符'A'的Unicode編碼值小于字符'a'
    ??? 要說(shuō)明的是,對(duì)于大于等于(或小于等于)關(guān)系運(yùn)算符來(lái)說(shuō),只有大于和等于兩種關(guān)系運(yùn)算都不成立時(shí)其結(jié)果值才為false,只要有一種(大于或等于)關(guān)系運(yùn)算成立其結(jié)果值即為true。例如,對(duì)于9 <= 8,9既不小于8也不等于8,所以9 <= 8 的運(yùn)算結(jié)果為false。對(duì)于9 >= 9,因9等于9,所以9 >= 9的運(yùn)算結(jié)果為true。
    ?
    3.邏輯運(yùn)算符
    ??? 邏輯運(yùn)算符要求操作數(shù)的數(shù)據(jù)類型為邏輯型,其運(yùn)算結(jié)果也是邏輯型值。邏輯運(yùn)算符有:邏輯與(&&)、邏輯或(||)、邏輯非(!)、邏輯異或(^)、邏輯與(&)、邏輯或(|)。
    ??? 真值表是表示邏輯運(yùn)算功能的一種直觀方法,其具體方法是把邏輯運(yùn)算的所有可能值用表格形式全部羅列出來(lái)。Java語(yǔ)言邏輯運(yùn)算符的真值表如下:
    ??? 邏輯運(yùn)算符的真值表
    ??? A ???? B ???? A&&B ? A||B? !A ??? A^B ?? A&B ?? A|B
    ??? false false false false true ? false false false
    ??? true ? false false true false true ? false true
    ??? false true ? false true true ? true ? false true
    ??? true ? true ? true ? true false false true ? true

    ??? 前兩列是參與邏輯運(yùn)算的兩個(gè)邏輯變量,共有4種可能,所以表2.5共有4行。后6列分別是6個(gè)邏輯運(yùn)算符在邏輯變量A和邏輯變量B取不同數(shù)值時(shí)的運(yùn)算結(jié)果值。
    ??? 要說(shuō)明的是,兩種邏輯與(&&和&)的運(yùn)算規(guī)則基本相同,兩種邏輯或(||和|)的運(yùn)算規(guī)則也基本相同。其區(qū)別是:&和|運(yùn)算是把邏輯表達(dá)式全部計(jì)算完,而&&和||運(yùn)算具有短路計(jì)算功能。所謂短路計(jì)算,是指系統(tǒng)從左至右進(jìn)行邏輯表達(dá)式的計(jì)算,一旦出現(xiàn)計(jì)算結(jié)果已經(jīng)確定的情況,則計(jì)算過(guò)程即被終止。對(duì)于&&運(yùn)算來(lái)說(shuō),只要運(yùn)算符左端的值為false,則因無(wú)論運(yùn)算符右端的值為true或?yàn)閒alse,其最終結(jié)果都為false。所以,系統(tǒng)一旦判斷出&&運(yùn)算符左端的值為false,則系統(tǒng)將終止其后的計(jì)算過(guò)程;對(duì)于 || 運(yùn)算來(lái)說(shuō),只要運(yùn)算符左端的值為true,則因無(wú)論運(yùn)算符右端的值為true或?yàn)閒alse,其最終結(jié)果都為true。所以,系統(tǒng)一旦判斷出|| 運(yùn)算符左端的值為true,則系統(tǒng)將終止其后的計(jì)算過(guò)程。
    ?
    ??? 例如,有如下邏輯表達(dá)式:
    ??? (i>=1) && (i<=100)
    ??? 此時(shí),若i等于0,則系統(tǒng)判斷出i>=1的計(jì)算結(jié)果為false后,系統(tǒng)馬上得出該邏輯表達(dá)式的最終計(jì)算結(jié)果為false,因此,系統(tǒng)不繼續(xù)判斷i<=100的值。短路計(jì)算功能可以提高程序的運(yùn)行速度。
    ??? 作者建議讀者:在程序設(shè)計(jì)時(shí)使用&&和||運(yùn)算符,不使用&和|運(yùn)算符。

    ??? 用邏輯與(&&)、邏輯或(||)和邏輯非(!)可以組合出各種可能的邏輯表達(dá)式。邏輯表達(dá)式主要用在 if、while等語(yǔ)句的條件組合上。
    ??? 例如:
    ??? int i = 1;
    ??? while(i>=1) && (i<=100) i++;??? //循環(huán)過(guò)程
    ??? 上述程序段的循環(huán)過(guò)程將i++語(yǔ)句循環(huán)執(zhí)行100次。

    ?
    4.位運(yùn)算符
    ??? 位運(yùn)算是以二進(jìn)制位為單位進(jìn)行的運(yùn)算,其操作數(shù)和運(yùn)算結(jié)果都是整型值。
    ??? 位運(yùn)算符共有7個(gè),分別是:位與(&)、位或(|)、位非(~)、位異或(^)、右移(>>)、左移(<<)、0填充的右移(>>>)。
    ??? 位運(yùn)算的位與(&)、位或(|)、位非(~)、位異或(^)與邏輯運(yùn)算的相應(yīng)操作的真值表完全相同,其差別只是位運(yùn)算操作的操作數(shù)和運(yùn)算結(jié)果都是二進(jìn)制整數(shù),而邏輯運(yùn)算相應(yīng)操作的操作數(shù)和運(yùn)算結(jié)果都是邏輯值。
    ?
    ??? 位運(yùn)算示例
    ?? 運(yùn)算符 ?名稱 ? 示例 ?? 說(shuō)明
    ??? & ????? 位與 ?? x&y ??? 把x和y按位求與
    ??? | ????? 位或 ?? x|y ??? 把x和y按位求或
    ??? ~ ????? 位非 ?? ~x ???? 把x按位求非
    ??? ^ ????? 位異或 x^y ??? 把x和y按位求異或
    ??? >> ???? 右移 ?? x>>y ?? 把x的各位右移y位
    ??? << ???? 左移 ?? x<<y ?? 把x的各位左移y位
    ??? >>> ??? 右移 ?? x>>>y ? 把x的各位右移y位,左邊填0

    ??? 舉例說(shuō)明:
    ??? (1)有如下程序段:
    ??? int x = 64;?? //x等于二進(jìn)制數(shù)的01000000
    ??? int y = 70;?? //y等于二進(jìn)制數(shù)的01000110
    ??? int z = x&y?? //z等于二進(jìn)制數(shù)的01000000
    ??? 即運(yùn)算結(jié)果為z等于二進(jìn)制數(shù)01000000。位或、位非、位異或的運(yùn)算方法類同。
    ??? (2)右移是將一個(gè)二進(jìn)制數(shù)按指定移動(dòng)的位數(shù)向右移位,移掉的被丟棄,左邊移進(jìn)的部分或者補(bǔ)0(當(dāng)該數(shù)為正時(shí)),或者補(bǔ)1(當(dāng)該數(shù)為負(fù)時(shí))。這是因?yàn)檎麛?shù)在機(jī)器內(nèi)部采用補(bǔ)碼表示法,正數(shù)的符號(hào)位為0,負(fù)數(shù)的符號(hào)位為1。例如,對(duì)于如下程序段:
    ??? int x = 70;?? //x等于二進(jìn)制數(shù)的01000110
    ??? int y = 2;
    ??? int z = x>>y? //z等于二進(jìn)制數(shù)的00010001
    ??? 即運(yùn)算結(jié)果為z等于二進(jìn)制數(shù)00010001,即z等于十進(jìn)制數(shù)17。
    ??? 對(duì)于如下程序段:
    ??? int x = -70;? //x等于二進(jìn)制數(shù)的11000110
    ??? int y = 2;
    ??? int z = x>>y? //z等于二進(jìn)制數(shù)的11101110
    ??? 即運(yùn)算結(jié)果為z等于二進(jìn)制數(shù)11101110,即z等于十進(jìn)制數(shù)-18。要透徹理解右移和左移操作,讀者需要掌握整數(shù)機(jī)器數(shù)的補(bǔ)碼表示法。
    ??? (3)0填充的右移(>>>)是不論被移動(dòng)數(shù)是正數(shù)還是負(fù)數(shù),左邊移進(jìn)的部分一律補(bǔ)0。

    ?
    5.其他運(yùn)算符

    ??? (1)賦值運(yùn)算符與其他運(yùn)算符的簡(jiǎn)捷使用方式
    ??? 賦值運(yùn)算符可以與二元算術(shù)運(yùn)算符、邏輯運(yùn)算符和位運(yùn)算符組合成簡(jiǎn)捷運(yùn)算符,從而可以簡(jiǎn)化一些常用表達(dá)式的書寫。
    ??? 賦值運(yùn)算符與其他運(yùn)算符的簡(jiǎn)捷使用方式
    ?? 運(yùn)算符 用法 ? 等價(jià)于 ?? 說(shuō)明
    ??? += ??? s+=i ?? s=s+i ??? s,i是數(shù)值型
    ??? -= ??? s-=i ?? s=s-i ??? s,i是數(shù)值型
    ??? *= ??? s*=i ?? s=s*i ??? s,i是數(shù)值型
    ??? /= ??? s/=i ?? s=s/i ??? s,i是數(shù)值型
    ??? %= ??? s%=i ?? s=s%i ??? s,i是數(shù)值型
    ??? &= ??? a&=b ?? a=a&b ??? a,b是邏輯型或整型
    ??? |= ??? a|=b ?? a=a|b ??? a,b是邏輯型或整型
    ??? ^= ??? A^=b ?? a=a^b ??? a,b是邏輯型或整型
    ??? <<= ?? s<<=i ? s=s<<i ?? s,i是整型
    ??? >>= ?? s>>=i ? s=s>>i ?? s,i是整型
    ??? >>>= ? s>>>=i s=s>>>i ? s,i是整型

    ??? (2)方括號(hào)[]和圓括號(hào)()運(yùn)算符
    ??? 方括號(hào)[]是數(shù)組運(yùn)算符,方括號(hào)[]中的數(shù)值是數(shù)組的下標(biāo),整個(gè)表達(dá)式就代表數(shù)組中該下標(biāo)所在位置的元素值。
    ??? 圓括號(hào)()運(yùn)算符用于改變表達(dá)式中運(yùn)算符的優(yōu)先級(jí)。
    ?
    ??? (3)字符串加(+)運(yùn)算符
    ??? 當(dāng)操作數(shù)是字符串時(shí),加(+)運(yùn)算符用來(lái)合并兩個(gè)字符串;當(dāng)加(+)運(yùn)算符的一邊是字符串,另一邊是數(shù)值時(shí),機(jī)器將自動(dòng)將數(shù)值轉(zhuǎn)換為字符串,這種情況在輸出語(yǔ)句中很常見。如對(duì)于如下程序段:
    ??? int max = 100;
    ??? System.out.println("max = "+max);
    ??? 計(jì)算機(jī)屏幕的輸出結(jié)果為:max = 100,即此時(shí)是把變量max中的整數(shù)值100轉(zhuǎn)換成字符串100輸出的。
    ?
    ??? (4)條件運(yùn)算符(?:)
    ??? 條件運(yùn)算符(?:)的語(yǔ)法形式為:
    ??? <表達(dá)式1> ?<表達(dá)式2> : <表達(dá)式3>
    ??? 條件運(yùn)算符的運(yùn)算方法是:先計(jì)算<表達(dá)式1>的值,當(dāng)<表達(dá)式1>的值為true時(shí),則將<表達(dá)式2>的值作為整個(gè)表達(dá)式的值;當(dāng)<表達(dá)式1>的值為false時(shí),則將<表達(dá)式3>的值作為整個(gè)表達(dá)式的值。如:
    ??? int a=1,b=2,max;
    ??? max = a>b?a:b;?? //max等于2
    ?
    ??? (5)強(qiáng)制類型轉(zhuǎn)換符
    ???
    強(qiáng)制類型轉(zhuǎn)換符能將一個(gè)表達(dá)式的類型強(qiáng)制轉(zhuǎn)換為某一指定數(shù)據(jù)類型,其語(yǔ)法形式為:
    ??? (<類型>)<表達(dá)式>
    ?
    ??? (6)對(duì)象運(yùn)算符instanceof
    ??? 對(duì)象運(yùn)算符instanceof用來(lái)測(cè)試一個(gè)指定對(duì)象是否是指定類(或它的子類)的實(shí)例,若是則返回true,否則返回false。
    ?
    ??? (7)點(diǎn)運(yùn)算符
    ??? 點(diǎn)運(yùn)算符“.”的功能有兩個(gè):一是引用類中成員,二是指示包的層次等級(jí)。
    ?
    6.運(yùn)算符的優(yōu)先級(jí)
    ??? 以下按優(yōu)先級(jí)從高到低的次序列出Java語(yǔ)言中的所有運(yùn)算符,表中結(jié)合性一列中的“左?右”表示其運(yùn)算次序?yàn)閺淖笙蛴?,“?左”表示其運(yùn)算次序?yàn)閺挠蚁蜃蟆?br />
    ??? 優(yōu)先級(jí) 運(yùn)算符 ??????????????????????????????????????? 結(jié)合性
    ??? 1 ????? .? []? ()? ;? ,
    ??? 2 ????? ++? ――? +=? !? ~? +(一元)?-(一元)??? ????????????? 右?左
    ??? 3 ????? *? /? % ???????????????????????????????????????????? 左?右
    ??? 4 ????? +(二元)? -(二元)????????????????????????????????????? 左?右
    ??? 5 ????? <<? >>? >>> ???????????????????????????????????????? 左?右
    ??? 6 ????? <? >? <=? >=? instanceof ??????????????????????????? 左?右
    ??? 7 ????? = =? != ???????????????????????????????????????????? 左?右
    ??? 8 ????? & ?????????????????????????????????????????????????? 左?右
    ??? 9 ????? ^ ?????????????????????????????????????????????????? 左?右
    ??? 10 ???? | ?????????????????????????????????????????????????? 左?右
    ??? 11 ???? && ????????????????????????????????????????????????? 左?右
    ??? 12 ???? || ????????????????????????????????????????????????? 左?右
    ??? 13 ???? ?: ???????????????????????????????????????????????? 右?左
    ??? 14 ???? =? *=? /=? %=? +=? -=? <<=? >>=? >>>=? &=? ^=? |= ? 右?左

    ?
    7.表達(dá)式
    ??? 用運(yùn)算符和圓括號(hào)把運(yùn)算對(duì)象連接起來(lái)的、符合Java語(yǔ)言語(yǔ)法規(guī)則的式子稱作表達(dá)式。運(yùn)算符是算術(shù)運(yùn)算符的表達(dá)式稱作算術(shù)表達(dá)式,運(yùn)算符是關(guān)系運(yùn)算符的表達(dá)式稱作關(guān)系表達(dá)式,運(yùn)算符是邏輯運(yùn)算符的表達(dá)式稱作邏輯表達(dá)式,運(yùn)算符是位運(yùn)算符的表達(dá)式稱作位表達(dá)式。算術(shù)表達(dá)式中的運(yùn)算對(duì)象必須是數(shù)值量,關(guān)系表達(dá)式中的運(yùn)算對(duì)象必須是數(shù)值量,邏輯表達(dá)式中的運(yùn)算對(duì)象必須是邏輯量,位表達(dá)式中的運(yùn)算對(duì)象必須是整數(shù)數(shù)值量。
    ??? 運(yùn)算符都有優(yōu)先級(jí),表達(dá)式按照運(yùn)算符的優(yōu)先級(jí)進(jìn)行逐個(gè)計(jì)算,最后求得整個(gè)表達(dá)式的值。運(yùn)算符中圓括號(hào)的優(yōu)先級(jí)最高,圓括號(hào)還可以多層嵌套。在同一級(jí)括號(hào)內(nèi)(或一個(gè)括號(hào)也沒(méi)有時(shí)),表達(dá)式按照運(yùn)算符優(yōu)先級(jí)高的先運(yùn)算、同一運(yùn)算符優(yōu)先級(jí)的按照運(yùn)算符的結(jié)合性(即從左向右還是從右向左)的次序進(jìn)行運(yùn)算。大多數(shù)運(yùn)算符的結(jié)合性是從左向右,少數(shù)運(yùn)算符的結(jié)合性(如賦值、條件運(yùn)算等)是從右向左。
    由于運(yùn)算對(duì)象是有數(shù)據(jù)類型的,所以最終得到的計(jì)算結(jié)果也是有數(shù)據(jù)類型的,表達(dá)式結(jié)果的數(shù)據(jù)類型不一定和運(yùn)算對(duì)象相同,它還取決于表達(dá)式的運(yùn)算符。如:
    ??? int i=5;
    ??? (i<0)&(i>100)? ? //結(jié)果為boolean型
    ??? (i-2)*8+5? ?? ?? //結(jié)果為int型
    ??? "Abcde"+"12345"? //結(jié)果為String型

    ??? Java表達(dá)式既可以單獨(dú)組成語(yǔ)句,也可出現(xiàn)在循環(huán)語(yǔ)句、條件語(yǔ)句的條件部分,還可以出現(xiàn)在函數(shù)的實(shí)際參數(shù)調(diào)用等場(chǎng)合。
    ??? 實(shí)際上,從表達(dá)式的角度看,整個(gè)賦值語(yǔ)句是一個(gè)表達(dá)式,其運(yùn)算方法是先計(jì)算出賦值運(yùn)算符右邊的表達(dá)式的值(因賦值運(yùn)算符的優(yōu)先級(jí)最低),然后把該值賦給賦值運(yùn)算符左邊的變量(因賦值運(yùn)算符的結(jié)合性是先右后左)。
    ??? 最后,我們給出一個(gè)例子,用來(lái)說(shuō)明上面討論過(guò)的Java語(yǔ)言基本要素。
    ?
    【例2.2】求4x2 + 5x + 1 = 0方程的根。已知b2 – 4ac > 0。
    public class Exam2_2
    {
    ??? public static void main(String args[])
    ??? {
    ??????? double a = 4, b = 5, c = 1, disc, x1, x2, p, q;
    ??????? disc = b * b - 4 * a * c;
    ??????? p = - b / (2 * a);
    ??????? q = Math.sqrt(disc) / (2 * a);
    ??????? x1 = p + q;
    ??????? x2 = p - q;
    ??????? System.out.println("x1 = " + x1 + "????? x2 = " + x2);
    ??? }
    }
    其中,表達(dá)式Math.sqrt()為調(diào)用Math類的sqrt()方法,該表達(dá)式完成某個(gè)數(shù)的開平方。此例還說(shuō)明,表達(dá)式還可以是某個(gè)類的方法調(diào)用(當(dāng)然,數(shù)據(jù)類型要符合要求)。
    程序運(yùn)行結(jié)果為:
    x1 = -0.25????? x2 = -1.0
    ?

    6、流程控制語(yǔ)句

    ??? 流程控制語(yǔ)句用來(lái)控制程序的執(zhí)行流程。流程控制語(yǔ)句有條件選擇語(yǔ)句、循環(huán)語(yǔ)句和轉(zhuǎn)移語(yǔ)句三種。
    ??? 任何程序的結(jié)構(gòu)都是由三種基本的結(jié)構(gòu)組成的。這三種基本結(jié)構(gòu)是:順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。在Java程序中,通常一個(gè)以分號(hào)(;)結(jié)束的符號(hào)串稱為一條語(yǔ)句。在順序結(jié)構(gòu)的程序或程序段中,程序是按語(yǔ)句次序、下一條語(yǔ)句接上一條語(yǔ)句順序被執(zhí)行的。
    ??? 在分支結(jié)構(gòu)或循環(huán)結(jié)構(gòu)的程序或程序段中,程序不是按語(yǔ)句次序順序執(zhí)行的,而是按分支結(jié)構(gòu)語(yǔ)句或循環(huán)結(jié)構(gòu)語(yǔ)句所規(guī)定的執(zhí)行流程來(lái)執(zhí)行的。為了滿足實(shí)際應(yīng)用問(wèn)題的設(shè)計(jì)需要,分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)有各種各樣的變形。另外,實(shí)際的程序設(shè)計(jì)中,經(jīng)常需要轉(zhuǎn)移語(yǔ)句與分支語(yǔ)句或循環(huán)語(yǔ)句結(jié)合使用。
    ??? Java語(yǔ)言的流程控制語(yǔ)句有:
    ? 分支語(yǔ)句:if,switch
    ? 循環(huán)語(yǔ)句:for ,while,do-while
    ? 轉(zhuǎn)移語(yǔ)句:break,continue

    ??? 另外,函數(shù)或類的成員函數(shù)在運(yùn)行結(jié)束后,需要返回原調(diào)用處,并可能需要帶回函數(shù)或成員函數(shù)的返回值,這種流程控制用return語(yǔ)句來(lái)實(shí)現(xiàn)。
    ?
    1、分支語(yǔ)句

    ??? 分支結(jié)構(gòu)是指程序按照當(dāng)前的分支條件控制程序流程的執(zhí)行。
    ??? 有:if語(yǔ)句和switch語(yǔ)句
    ??? if語(yǔ)句實(shí)現(xiàn)二路分支,switch語(yǔ)句實(shí)現(xiàn)多路分支。
    ?
    1.if語(yǔ)句
    ???
    (1)基本的if 語(yǔ)句
    ??? if 語(yǔ)句的語(yǔ)法形式為:
    ??? if? (<邏輯表達(dá)式>)
    ??? <語(yǔ)句組1>;
    ??? [else <語(yǔ)句組2>;]

    ??? 其中,邏輯表達(dá)式的計(jì)算值是一個(gè)只可能是true或false的邏輯值。if語(yǔ)句的含義是:當(dāng)<邏輯表達(dá)式>的值為true時(shí),執(zhí)行if 后面的<語(yǔ)句組1>;當(dāng)<邏輯表達(dá)式>的值為false時(shí),執(zhí)行else后面的<語(yǔ)句組2>。當(dāng)執(zhí)行的語(yǔ)句組中的語(yǔ)句多于一條時(shí),語(yǔ)句組必須用一對(duì)花括號(hào)“{}”括起來(lái)。在Java語(yǔ)言的語(yǔ)法中,一對(duì)方括號(hào)“[]”括起來(lái)的部分,表示該部分(除數(shù)組定義外)是任選的。因此,else語(yǔ)句是任選的,當(dāng)沒(méi)有else語(yǔ)句時(shí),若<邏輯表達(dá)式>的值為false時(shí)就執(zhí)行if 語(yǔ)句后邊的語(yǔ)句。
    ?
    【例2.3】找出a、b兩個(gè)數(shù)中的較大者并輸出。
    方法一:用if-else結(jié)構(gòu)實(shí)現(xiàn)。
    public class Exam2_3
    {
    ??? public static void main(String args[])
    ??? {
    ??????? int a = 5, b = 6, max;
    ??????? if( a > b )
    ??????? {
    ??????????? max = a;
    ??????????? System.out.println("max = " + max);
    ??????? }
    ??????? else
    ??????? {
    ??????????? max = b;
    ??????????? System.out.println("max = " + max);
    ??????? }
    ??? }
    }
    ?
    方法二:用沒(méi)有else的if結(jié)構(gòu)實(shí)現(xiàn)。
    public class Exam2_3_2
    {
    ??? public static void main(String args[])
    ??? {
    ??????? int a = 5, b = 6, max;
    ??????? max = a;
    ??????? if( b > a )
    ??????????? max = b;
    ??????? System.out.println("max = " + max);
    ??? }
    }

    例2.3中if語(yǔ)句的邏輯表達(dá)式中只有一個(gè)條件。當(dāng)問(wèn)題復(fù)雜時(shí),if語(yǔ)句的邏輯表達(dá)式中的條件可能多于一個(gè),這稱為復(fù)合條件。
    復(fù)合條件需要用邏輯運(yùn)算符——邏輯與(&&)、邏輯或(||)、邏輯非(!)、邏輯異或(^)等邏輯運(yùn)算符來(lái)組合條件。
    例如下面的if語(yǔ)句條件為,判斷n是否為一個(gè)1至100區(qū)間的數(shù):
    if (n >= 1 && n <= 100)
    如果n既大于等于1又小于等于100,則條件為true,否則條件為false。
    ?
    (2)if語(yǔ)句嵌套
    ??? 如果if語(yǔ)句中又包括另一個(gè)if語(yǔ)句,則稱為if語(yǔ)句嵌套。
    ??? if (n >= 1)
    ??? {
    ????? if (n <= 100) ……
    ??? }
    ??? else ……

    ??? 在兩個(gè)嵌套的if語(yǔ)句中,如果有一個(gè)if語(yǔ)句省略了else語(yǔ)句,會(huì)產(chǎn)生二義性。如:
    ??? if (n >= 1)
    ??? if (n <= 100) ……
    ??? else ……
    ??? 此時(shí),else是和哪個(gè)if語(yǔ)句匹配容易產(chǎn)生混淆。Java語(yǔ)言規(guī)定:else總是與最近的一個(gè)if語(yǔ)句匹配。
    ??? 所以此處else應(yīng)理解為是與第二個(gè)if語(yǔ)句匹配(注意:書寫的縮進(jìn)格式與匹配無(wú)關(guān))。如果要求else是與第一個(gè)if語(yǔ)句匹配,則程序應(yīng)寫為:
    ??? 一個(gè)if語(yǔ)句可以有兩個(gè)分支,利用if語(yǔ)句嵌套可以組合出多于兩個(gè)的分支。

    【例2.4】找出三個(gè)整數(shù)中的最大數(shù)并輸出。
    方法一:用if語(yǔ)句嵌套方法。
    public class Exam2_4
    {
    ??? public static void main(String args[])
    ??? {
    ??????? int a = 3, b = 1, c = 2, max;
    ?
    ??????? if(a < b)
    ??????????? if (b < c)
    ??????????????? max = c;
    ??????????? else
    ??????????????? max = b;
    ??????? else
    ??????????? if (a < c)
    ??????????????? max = c;
    ??????????? else
    ??????????????? max = a;
    ??????? System.out.println("max = " + max);
    ??? }
    }
    程序運(yùn)行結(jié)果:
    max = 3

    方法二:用條件的邏輯組合方法。
    public class Exam2_4_2
    {
    ??? public static void main(String args[])
    ??? {
    ??????? int a = 3, b = 1, c = 2, max;
    ?
    ??????? if(a < b && b < c)
    ??????????? max = c;
    ??????? else if(a < b && c < b)
    ??????????? max = b;
    ??????? else if (a > b && a < c)
    ??????????? max = c;
    ??????? else?????????????????????? //即(a > b && a > c)
    ??????????? max = a;
    ??????? System.out.println("max = " + max);
    ??? }
    }
    說(shuō)明:條件兩兩組合,所以條件的邏輯組合共有四種情況。此問(wèn)題可不考慮兩個(gè)數(shù)相等的情況。
    ?

    2.switch語(yǔ)句
    ??? switch語(yǔ)句是多個(gè)分支的流程控制語(yǔ)句
    ??? 語(yǔ)法形式為:
    ??? switch (<表達(dá)式>)
    ??? {
    ??? case<常量1>:<語(yǔ)句組1>;
    ??? ??? [break;]
    ??? case<常量2>:<語(yǔ)句組2>;
    ??? ??? [break;]
    ??? ……;
    ??? [default;<語(yǔ)句組>]
    ??? }

    ??? 其中switch、case 、default是關(guān)鍵字,default語(yǔ)句是任選的。
    ??? switch語(yǔ)句的語(yǔ)義是:將<表達(dá)式>的值按照從上至下的順序與case語(yǔ)句中給出的常量值進(jìn)行比較,當(dāng)表達(dá)式的值與某個(gè)case語(yǔ)句中的常量值相等時(shí),就執(zhí)行相應(yīng)case后的語(yǔ)句序列;若沒(méi)有一個(gè)常量值與表達(dá)式的值相等,則執(zhí)行default語(yǔ)句。如果沒(méi)有default語(yǔ)句,并且表達(dá)式與所有case的常量都不相等時(shí),則不做任何操作。
    ??? switch表達(dá)式和case常量值的類型可以是byte、short、int、long和char,但不能為boolean,并且要求兩者的數(shù)據(jù)類型必須一致。
    ?
    3.switch語(yǔ)句中的break語(yǔ)句
    ??? switch語(yǔ)句本身并不能保證執(zhí)行完一組case后的語(yǔ)句或語(yǔ)句組后,跳過(guò)隨后的case判斷,通常情況下,此時(shí)需要用break語(yǔ)句來(lái)跳過(guò)隨后的case語(yǔ)句。
    ??? break語(yǔ)句的語(yǔ)法形式是:
    ??? break;
    ??? switch語(yǔ)句中的break語(yǔ)句的語(yǔ)義是:跳過(guò)break語(yǔ)句所在位置隨后所有的case語(yǔ)句,即結(jié)束switch語(yǔ)句的執(zhí)行。

    【例2.5】?? 把數(shù)值表示的星期轉(zhuǎn)換成相應(yīng)的英文表示并顯示。
    public class Exam2_5
    {
    ??? public static void main(String args[])
    ??? {
    ??????? int week = 5;
    ??????? System.out.print("week = " + week + "?? ");
    ??????? switch (week)
    ??????? {
    ??????????? case 0: System.out.println("Sunday");?? break;
    ??????????? case 1: System.out.println("Monday");?? break;
    ??????????? case 2: System.out.println("Tuesday");? break;
    ??????????? case 3: System.out.println("Wednesday");break;
    ??????????? case 4: System.out.println("Thursday"); break;
    ??????????? case 5: System.out.println("Friday");?? break;
    ??????????? case 6: System.out.println("Saturday"); break;
    ??????????? default: System.out.println("Data Error!");
    ??????? }
    ??? }
    }
    程序運(yùn)行結(jié)果:
    week = 5?? Friday

    ?
    2、循環(huán)語(yǔ)句

    ??? 循環(huán)結(jié)構(gòu)是指程序按照當(dāng)前的循環(huán)條件控制程序流程的執(zhí)行。Java語(yǔ)言有三種循環(huán)結(jié)構(gòu)的語(yǔ)句:for語(yǔ)句、while語(yǔ)句和do-while語(yǔ)句。這三種循環(huán)語(yǔ)句雖然控制循環(huán)的方式不同,但實(shí)現(xiàn)循環(huán)的功能相同。換句話說(shuō),對(duì)于任何一個(gè)循環(huán)問(wèn)題,這三種循環(huán)語(yǔ)句都可以實(shí)現(xiàn)。但是,不同的循環(huán)問(wèn)題,使用這三種循環(huán)語(yǔ)句的簡(jiǎn)便程度不同。因此,一個(gè)好的程序設(shè)計(jì)者,應(yīng)該學(xué)會(huì)針對(duì)不同的循環(huán)問(wèn)題,選擇最簡(jiǎn)便的循環(huán)語(yǔ)句。
    ?
    1.for語(yǔ)句
    ??? for語(yǔ)句的語(yǔ)法形式為:
    ??? for ([<表達(dá)式1>];[<表達(dá)式2>];[<表達(dá)式3>])
    ??? <循環(huán)體>;

    ??? for語(yǔ)句的語(yǔ)義是:首先計(jì)算<表達(dá)式1>的值,然后計(jì)算<表達(dá)式2>的值,如果<表達(dá)式2>值為true時(shí),執(zhí)行一次<循環(huán)體>,再計(jì)算<表達(dá)式3>的值,并進(jìn)行下一次循環(huán)過(guò)程;當(dāng)<表達(dá)式2>的值為false時(shí),循環(huán)過(guò)程結(jié)束。
    ??? 在for語(yǔ)句中,<表達(dá)式1>是給循環(huán)變量賦初值,因此,<表達(dá)式1>通常是一個(gè)賦值表達(dá)式;<表達(dá)式2>是給出循環(huán)結(jié)束條件,因此,<表達(dá)式2>必須是一個(gè)關(guān)系表達(dá)式或邏輯表達(dá)式;<表達(dá)式3>是改變循環(huán)變量,因此,<表達(dá)式3>必須是一個(gè)賦值表達(dá)式(或類似i++形式的改變變量i的數(shù)值的語(yǔ)句);<循環(huán)體>可以是一條語(yǔ)句,也可以是多條語(yǔ)句,當(dāng)為多條語(yǔ)句時(shí),必須用一對(duì)花括號(hào)“{}”括起來(lái)。
    ??? 說(shuō)明:無(wú)論是<表達(dá)式1>還是<表達(dá)式2>或者是<表達(dá)式3>,都可以任選。
    ?
    【例2.6】?? 求1到10的累加和。
    for語(yǔ)句最適合于循環(huán)次數(shù)已知的循環(huán)結(jié)構(gòu)。此問(wèn)題的循環(huán)次數(shù)已知,因此,此問(wèn)題適合于用for語(yǔ)句實(shí)現(xiàn)。
    public class Exam2_6
    {
    ??? public static void main(String args[])
    ??? {
    ??????? int i, n = 10, sum = 0;
    ???????
    ??????? for(i = 1; i <= n; i++)
    ??????????? sum = sum + i;
    ??????? System.out.println("Sum = " + sum);
    ??? }
    }
    程序運(yùn)行結(jié)果為:
    Sum = 55
    上述for語(yǔ)句循環(huán)過(guò)程也可以設(shè)計(jì)成遞減形式的,此時(shí)的for語(yǔ)句為:
    for(i = n; i >= 1; i--)
    sum = sum + i;

    2.while語(yǔ)句
    ??? while語(yǔ)句的語(yǔ)法形式為:
    ?? while (<邏輯表達(dá)式>)
    ??? <循環(huán)體>;

    ??? while語(yǔ)句的語(yǔ)義是:如果<邏輯表達(dá)式>的計(jì)算結(jié)果為true時(shí),則執(zhí)行循環(huán)體;如果<邏輯表達(dá)式>的計(jì)算結(jié)果為false時(shí),則結(jié)束while語(yǔ)句的執(zhí)行。同樣,當(dāng)<循環(huán)體>中的語(yǔ)句多于一條時(shí),需要用一對(duì)花括號(hào)“{}”括起來(lái)。
    ??? 例如用while語(yǔ)句實(shí)現(xiàn)求1到10累加和的程序段如下:
    ??? int i = 1,n = 10,sum = 0;
    ??? while (i <= n)
    ??? {
    ??? ??? sum = sum + i;
    ??? ??? i++;
    ??? }

    ??? 和for語(yǔ)句相比,while語(yǔ)句循環(huán)中的循環(huán)變量賦初值(i = 1)、循環(huán)過(guò)程結(jié)束判斷(i <= n)和循環(huán)變量修改(i++)三個(gè)部分都有,只是放在了不同的地方。
    ??? 在while語(yǔ)句的循環(huán)結(jié)構(gòu)中,初學(xué)者最容易犯的一個(gè)錯(cuò)誤是,忘記在循環(huán)體中修改循環(huán)變量的值,此時(shí)循環(huán)過(guò)程將永不結(jié)束,俗稱為“死循環(huán)”。如上面的程序段中如果沒(méi)有i++語(yǔ)句,則循環(huán)過(guò)程將永不結(jié)束。
    ??? 死循環(huán)的另一種情況是,循環(huán)結(jié)束條件永遠(yuǎn)無(wú)法滿足。例如:
    ??? int i = 1,n = 10,sum = 0;
    ??? while (i >= 0)
    ??? {
    ???? ?? sum = sum + i;
    ???? ?? i++;
    ??? }

    ??? 上述程序段的循環(huán)體中雖然有i++語(yǔ)句改變循環(huán)變量i的值,但i值的變化永遠(yuǎn)都滿足i >= 0,即循環(huán)結(jié)束條件永遠(yuǎn)不會(huì)滿足,因此造成死循環(huán)。
    ??? while語(yǔ)句適合于循環(huán)次數(shù)不確定的情況。如上所示,雖然while語(yǔ)句也可以用來(lái)構(gòu)造循環(huán)次數(shù)已知的循環(huán)過(guò)程,但是,很顯然,此種情況用for語(yǔ)句構(gòu)造循環(huán)過(guò)程更簡(jiǎn)單、更明了一些。
    ?
    【例2.7】求兩個(gè)不為0的正整數(shù)的最大公約數(shù)。
    對(duì)于求兩個(gè)不為0的正整數(shù)的最大公約數(shù)問(wèn)題,歐幾里德提出了輾轉(zhuǎn)相除算法,其算法思想是:
    (1)令m為兩個(gè)整數(shù)中的較大者,n為兩個(gè)整數(shù)中的較小者;
    (2)用m除以n,令r為m除以n的余數(shù);
    (3)若r不等于0,則令m等于n,n等于r,返回步驟(2)繼續(xù);若r等于0,則n中的數(shù)值就是兩個(gè)整數(shù)的最大公約數(shù)。
    從上述算法思想可知,該算法是一個(gè)循環(huán)過(guò)程,并且該循環(huán)過(guò)程的循環(huán)次數(shù)事先無(wú)法知道,因此,該問(wèn)題適合于用while語(yǔ)句構(gòu)造循環(huán)過(guò)程。
    public class Exam2_7
    {
    public static void main(String args[])
    {
    int m = 48, n = 32, r = 0, temp;
    ???????
    ???????? if(m <= 0 || n <= 0)
    ???????? {
    ?????????? System.out.println("數(shù)據(jù)錯(cuò)誤!");
    ???????????? return;
    ???????? }
    ???????
    ???????? if(m < n)?????????????????????? //保證m >= n
    {
    ?????? temp = m;
    ?????? m = n;
    ?????? n = temp;
    ? }
    ?
    ? r = m % n;?????????????????????? //循環(huán)初始化
    ? while(r != 0)?????????????? //循環(huán)條件判斷
    ? {
    ?????? m = n;
    ?????? n = r;
    ?????? r = m % n;???????????? //循環(huán)變量修改
    ? }
    ?
    ???????? System.out.print("最大公約數(shù) = " + n);
    ???? }
    }
    程序運(yùn)行結(jié)果:
    最大公約數(shù) = 16
    當(dāng)然,上面程序中的循環(huán)過(guò)程也可以用for語(yǔ)句構(gòu)造,用for語(yǔ)句構(gòu)造循環(huán)過(guò)程相應(yīng)的程序段如下:
    for(r = m % n; r != 0; r = m % n)???? //for循環(huán)???
    {
    ??? m = n;
    ??? n = r;???
    }

    for語(yǔ)句的循環(huán)過(guò)程中,也必須有循環(huán)初始化(r = m % n)、循環(huán)條件判斷(r != 0)和循環(huán)變量修改(r = m % n),只是處于不同的位置而已。顯然,在循環(huán)次數(shù)不知時(shí),用for語(yǔ)句構(gòu)造的循環(huán)過(guò)程不及用while語(yǔ)句構(gòu)造的循環(huán)過(guò)程清晰。
    ?
    3.do-while語(yǔ)句
    ??? do-while語(yǔ)句的語(yǔ)法形式為:
    ??? do
    ??? {
    ??? ??? <語(yǔ)句組>;
    ??? }? while (<邏輯表達(dá)式>) ;

    ??? do-while語(yǔ)句的語(yǔ)義是:首先執(zhí)行語(yǔ)句組(或稱循環(huán)體),然后計(jì)算<邏輯表達(dá)式>的值,當(dāng)<邏輯表達(dá)式>的值為true時(shí),執(zhí)行一次循環(huán)體;當(dāng)<邏輯表達(dá)式>的值為false時(shí),結(jié)束循環(huán)。
    ??? 從語(yǔ)義看,do-while語(yǔ)句和while語(yǔ)句的惟一差別是:do-while語(yǔ)句至少執(zhí)行一次循環(huán)體(因其結(jié)束條件判斷在后面進(jìn)行);而對(duì)于while語(yǔ)句來(lái)說(shuō),當(dāng)一開始循環(huán)條件就不滿足時(shí),循環(huán)體將一次也不執(zhí)行。
    ??? 例2.7求最大公約數(shù)程序的循環(huán)部分也可以用do-while語(yǔ)句構(gòu)造。用do-while語(yǔ)句的相應(yīng)程序段如下:
    ??? r = m % n;????????????? //循環(huán)初始化
    ??? if(r != 0)????????????? //判斷初始時(shí)r是否為0
    ??? ??? do??
    ??? ??? {
    ??? ??????? m = n;
    ??? ??????? n = r;
    ??? ??????? r = m % n;????? //循環(huán)變量修改???????
    ??? } while(r != 0);????? ? //循環(huán)結(jié)束條件判斷

    ??? 由于語(yǔ)句r = m % n的計(jì)算結(jié)果可能使r等于0,而do語(yǔ)句在第一次執(zhí)行循環(huán)體時(shí),并不做任何判斷,這將可能造成因r等于0使n等于0,因n等于0使語(yǔ)句r = m % n的運(yùn)算出現(xiàn)除數(shù)等于0的錯(cuò)誤,因此要在do語(yǔ)句之前判斷r是否等于0。只有在r不等于0時(shí)才執(zhí)行do語(yǔ)句;在r等于0時(shí)最大公約數(shù)已經(jīng)得到。
    顯然,對(duì)于求最大公約數(shù)問(wèn)題,用while語(yǔ)句比用do-while語(yǔ)句簡(jiǎn)單一些。但在有些情況下,用do-while語(yǔ)句構(gòu)造循環(huán)過(guò)程比用while語(yǔ)句簡(jiǎn)單一些。

    4.多重循環(huán)
    ??? 如果循環(huán)語(yǔ)句的循環(huán)體內(nèi)又有循環(huán)語(yǔ)句,則構(gòu)成多重循環(huán)結(jié)構(gòu)。多重循環(huán)結(jié)構(gòu)中的循環(huán)語(yǔ)句,可以是前面討論過(guò)的for語(yǔ)句、while語(yǔ)句或do-while語(yǔ)句中的任何一種。
    【例2.8】輸出九九乘法表。
    程序如下:
    public class Exam2_8
    {
    ??? public static void main(String args[])
    ??? {
    ??????? int i,j,n = 9;
    ??????? for(i = 1; i <= n; i++)???????????????? //外層循環(huán)
    ??????? {
    ??????????? for(j = 1; j <= i; j++)???????????? //內(nèi)層循環(huán)
    ??????????????? System.out.print("? " + i*j);?? //輸出
    ??????????? System.out.println();?????????????? //每行結(jié)束時(shí)換行
    ??????? }
    ??? }
    }
    說(shuō)明:這個(gè)問(wèn)題中,兩重循環(huán)的循環(huán)次數(shù)都已知,因此兩重循環(huán)都用for語(yǔ)句構(gòu)造循環(huán)過(guò)程。外層for語(yǔ)句的循環(huán)變量是i,控制總共打印多少行,內(nèi)層for語(yǔ)句的循環(huán)變量是j,控制每行顯示多少列。
    程序運(yùn)行結(jié)果為:
    1
    2? 4
    3? 6? 9
    4? 8? 12? 16
    5? 10? 15? 20? 25
    6? 12? 18? 24? 30? 36
    7? 14? 21? 28? 35? 42? 49
    8? 16? 24? 32? 40? 48? 56? 64
    9? 18? 27? 36? 45? 54? 63? 72? 81
    當(dāng)應(yīng)用問(wèn)題復(fù)雜時(shí),程序一般需要有多重循環(huán)結(jié)構(gòu),此時(shí)最重要的是要把程序設(shè)計(jì)的思路梳理清楚,而其中的每一重循環(huán)結(jié)構(gòu)都可以按單重循環(huán)結(jié)構(gòu)設(shè)計(jì)。

    ?
    3、break語(yǔ)句和continue語(yǔ)句

    ??? break語(yǔ)句通常是和switch語(yǔ)句或循環(huán)語(yǔ)句配合使用,continue語(yǔ)句通常是和循環(huán)語(yǔ)句配合使用。
    ?
    1.break語(yǔ)句
    ??? break語(yǔ)句的語(yǔ)法形式是:
    ??? break;
    ??? 在上節(jié)討論switch語(yǔ)句時(shí),我們已結(jié)合介紹了switch語(yǔ)句中的break語(yǔ)句使用方法。這里我們主要介紹循環(huán)語(yǔ)句中的break語(yǔ)句使用方法。在循環(huán)語(yǔ)句中,break語(yǔ)句的功能是跳出循環(huán)體。特別需要說(shuō)明的是,當(dāng)break語(yǔ)句位于多重循環(huán)語(yǔ)句的內(nèi)層時(shí), break語(yǔ)句只能跳出它當(dāng)前所處的那層循環(huán)體。
    【例2.9】循環(huán)語(yǔ)句中break語(yǔ)句使用方法示例。
    public class Exam2_9
    {
    ??? public static void main(String args[])
    ??? {
    ???????? int i, j, k;
    ????????
    ???????? for(i = 1; i <= 6; i++)???? //第1層循環(huán)
    ???????? {
    ???????????? for(j = 1; j <= 6; j++)??? //第2層循環(huán)
    ???????????? {
    ??????????????? for(k = 1; k <= 6; k++)?? //第3層循環(huán)
    ??????????????? {
    ??????????????????? System.out.println("k = " + k + "???? ");
    ??????????????????? if(k == 2) break;?????????????? //跳出第3層循環(huán)
    ??????????????? }
    ??????????????? System.out.println("j = " + j + "???? ");
    ??????????????? if(j == 2) break;?????????????????? //跳出第2層循環(huán)
    ???????????? }
    ??????????? System.out.println("i = " + i + "???? ");
    ??????????? if(i == 2) break;??????????????????????? //跳出第1層循環(huán)
    ???????? }
    ??? }
    }

    由于break語(yǔ)句的作用,此程序的第3層的輸出語(yǔ)句(輸出k)只執(zhí)行了8次,第2層的輸出語(yǔ)句(輸出j)只執(zhí)行了4次,第1層的輸出語(yǔ)句(輸出i)只執(zhí)行了2次。

    2.continue語(yǔ)句
    ??? continue語(yǔ)句的語(yǔ)法形式為:
    ????
    continue;
    ??? continue語(yǔ)句主要用于循環(huán)語(yǔ)句中,continue語(yǔ)句的語(yǔ)義是:若循環(huán)體中遇到continue語(yǔ)句,則本次循環(huán)體的后續(xù)語(yǔ)句被忽略,回到循環(huán)條件判斷處,判斷是否執(zhí)行下一次循環(huán)體。換句話說(shuō),continue語(yǔ)句僅跳過(guò)當(dāng)前層循環(huán)體的剩余語(yǔ)句。
    【例2.10】continue語(yǔ)句使用方法示例。
    public class Exam2_10
    {
    ??? public static void main(String args[])
    ??? {
    ???????? int i, j;
    ????????
    ???????? for(i = 1; i <= 6; i++)
    ???????? {
    ???????????? for(j = 1; j <= 6; j++)
    ???????????? {
    ???????????????? if(j >= 3) continue;??? //continue語(yǔ)句
    ???????????????? System.out.println("j = " + j + "???? ");
    ???????????? }
    ???????? }
    ??? }
    }
    由于continue語(yǔ)句的作用,第2層的輸出語(yǔ)句只執(zhí)行了12次。

    ?
    4、return語(yǔ)句
    ?
    ??? return語(yǔ)句的語(yǔ)法形式為:
    ??? return? [<返回值>];
    ??? return語(yǔ)句的語(yǔ)義是:使函數(shù)返回原調(diào)用處,且?guī)Щ胤祷刂?。如果函?shù)為void類型,則return語(yǔ)句后沒(méi)有<返回值>;如果函數(shù)為非void類型,則return語(yǔ)句后需要有<返回值>,并且<返回值>的類型必須和函數(shù)的類型一致。
    ??? 當(dāng)return語(yǔ)句不帶<返回值>,并且位于函數(shù)的最后時(shí),return語(yǔ)句可以省略。
    ??? return語(yǔ)句的具體使用方法可參見隨后各章的程序設(shè)計(jì)舉例。
    ?
    ?
    7、程序注釋
    ??? Java語(yǔ)言允許在程序中添加注釋,以增加程序的可讀性。前面的例子中已經(jīng)多次使用了程序注釋。注釋主要是給人閱讀的,所以系統(tǒng)不會(huì)對(duì)注釋的內(nèi)容進(jìn)行編譯。
    ??? Java語(yǔ)言有三種形式的注釋:
    ??? 單行注釋?????? // 注釋內(nèi)容

    ??? 多行注釋?????? /* ……
    ?????????????????? 多行注釋內(nèi)容
    ?????????????????? ……*/

    ??? 文件注釋?????? /**……
    ?????????????????? 文件注釋內(nèi)容
    ?????????????????? */
    ?

    8、數(shù)組

    ??? 數(shù)組是連續(xù)內(nèi)存單元中一組名字和數(shù)據(jù)類型相同的數(shù)據(jù)元素的有限集合。數(shù)組可以用來(lái)保存和處理一組數(shù)據(jù)類型相同的數(shù)據(jù)元素。數(shù)組中的每個(gè)數(shù)據(jù)元素稱作一個(gè)數(shù)組元素。
    當(dāng)把一維數(shù)組中的每個(gè)數(shù)據(jù)元素定義為一個(gè)一維數(shù)組時(shí),就構(gòu)成了Java語(yǔ)言的二維數(shù)組,以此類推,還可以有三維數(shù)組甚至更多維數(shù)組。另外,Java語(yǔ)言可以構(gòu)造出不規(guī)則數(shù)組。
    ?
    1、一維數(shù)組
    ??? 和變量的使用方法類同,一維數(shù)組也要先定義后使用,不同的是數(shù)組在定義后還要經(jīng)過(guò)內(nèi)存單元分配后才能使用。
    ??? Java語(yǔ)言一維數(shù)組的使用分三步:定義一維數(shù)組變量、為數(shù)組分配內(nèi)存單元和使用數(shù)組元素。
    ?
    1.一維數(shù)組變量定義
    ??? 一維數(shù)組變量定義的語(yǔ)法形式為:
    ??? <數(shù)據(jù)類型><數(shù)組名>[];
    ???
    ??? <數(shù)據(jù)類型>[]<數(shù)組名>;

    ??? 其中,方括號(hào)[]表示定義的是數(shù)組變量,<數(shù)據(jù)類型>定義了數(shù)組元素的數(shù)據(jù)類型,<數(shù)組名>定義了數(shù)組名的標(biāo)識(shí)符。
    ??? 也可以把數(shù)組類型看成是Java語(yǔ)言在基本數(shù)據(jù)類型的基礎(chǔ)上的擴(kuò)展。
    ??? 例如:
    ??? int[]? a;
    ??? 定義了一個(gè)數(shù)據(jù)類型為int、數(shù)組標(biāo)識(shí)符為a的一維數(shù)組。
    在數(shù)組定義后,系統(tǒng)將給數(shù)組標(biāo)識(shí)符分配一個(gè)內(nèi)存單元,用于指示數(shù)組在內(nèi)存中的實(shí)際存放位置。由于在數(shù)組變量定義時(shí),數(shù)組元素本身在內(nèi)存中的實(shí)際存放位置還沒(méi)有給出,所以,此時(shí)該數(shù)組名的值為空(null)。例如,上述語(yǔ)句執(zhí)行后數(shù)組a的狀態(tài)如圖下圖中的(a)所示:
    ??
    ???? Java(1)-01

    ?
    2.為數(shù)組分配內(nèi)存單元
    ??? Java語(yǔ)言中,new是一個(gè)特殊的運(yùn)算符。new運(yùn)算符的語(yǔ)法形式為:
    ??? new <數(shù)據(jù)類型>
    ??? new運(yùn)算符的語(yǔ)義是:向系統(tǒng)申請(qǐng)指定數(shù)據(jù)類型所需的內(nèi)存單元空間。new運(yùn)算符返回所申請(qǐng)內(nèi)存單元的首地址。
    ??? 數(shù)組元素本身的內(nèi)存空間必須用new運(yùn)算符在程序中申請(qǐng)。只有用new運(yùn)算符為數(shù)組分配了內(nèi)存單元空間后,存放一個(gè)數(shù)組的所有數(shù)組元素所需的內(nèi)存空間才真正被系統(tǒng)分配了。為數(shù)組類型變量分配內(nèi)存單元的語(yǔ)法形式為:
    ??? <數(shù)組名> =? new <數(shù)據(jù)類型>[<長(zhǎng)度>];
    ??? 其中,<數(shù)組名>必須是已定義的數(shù)組類型變量,<數(shù)據(jù)類型>必須和定義數(shù)組名時(shí)的數(shù)據(jù)類型一致,方括號(hào)[]內(nèi)的<長(zhǎng)度>指出了當(dāng)前數(shù)組元素的個(gè)數(shù)。
    ??? 例如:
    ??? a = new int[5];
    ??? 就具體分配了包含5個(gè)int類型數(shù)組元素的內(nèi)存單元,并把該塊內(nèi)存單元的首地址賦值給數(shù)組名a
    ??? Java語(yǔ)言規(guī)定,在數(shù)組分配內(nèi)存單元后,系統(tǒng)將自動(dòng)給每個(gè)數(shù)組元素賦初值,并規(guī)定:數(shù)值類型的數(shù)組元素初值為0,邏輯類型的數(shù)組元素初值為false,類類型的數(shù)組元素初值為null。執(zhí)行該語(yǔ)句后的示意圖如上圖中的(b)
    ?
    3.使用數(shù)組元素
    ??? 一旦完成了定義數(shù)組變量和為數(shù)組分配內(nèi)存單元后,就可以使用數(shù)組中的任意數(shù)組元素。數(shù)組元素由數(shù)組名、一對(duì)方括號(hào)、方括號(hào)中的整數(shù)數(shù)值(一般稱作下標(biāo))組成。其中下標(biāo)指出了希望操作的數(shù)組元素位置。下標(biāo)由0開始,其最大值為用new運(yùn)算符分配內(nèi)存單元時(shí)規(guī)定的長(zhǎng)度值減1。各數(shù)組元素在內(nèi)存中按下標(biāo)的升序連續(xù)存放。上述數(shù)組a的5個(gè)元素依次是a[0],a[1],a[2],a[3],a[4]。
    ??? 例如:
    ??? a[0] = 10;
    ??? 語(yǔ)句就給數(shù)組元素a[0]賦了數(shù)值10。執(zhí)行該語(yǔ)句后的示意圖如上圖中的(c)

    4.引用類型
    ??? 前面討論的用基本數(shù)據(jù)類型定義變量和這里討論的定義數(shù)組變量有一些不同。用基本數(shù)據(jù)類型定義的變量,其變量名表示這個(gè)變量名中存放的數(shù)值,如有下列語(yǔ)句段:
    ??? int i, x;?? ? //定義變量
    ??? i = 10;??? ?? //給變量i賦值
    ??? x = 10 + i;?? //使用變量i中的數(shù)值
    ??? 上述語(yǔ)句段中,變量i的存儲(chǔ)結(jié)構(gòu)如下圖中的(a)所示,語(yǔ)句 x = 10 + i中,賦值號(hào)右邊的變量i表示變量i中的數(shù)值10。
    ???
    ??? Java(1)-02
    ??? 對(duì)于數(shù)組變量,設(shè)有下列語(yǔ)句段:
    ??? int[]? a;
    ??? int x;
    ??? a = new int[5];
    ??? a[0] = 10;??? ? //給數(shù)組元素a[0]賦值
    ??? x = 10 + a[0];? //使用數(shù)組元素a[0]中的數(shù)值
    ??? x = 10 + a;?? ? //錯(cuò)誤,數(shù)值10和數(shù)組名 a為不兼容的類型
    ??? 上述語(yǔ)句段中,數(shù)組a的存儲(chǔ)結(jié)構(gòu)如上圖中的(b)所示,語(yǔ)句 x = 10 + a[0]中,賦值號(hào)右邊的數(shù)組元素a[0]表示數(shù)組元素a[0]中的數(shù)值,但語(yǔ)句x = 10 + a將出錯(cuò),因?yàn)閿?shù)組名 a是指向內(nèi)存中存放數(shù)組元素的一片連續(xù)內(nèi)存單元的首地址,所以,數(shù)值10和數(shù)組名 a為不兼容的類型。
    ??? Java語(yǔ)言中,數(shù)組名的類型是引用類型。所謂引用類型,是指該類型的標(biāo)識(shí)符表示的是一片內(nèi)存連續(xù)地址的首地址。
    ??? 引用類型是非常重要的一個(gè)概念。下一節(jié)要討論字符串,字符串名和數(shù)組名一樣,也是引用類型。
    ?
    5.數(shù)組的簡(jiǎn)化使用方法
    ??? 數(shù)組的定義和為數(shù)組分配內(nèi)存空間兩步可以結(jié)合起來(lái)。
    ??? 例如:
    ??? int a[] = new int[ 5];
    ??? 就在定義int類型數(shù)組變量a的同時(shí)為數(shù)組分配了5個(gè)int類型數(shù)組元素所需的內(nèi)存空間,并給每個(gè)數(shù)組元素初始賦值0。
    ??? 數(shù)組元素的初始化賦值也可以和上述語(yǔ)句結(jié)合在一起完成,此時(shí)采用簡(jiǎn)寫形式。例如,
    ??? int a[] = {1,2,3,4,5};
    ??? 就在定義int類型數(shù)組變量a、為數(shù)組分配了5個(gè)int類型數(shù)組元素所需的內(nèi)存空間的同時(shí),初始化給數(shù)組元素a[0]賦初值1,a[1]賦初值2,……,a[4]賦初值5
    ?
    6.數(shù)組元素允許的運(yùn)算
    ??? 對(duì)數(shù)組元素可以進(jìn)行其數(shù)據(jù)類型所允許的任意運(yùn)算。
    ??? 例如:
    ??? int u = 3, v = 4, x, y;
    ??? int a[] = {1,2,3,4,5};
    ??? x = (a[2] + a[3] – u) * v;
    ??? y = a[1] / u;
    ??? 都是合法的表達(dá)式。
    ?
    7.數(shù)組的長(zhǎng)度
    ??? Java語(yǔ)言提供了length成員變量返回?cái)?shù)組元素的個(gè)數(shù),其使用方法為:
    ??? <數(shù)組名>.length
    ??? 例如:
    ??? int n;
    ??? int a[] = new int[ 10];
    ??? n = a.length;
    ??? 則有n等于10。
    ?
    8.數(shù)組長(zhǎng)度的重新定義
    ??? 一旦為數(shù)組規(guī)定了長(zhǎng)度,在程序中使用數(shù)組時(shí)就不能超過(guò)所規(guī)定的長(zhǎng)度,否則編譯時(shí)會(huì)給出“數(shù)組下標(biāo)越界”的語(yǔ)法錯(cuò)誤。例如,若數(shù)組分配的內(nèi)存空間為5個(gè),則語(yǔ)句中一旦出現(xiàn)a[5]將產(chǎn)生“數(shù)組下標(biāo)越界”的語(yǔ)法錯(cuò)誤。
    ??? 上述情況下,可以用new運(yùn)算符重新為數(shù)組分配內(nèi)存單元。例如,
    ??? a = new int[ 10];
    ??? 上述語(yǔ)句后,由于重新為數(shù)組a分配了10個(gè)int類型的內(nèi)存單元空間,所以,此時(shí)若語(yǔ)句中出現(xiàn)a[5],編譯時(shí)將不會(huì)出現(xiàn)“數(shù)組下標(biāo)越界”的語(yǔ)法錯(cuò)誤。
    【例2.11】求10個(gè)數(shù)中的最小數(shù)。
    要求:用數(shù)組初始化賦值方法給出10個(gè)整數(shù)數(shù)值。
    程序設(shè)計(jì)如下:
    public class Exam2_11
    {
    ??? public static void main(String args[])
    ??? {
    ???????? int i, min;
    ???????? int a[] = {30,81,37,45,26,46,44,78,80,64}; //初始化賦值
    ????????
    ???????? System.out.print("數(shù)組元素為:");???????????
    ???????? for(i = 0; i < a.length; i++)
    ???????????? System.out.print("? " + a[i]);??? //輸出數(shù)組元素
    ?
    ???????? //尋找數(shù)組中數(shù)值最小的元素
    ???????? min = a[0];
    ???????? for(i = 1; i < a.length; i++)
    ???????????? if(a[i] < min)? min = a[i];
    ?
    ???????? System.out.println("\n最小數(shù)為:" + min);
    ???? }
    }
    程序的運(yùn)行結(jié)果為:
    數(shù)組元素為:? 30? 81? 37? 45? 26? 46? 44? 78? 80? 64
    最小數(shù)為:26
    如果此問(wèn)題不用數(shù)組方法設(shè)計(jì),而用簡(jiǎn)單變量方法設(shè)計(jì),程序?qū)⒎浅?fù)雜。因此,數(shù)組是復(fù)雜問(wèn)題的程序設(shè)計(jì)所必需的。
    ------------------------------------------------------------------------------------------------------
    【例2.12】把10個(gè)數(shù)按從小到大的次序排序。
    要求:用數(shù)組初始化賦值方法給出10個(gè)整數(shù)數(shù)值,用直接交換排序算法排序。
    直接交換排序算法思想:例2.11程序找到的是數(shù)組a中的最小數(shù)。如果我們?cè)诖嘶A(chǔ)上設(shè)計(jì)一個(gè)循環(huán)過(guò)程,把每次找到的最小數(shù)和數(shù)組中尚未排好序的數(shù)據(jù)元素交換,下次循環(huán)時(shí),從這個(gè)數(shù)據(jù)元素的下一個(gè)位置開始,繼續(xù)這樣的尋找和交換過(guò)程。這樣的過(guò)程共進(jìn)行a.length-1次,則全部數(shù)組中的數(shù)據(jù)元素就按從小到大的次序排好了。
    程序設(shè)計(jì)如下:
    public class Exam2_12
    {
    ??? public static void main(String args[])
    ??? {
    ??????? int a[] = {30,81,37,45,26,46,44,78,80,64};
    ??????? int i, j, min, temp;
    ??????
    ??????? System.out.println("排序前數(shù)組元素為:");
    ??????? for(i = 0; i < a.length; i++)
    ??????????? System.out.print(a[i] + "? ");
    ?
    ? //直接交換排序
    ? for(i = 0; i < a.length-1; i++)???????? //循環(huán)a.length-1次
    ? {
    ??????????? min = i;????
    ??????????? for(j = i+1; j < a.length; j++)
    ??????????????? if(a[j] < a[min]) min = j;??????? //尋找最小數(shù)
    ?
    ??????????? if(min != i)???????????????????????????? //判斷是否需要交換
    ??????????? {
    ??????????????? temp = a[i];
    ??????????????? a[i] = a[min];
    ??????????????? a[min] = temp;
    ??????????? }
    }
    ?
    ??????? System.out.println("\n排序后數(shù)組元素為:");
    ??????? for(i = 0; i < a.length; i++)
    ??????????? System.out.print(a[i] + "? ");
    ??? }
    }
    程序的運(yùn)行結(jié)果為:
    排序前數(shù)組元素為:
    30? 81? 37? 45? 26? 46? 44? 78? 80? 64
    排序后數(shù)組元素為:
    26? 30? 37? 44? 45? 46? 64? 78? 80? 81
    ?

    2、二維數(shù)組
    ?
    ??? Java語(yǔ)言只定義了一維數(shù)組,但是,如果一維數(shù)組的每個(gè)數(shù)組元素都是一個(gè)一維數(shù)組,則構(gòu)成了Java語(yǔ)言的二維數(shù)組。和一維數(shù)組的使用方法類同,二維數(shù)組的使用也分三步:定義數(shù)組變量、為數(shù)組分配內(nèi)存單元和使用數(shù)組元素。
    ?
    1.二維數(shù)組定義:
    ??? 二維數(shù)組變量定義的一個(gè)例子如下:
    ??? int a[][];
    ???
    ??? int[] a[];

    ??? 上面語(yǔ)句定義了一個(gè)數(shù)據(jù)類型為int[](即一維數(shù)組類型)、標(biāo)識(shí)符為a的一維數(shù)組,即數(shù)組a是二維數(shù)組。
    ??? 上述語(yǔ)句執(zhí)行后數(shù)組a的內(nèi)存狀態(tài)如下圖中的(a)所示:
    ?
    ??? Java(1)-03

    ??? 為二維數(shù)組變量分配內(nèi)存單元時(shí)必須指定每一維的數(shù)組元素個(gè)數(shù)。
    ??? 例如:
    ??? a = new int[3][3];
    ??? 就具體分配了包含3個(gè)int[3]類型數(shù)組元素的內(nèi)存單元,并把該連續(xù)內(nèi)存單元的首地址賦給數(shù)組名a,同時(shí)為每個(gè)數(shù)組元素初始化賦值0。
    ??? 上圖中的(b)就是上述語(yǔ)句執(zhí)行后的內(nèi)存示意圖。
    ??? 使用二維數(shù)組元素的方法和使用一維數(shù)組元素的方法類同,只是這里要指出二維數(shù)組的每一維的下標(biāo)。例如,語(yǔ)句
    ??? a[0][0] = 10;
    ??? 就給數(shù)組元素a[0][0]賦了數(shù)值10。如上圖(c)所示

    2.二維數(shù)組簡(jiǎn)化:
    ??? 同樣,二維數(shù)組也可以用簡(jiǎn)化方法。例如:
    ???
    int a[][] = new int[5][5];
    ??? 就在定義int類型的二維數(shù)組變量a的同時(shí),為數(shù)組分配了內(nèi)存單元結(jié)構(gòu)如圖2.2(b)所示的5個(gè)每一維為int[5]類型數(shù)組元素的內(nèi)存空間,并給每個(gè)數(shù)組元素初始賦值0。
    ??? 又例如:
    ??? int a[][] = {{1,2,3},{4,5,6},{7,8,9}};
    ??? 就在定義int類型二維數(shù)組變量a、并為二維數(shù)組動(dòng)態(tài)分配了9個(gè)int類型數(shù)組元素內(nèi)存空間的同時(shí),初始化給數(shù)組元素a[0][0]賦初值1,a[0][1]賦初值2,a[0][2]賦初值3,a[1][0]賦初值4,……,a[2][2]賦初值9。
    ??? 三維數(shù)組或更多維數(shù)組的使用方法和二維數(shù)組的使用方法類同。
    【例2.13】求C = A×BT,其中,A是一個(gè)行向量,BT是一個(gè)列向量,C是一個(gè)矩陣。例如,設(shè)A和B均為n=3的向量,則矩陣C元素的計(jì)算方法是:c11=a1*b1,c12=a1*b2,c13=a1*b3,c21=a2*b1,……,c33=a3*b3。
    設(shè)計(jì)思想:這是一個(gè)矩陣運(yùn)算。用一維數(shù)組 a存放行向量A,用一維數(shù)組 b存放列向量BT,用兩維數(shù)組存放矩陣C。
    程序設(shè)計(jì)如下:
    public class Exam2_13??
    {
    ??? public static void main(String args[])
    ??? {
    ??????? final int n = 3;
    ??????? int a[] = {1,2,3};
    ??????? int b[] = {4,5,6};
    ??????? int c[][] = new int[n][n];
    ??????? int i, j;
    ?
    ??????? for(i = 0; i < n; i++)
    ??????????? for(j = 0; j < n; j++)
    ??????????????? c[i][j] = a[i] * b[j];????? //計(jì)算cij
    ?
    ??????? System.out.println (”二維數(shù)組元素為:”);
    ??????? for(i = 0; i < n; i++)????????????
    ??????? {
    ??????????? for(j = 0; j < n; j++)
    ??????????????? System.out.print(c[i][j] + "?? ");
    ??????????? System.out.println();
    ??????? }
    ??? }
    }
    程序運(yùn)行輸出結(jié)果為:
    二維數(shù)組元素為:
    4?? 5?? 6
    8?? 10?? 12
    12?? 15?? 18

    ?
    3、不規(guī)則的二維數(shù)組
    ?
    ??? 由于Java語(yǔ)言的二維數(shù)組是由一維數(shù)組定義的,所以,可以把二維數(shù)組中的每個(gè)一維數(shù)組定義為不同的元素個(gè)數(shù),這樣就可以構(gòu)成不規(guī)則的二維數(shù)組。
    ??? 不規(guī)則二維數(shù)組的具體設(shè)計(jì)方法是:先定義一個(gè)二維數(shù)組變量,并指定第一維的元素個(gè)數(shù),然后再分別為第二維數(shù)組(即第一維數(shù)組的每個(gè)數(shù)組元素)分配不同的內(nèi)存單元。由于此時(shí)是分別為第二維數(shù)組分配內(nèi)存單元,并且第二維數(shù)組所分配的內(nèi)存單元個(gè)數(shù)可以是不相同的,因此就構(gòu)成了不規(guī)則的二維數(shù)組。
    ??? 例如,下面的代碼先定義一個(gè)二維數(shù)組,并為數(shù)組的第一維數(shù)組元素分配空間(這就要求必須指定其具體個(gè)數(shù)),然后再分別為第二維數(shù)組元素分配不同的內(nèi)存空間。
    ??? int twoDim [][] = new int [4][]; //定義二維數(shù)組,并指定第一維的元素個(gè)數(shù)
    ??? twoDim[0] = new int[1];?? //指定第二維第一個(gè)元素的個(gè)數(shù)
    ??? twoDim[1] = new int[2];?? //指定第二維第二個(gè)元素的個(gè)數(shù)
    ??? twoDim[2] = new int[3];?? //指定第二維第三個(gè)元素的個(gè)數(shù)
    ??? twoDim[3] = new int[4];?? //指定第二維第四個(gè)元素的個(gè)數(shù)
    ??? 數(shù)組twoDim得到的內(nèi)存單元結(jié)構(gòu)如下圖所示:
    ?
    ??? Java(1)-04

    ?
    【例2.14】計(jì)算并保存九九乘法表,要求重復(fù)的部分只保存一個(gè)。
    設(shè)計(jì)思想:九九乘法表需要一個(gè)二維數(shù)組來(lái)保存,因?yàn)橐笾貜?fù)的部分(如1*2和2*1)只保存一個(gè),所以需要把二維數(shù)組定義成不規(guī)則的二維數(shù)組。
    程序設(shè)計(jì)如下:
    public class Exam2_14
    {
    ??? public static void main(String args[])
    ??? {
    ???????? final int N = 9;
    ???????? int a[][] = new int [N][];? //定義二維數(shù)組,并指定第一維的元素個(gè)數(shù)???????
    ???????? int i,j;
    ?
    ???????? for(i = 0; i < N; i++)
    ???????????? a[i] = new int [i+1];???????????? //指定不規(guī)則的第二維的個(gè)數(shù)
    ?
    ???????? for(i = 0; i < N; i++)?????
    ???????????? for(j = 0; j <= i; j++)???????
    ???????????????? a[i][j] = (i + 1) * (j + 1);??? //保存乘法表
    ??????
    //輸出乘法表
    ???????? for(i = 0; i < N; i++)????????????????
    ???????? {
    ?????????? for(j = 0; j <= i; j++)
    ?????????????? System.out.print(a[i][j] + "?? ");
    ???????????? System.out.println();
    ???????? }
    ???? }
    }
    程序運(yùn)行輸出如下:
    1
    2?? 4
    3?? 6?? 9
    4?? 8?? 12?? 16
    5?? 10?? 15?? 20?? 25
    6?? 12?? 18?? 24?? 30?? 36
    7?? 14?? 21?? 28?? 35?? 42?? 49
    8?? 16?? 24?? 32?? 40?? 48?? 56?? 64
    9?? 18?? 27?? 36?? 45?? 54?? 63?? 72?? 81
    ?
    ?
    9、字符串

    ??? 字符串是由n(n≥0)個(gè)字符組成的序列。為了把一個(gè)字符串和別的語(yǔ)言成分區(qū)分開來(lái),Java中的字符串用一對(duì)雙引號(hào)括起來(lái),一個(gè)字符串中的字符個(gè)數(shù)稱作字符串的長(zhǎng)度。如"abc"就是一個(gè)長(zhǎng)度為3、其值為abc的字符串。
    ??? Java中的字符串變量用String來(lái)定義,但和char、int等基本數(shù)據(jù)類型不同的是,String不是一個(gè)數(shù)據(jù)類型,而是一個(gè)類。String是Java應(yīng)用程序接口(即Java API)中定義的一個(gè)類。由于應(yīng)用程序一般要有輸出,常用的系統(tǒng)標(biāo)準(zhǔn)輸出要求輸出參數(shù)是一個(gè)字符串,因此,本節(jié)簡(jiǎn)單介紹字符串的概念和使用方法。

    1.字符串常量
    ??? 一對(duì)雙引號(hào)括起來(lái)的任何字符序列都是一個(gè)字符串常量,如""和"sum" 都是字符串常量。字符串常量""的長(zhǎng)度為0,字符串常量"sum"的長(zhǎng)度為3。

    2.字符串變量
    ??? 定義字符串變量的方法和定義基本數(shù)據(jù)類型變量的方法類同。如下面語(yǔ)句就定義了兩個(gè)字符串變量str1和str2:
    ??? String str1, str2;
    ??? 在定義字符串變量時(shí)可以同時(shí)賦值,例如,下面語(yǔ)句就在定義字符串變量str的同時(shí),給str賦了初值"abc":
    ??? String str = "abc";
    ??? 還可以定義String數(shù)組,例如,語(yǔ)句:
    ??? String[] v = new String[3];
    ??? 就定義了一個(gè)有3個(gè)數(shù)組元素的String數(shù)組v
    ?
    3.字符串變量名
    ??? 和數(shù)組名一樣,字符串變量名也是引用類型,即字符串變量名是指向內(nèi)存中一片連續(xù)內(nèi)存單元的首地址。
    ?
    4.字符串的賦值
    ??? 字符串變量定義后可以給該變量賦值。例如:
    ??? String str;
    ??? str = "abc";
    ??? 上述字符串變量定義和變量賦值也可以寫在一個(gè)語(yǔ)句中:
    ??? String str = "abc";
    ??? 上述語(yǔ)句的功能是:首先,定義字符串變量str;然后,向系統(tǒng)申請(qǐng)字符類型的長(zhǎng)度為3的一片連續(xù)內(nèi)存單元,并把字符’a’、’b’、’c’依次存入內(nèi)存單元中;最后,把這片連續(xù)內(nèi)存單元的首地址賦給字符串變量名str,即讓str指向存放字符串"abc"的內(nèi)存單元的首地址。
    ??? 給字符串變量賦值時(shí),還可以賦多個(gè),其方法等同于數(shù)組聲明時(shí)賦值。例如:
    ??? String[] v={"Hello world!","Hello China!","Hello XSYU!"};
    ??? 該語(yǔ)句就給字符串變量v 賦了3個(gè)字符串常量值。
    ?
    5.字符串的連接運(yùn)算
    ??? Java語(yǔ)言提供了特殊的字符串運(yùn)算符“+”,運(yùn)算符“+”表示把兩個(gè)字符串連接起來(lái)。例如:
    ??? String str = "abc" + "def";
    ??? 該語(yǔ)句就把字符串值"abcdef",賦給了字符串變量str。
    ?
    6.標(biāo)準(zhǔn)輸出中的字符串
    ??? 前面已經(jīng)多次使用了系統(tǒng)的標(biāo)準(zhǔn)輸出System.out.print()和System.out.println()。這兩個(gè)輸出語(yǔ)句要求的參數(shù)是字符串或字符串表達(dá)式。例如,
    ??? String str = "abc";
    ??? System.out.print("def");
    ??? System.out.print(str);
    ??? System.out.print(str + "def");

    ??? 都是合法的輸出語(yǔ)句。
    ??? 前面有如下形式的輸出語(yǔ)句:
    ??? int j = 10;
    ??? System.out.print("j = " + j);

    ??? 其中,"j = "是一個(gè)字符串,j是一個(gè)int類型的變量,其數(shù)值為10,顯然,表達(dá)式"j = " + j的數(shù)據(jù)類型不一致,在這里,系統(tǒng)將把int類型的數(shù)值10轉(zhuǎn)換為字符串類型。
    ??? 因此上面語(yǔ)句將輸出:
    ??? j = 10
    ?
    ?
    ?
    ?
    ?
    ?
    posted on 2008-09-19 19:23 decode360 閱讀(909) 評(píng)論(1)  編輯  收藏 所屬分類: 04.Java

    評(píng)論

    # re: Java學(xué)習(xí)(一).Java基礎(chǔ) 2009-07-10 07:44 看的科技
    好東西  回復(fù)  更多評(píng)論
      


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 精品国产sm捆绑最大网免费站| 国产精品久久久久久亚洲影视| 亚洲av激情无码专区在线播放| 国内精品久久久久久久亚洲| 亚洲午夜精品久久久久久浪潮 | 久久亚洲国产成人精品性色| 亚洲精品视频免费| 亚洲天天做日日做天天欢毛片| 91嫩草亚洲精品| 亚洲国语在线视频手机在线| 亚洲国产品综合人成综合网站| 亚洲国产精品久久久久婷婷老年| 国产亚洲一区二区在线观看| 免费少妇a级毛片| 我想看一级毛片免费的| 欧美a级在线现免费观看| 国产成人A在线观看视频免费| 91黑丝国产线观看免费| 青青草原1769久久免费播放| 理论亚洲区美一区二区三区| 亚洲日韩国产欧美一区二区三区 | 最近中文字幕免费完整| 国产福利在线观看免费第一福利| 国产成人一区二区三区免费视频 | 亚洲日韩人妻第一页| 亚洲好看的理论片电影| 亚洲欧美国产国产综合一区| 黄色网址免费在线观看| 91香蕉成人免费网站| 亚洲天堂中文字幕在线| 亚洲人成在线中文字幕| 国产精品一区二区三区免费| 四虎永久在线观看免费网站网址| 亚洲国产成人精品久久久国产成人一区二区三区综| 亚洲国产成人高清在线观看 | 黄色网址在线免费| 午夜免费福利在线| 亚洲av永久无码精品国产精品 | 亚洲综合在线视频| 美女又黄又免费的视频| 亚洲人成免费网站|