本章教學(xué)內(nèi)容:
2.1 標(biāo)識(shí)符和關(guān)鍵字
????在各種計(jì)算機(jī)編程語(yǔ)言中,每種語(yǔ)言都使用一些特定的字符來(lái)構(gòu)造基本詞法單位腾降,進(jìn)而描述程序語(yǔ)句碌奉。Java語(yǔ)言中主要詞法單位有五種:標(biāo)識(shí)符啥么、關(guān)鍵字往枷、分隔符罐寨、運(yùn)算符会傲、注釋。
2.1.1 標(biāo)識(shí)符
?????標(biāo)識(shí)符是程序員在編程中定義的詞法單位疙剑,它的作用是用來(lái)為程序中要處理的各種變量戒突、常量屯碴、方法、對(duì)象以及類等命名膊存,以后就可以通過(guò)名字來(lái)訪問或修改某個(gè)數(shù)據(jù)的值导而。
?????標(biāo)識(shí)符的構(gòu)成:在Java語(yǔ)言中忱叭,標(biāo)識(shí)符是由字母今艺、下劃線(_)、美元符($)開頭的字母虚缎、下劃線(_)、美元符和數(shù)字組成的字符序列
????Java語(yǔ)言中標(biāo)識(shí)符的命名必須滿足以下六個(gè)原則:
?????標(biāo)識(shí)符必須以字母实牡、下劃線(_)或美元符($)開頭,后面可以跟字母创坞、數(shù)字、下劃線或美元符题涨;
?????標(biāo)識(shí)符可以包含數(shù)字,但不能以數(shù)字開頭纲堵;
?????除下劃線“_”和美元符“$”符號(hào)外,標(biāo)識(shí)符中不能包含任何特殊字符婉支,如空格鸯隅;
?????標(biāo)識(shí)符中的字母區(qū)分大小寫,比如向挖,“abc”和“Abc”是兩個(gè)不同的標(biāo)識(shí)符蝌以;
?????對(duì)于標(biāo)識(shí)符的長(zhǎng)度沒有限制;
?????不能使用Java關(guān)鍵字作為標(biāo)識(shí)符何之。
2.1.2 關(guān)鍵字
????Java語(yǔ)言中有一些已經(jīng)被賦予特殊含義的跟畅、由系統(tǒng)定義的單詞,這些單詞被稱為關(guān)鍵字或保留字溶推。關(guān)鍵字不能作為標(biāo)識(shí)符使用
JAVA語(yǔ)言的主要關(guān)鍵字
2.1.3 Java語(yǔ)言的分隔符
?Java語(yǔ)言的分隔符的作用:
?????????用來(lái)分割和組合標(biāo)識(shí)符徊件,用來(lái)幫助Java編譯器正確閱讀和理解Java源程序。
?Java中的分隔符分為以下兩類:
(1)沒有特定意義蒜危,只起分割標(biāo)識(shí)符作用的空白符虱痕。包括空格、回車辐赞、換行和制表符(Tab)部翘。
(2)擁有確定含義的普通分隔符
Java語(yǔ)言的分隔符
2.2 常量和變量
2.2.1 常量
????在程序運(yùn)行過(guò)程中一直不會(huì)改變的量稱為常量。常量在整個(gè)程序中只能被賦值一次响委。在Java語(yǔ)言中聲明一個(gè)常量新思,除了要指定數(shù)據(jù)類型外窖梁,還需要通過(guò)final關(guān)鍵字進(jìn)行限定。
????聲明常量的一般格式如下:
????????final??數(shù)據(jù)類型??常量名=值
2.2.2 變量
????變量是在程序執(zhí)行過(guò)程中其值可以改變的量夹囚,是Java程序中最基本的存儲(chǔ)單元纵刘。變量須用標(biāo)識(shí)符進(jìn)行標(biāo)識(shí),該標(biāo)識(shí)符稱為變量名荸哟。程序編譯時(shí)假哎,會(huì)根據(jù)變量類型為每一個(gè)變量分配一段連續(xù)的內(nèi)存單元,用于存儲(chǔ)該變量的取值敲茄。
1.變量的聲明
變量聲明的一般格式為:
???????????? 數(shù)據(jù)類型? 變量名1[=值] [位谋,變量名2[=值]…];
???????????其中堰燎,方括號(hào)表示可選部分掏父,其含義是在定義變量時(shí)可以設(shè)置變量的初始值,如果在同一語(yǔ)句中要聲明多個(gè)變量秆剪,則變量間用逗號(hào)隔開赊淑。
變量的聲明和使用規(guī)則:
(1)變量的聲明必須遵從標(biāo)識(shí)符的命名規(guī)則。
(2)所有變量都可大小寫混用仅讽,但首字符應(yīng)小寫。
(3)盡量不要使用下劃線和$符號(hào)饱岸。
(4)可以先聲明再賦值苫费,如:
int i;
i=9;
也可以聲明的同時(shí)進(jìn)行賦值:
int i=9;?//聲明一個(gè)類型為 int的變量i双抽,并將它賦值為 9。
(5)沒有賦值的變量是不可以使用的牍汹。如:
int i;
System.out.println(i);?//這句代碼是錯(cuò)誤的慎菲。
(6)在同一作用域內(nèi)變量不能重復(fù)定義。
2.變量的作用域
????Java允許變量在任何程序塊內(nèi)被聲明棠众。程序塊被包括在一對(duì)大括號(hào)中闸拿。一個(gè)程序塊定義了一個(gè)作用域(scope )新荤,一個(gè)作用域決定了其中所定義變量的可見性和生存期台汇。
提示:
????Java不允許在兩個(gè)嵌套的語(yǔ)句塊內(nèi)聲明兩個(gè)完全同名的變量苟呐。
2.3 數(shù)據(jù)類型
????在程序設(shè)計(jì)中要使用和處理各種數(shù)據(jù)牵素,數(shù)據(jù)按照其表示信息的含義和占用空間的大小來(lái)區(qū)分為不同的數(shù)據(jù)類型。Java是一門強(qiáng)類型語(yǔ)言请琳,即所有的變量都必須顯式聲明其類型俄精。
????Java語(yǔ)言的數(shù)據(jù)類型可以分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型兩大類榕堰。
2.3.1 基本數(shù)據(jù)類型
1.整型數(shù)據(jù)類型
????不含小數(shù)點(diǎn)的數(shù)字為整數(shù)類型竖慧。例如:-124圾旨、948碳胳、0等沫勿。
????整數(shù)類型包含以下四種:byte、short诫惭、int夕土、long。?
(1)整型字面常量
????整型數(shù)據(jù)可以表示為10進(jìn)制角溃、8進(jìn)制减细、16進(jìn)制赢笨。
????10進(jìn)制:如123、-34萧吠;
????8進(jìn)制:
????如0123
????16進(jìn)制:如0x64
????整型默認(rèn)為int型纸型,若是長(zhǎng)整型需要在數(shù)據(jù)后加上字母L绊袋。例如:123為int型铸鹰,而123L則是long型。
(2)整型變量
????使用關(guān)鍵字int展姐、byte圾笨、short逊谋、long來(lái)定義整型變量胶滋,定義時(shí)也可以賦給初值究恤。
????例如:
????int???x=123;
????long?? y=123L;
????long?? z=123l;
????byte?? luckyNumber=7;
????short smallNumber=1234;
2.浮點(diǎn)數(shù)據(jù)類型
含小數(shù)點(diǎn)的數(shù)字為浮點(diǎn)類型。例如:-38.32抄腔、34.0等赫蛇。
浮點(diǎn)類型包含以下兩種:float棍掐、double作煌。
(1)浮點(diǎn)型字面常量
浮點(diǎn)型數(shù)據(jù)有兩種表示形式:
小數(shù)形式:如1.23,-3.45,1.0
科學(xué)計(jì)數(shù)法形式:如1.23456E+3赚瘦、12345E-4,其中e或E之前必須有數(shù)字,且e或E后面的指數(shù)必須為整數(shù)。
實(shí)型默認(rèn)為double型鹰服,數(shù)字后加f或F為float型悲酷,加d或D為double型亲善。
(2)浮點(diǎn)型變量
使用關(guān)鍵字float 蛹头、double 來(lái)定義浮點(diǎn)型變量,定義時(shí)也可以賦給初值屠尊。
例如:
double x=1.496E8;
float y=9E-28F;
double z=0.123;
float w=0.123F;
3.布爾數(shù)據(jù)類型
(1)布爾型字面常量
只有兩個(gè)值:true和false
(2)布爾型變量
使用關(guān)鍵字boolean來(lái)定義布爾型變量讼昆,定義時(shí)也可以賦給初值骚烧。
例如:boolean? state=true;或 ?boolean state;state=true;
4.字符數(shù)據(jù)類型
(1)字符型字面常量
????字符型字面常量是由一對(duì)單引號(hào)括起來(lái)的單個(gè)字符或以反斜線(\)開頭的轉(zhuǎn)義符止潘。在Java中凭戴,一個(gè)字符代表一個(gè)16位無(wú)符號(hào)的Unicode字符,每個(gè)字符占2個(gè)字節(jié)者冤。
例如:'A'涉枫、'b'、'?' 困后、'!'摇予、'9'侧戴、'好'酗宋。
(2)字符型變量
使用關(guān)鍵字char來(lái)定義字符變量蜕猫,用于存儲(chǔ)一個(gè)字符丹锹,定義時(shí)也可以賦給初值芬失。
如:char myChar='A'棱烂;
(3)字符集
ASCII(American Standard Code for Information Interchange) 字符集:使用7位代碼表示大小寫字母、數(shù)字0~9以及若干控制字符哩治,如換行符业筏。
ISO-8859-1 Latin-1字符集:在西歐蒜胖,用戶希望字符集能夠表示他們本國(guó)字符集的所有字符,ASCII字符集因而被擴(kuò)展到8位寻狂,即增加了128個(gè)字符蛇券,用于表示英文中不存在的各種西歐語(yǔ)言的字符纠亚。
Unicode字符集:是ISO標(biāo)準(zhǔn)16位字符集菜枷,支持65536個(gè)不同的字符。其中大約有21000個(gè)字符專門用于中文拥娄、日文和韓文的表意文字稚瘾。
ASCII摊欠、ISO Latin-1都是Unicode的子集些椒。
(4)轉(zhuǎn)義字符
????除了上述形式的字符常量值之外,Java還允許對(duì)一些難以用一般字符來(lái)表示的字符使用一種特殊形式的字符常量值來(lái)表示掸刊,這種特殊的字符稱為轉(zhuǎn)義字符免糕。轉(zhuǎn)義字符是以一個(gè)“\”開頭的字符序列。表2-4列出了Java中常用的轉(zhuǎn)義字符及其含義忧侧。
2.3.2 引用數(shù)據(jù)類型
2.3.3 基本數(shù)據(jù)類型轉(zhuǎn)換
????在Java中石窑,數(shù)據(jù)的類型如果是相容的,那么一種數(shù)據(jù)類型就可以轉(zhuǎn)換成另外一種數(shù)據(jù)類型蚓炬。數(shù)據(jù)類型轉(zhuǎn)換的方式有“自動(dòng)類型轉(zhuǎn)換”和“強(qiáng)制類型轉(zhuǎn)換”兩種松逊。
1.自動(dòng)類型轉(zhuǎn)換
????????????將一種類型的變量賦給另一種類型的變量時(shí),如果兩種類型兼容并且目標(biāo)類型大于源類型肯夏,就會(huì)發(fā)生自動(dòng)類型轉(zhuǎn)換经宏。自動(dòng)類型轉(zhuǎn)換會(huì)“隱含”發(fā)生。這些基本類型按精度從“低”到“高”的順序排列如下:(擴(kuò)大是隱含的)
?? byte??short?? int?? long???float???? double
2.強(qiáng)制類型轉(zhuǎn)換
表示范圍大的數(shù)據(jù)類型要轉(zhuǎn)換成表示范圍小的數(shù)據(jù)類型,需要用到強(qiáng)制類型轉(zhuǎn)換。
強(qiáng)制類型轉(zhuǎn)換的格式為:(類型名)要轉(zhuǎn)換的表達(dá)式;
例如:
int x=(int)23.89;
long y=(long)34.98F;
如果輸出x,y的值將是23和34轨域。?
2.4 運(yùn)算符和表達(dá)式
????Java提供了豐富的運(yùn)算符,按照運(yùn)算符操作數(shù)的數(shù)目劃分,可以將運(yùn)算符分為單目運(yùn)算符必峰、雙目運(yùn)算符和三目運(yùn)算符问欠。
????按照運(yùn)算符的功能劃分,可以將運(yùn)算符分為算術(shù)運(yùn)算符、關(guān)系運(yùn)算符借浊、邏輯運(yùn)算符槐沼、位運(yùn)算符肖油、賦值運(yùn)算符和條件運(yùn)算符县袱。
2.4.1 算術(shù)運(yùn)算符和算術(shù)表達(dá)式
2.4.2 關(guān)系運(yùn)算符和關(guān)系表達(dá)式
2.4.3 邏輯運(yùn)算符和邏輯表達(dá)式
????邏輯運(yùn)算具有短路特性。所謂短路揍移,就是當(dāng)參與運(yùn)算的第一個(gè)操作數(shù)已經(jīng)足以推斷出這個(gè)表達(dá)式的值的時(shí)候石蔗,另外一個(gè)操作數(shù)就不會(huì)被執(zhí)行日熬。
例如:
int i=5;
boolean j=false&&(++i>5);
System.out.println(i);
這時(shí)輸出結(jié)果為5而不是6憎亚。
2.4.4 條件運(yùn)算符和條件表達(dá)式
????條件表達(dá)式的一般形式為:表達(dá)式1?表達(dá)式2:表達(dá)式3
????其中表達(dá)式1的值為布爾類型陆爽,若表達(dá)式1的值為真贡必,則返回表達(dá)式2的值利花,否則返回表達(dá)式3的值挠乳。
提示:
????條件表達(dá)式結(jié)果的類型為表達(dá)式2和表達(dá)式3中精度較高的類型卖怜。例如:表達(dá)式3>2?4:5.0的結(jié)果為4.0甩鳄。
2.4.5 賦值運(yùn)算符和賦值表達(dá)式?
????賦值運(yùn)算符為一個(gè)單獨(dú)的“=”彬祖,它將其右側(cè)表達(dá)式的值賦給左側(cè)的變量。
2.4.6 位運(yùn)算符和位運(yùn)算表達(dá)式
????位運(yùn)算是指按二進(jìn)制位進(jìn)行的運(yùn)算焊虏。因?yàn)樵谙到y(tǒng)軟件中,常要處理二進(jìn)制位的問題晤郑。例如:將一個(gè)存儲(chǔ)單元中的各二進(jìn)制位左移或右移一位线脚,兩個(gè)數(shù)按位相加等括丁。Java語(yǔ)言提供了位運(yùn)算的功能,位運(yùn)算的操作數(shù)和結(jié)果都是整型。?
1. “按位與”運(yùn)算符(&)
????按位與是指參加運(yùn)算的兩個(gè)整數(shù)迹淌,按二進(jìn)制位進(jìn)行“與”運(yùn)算唉窃。如果兩個(gè)相應(yīng)的二進(jìn)制位都為1矮嫉,則該位的結(jié)果值為1昨寞;否則為0添瓷。
????即:0&0=0,0&1=0眷蚓,1&0=0鼻种,1&1=1。
????“按位與”運(yùn)算的用途:
????(1) 清零沙热。
????(2) 取一個(gè)數(shù)中某些指定位叉钥。
2.“按位或“運(yùn)算符(|)
????按位或是指參加運(yùn)算的兩個(gè)整數(shù),按二進(jìn)制位進(jìn)行“或”運(yùn)算篙贸。如果兩個(gè)相應(yīng)的二進(jìn)制位中有一個(gè)為1投队,該位的結(jié)果值為1,否則為0爵川。
????即 0|0=0敷鸦,0|1=1,1|0=1寝贡,1|1=1
????“按位或”運(yùn)算的用途:
????(1)按位或運(yùn)算常用來(lái)對(duì)一個(gè)數(shù)據(jù)的某些位定值為1扒披。
????例如:如果想使一個(gè)數(shù)a的低4位改為1,只需將a與017進(jìn)行按位或運(yùn)算即可圃泡。
????(2)和“按位與”運(yùn)算一起組合新數(shù)碟案。
????例如:將整數(shù)a的低16位和整數(shù)b的高16位取出組合成整數(shù)c。則c=(a&0x00ff)|(b&0xff00)颇蜡。
3.“按位異或”運(yùn)算符(^)
????異或運(yùn)算也稱XOR運(yùn)算价说。它的規(guī)則是:若參加運(yùn)算的兩個(gè)二進(jìn)制位相同則結(jié)果為0,否則為1风秤。
????即:0^0=0鳖目,0^1=1,1^0=1缤弦, 1^1=0
????例如:071^052=023 (八進(jìn)制數(shù))
????異或運(yùn)算的用途:
????(1) 使特定位翻轉(zhuǎn)领迈。
????設(shè)有01111010,想使其低4位翻轉(zhuǎn)碍沐,即1變?yōu)椋暗敕眩白優(yōu)椋薄抢韭?梢詫⑺c00001111進(jìn)行^運(yùn)算。
????(2) 與0相異或恍箭,保留原值刻恭。
????例如:012^00=012
????(3) 交換兩個(gè)值,不用臨時(shí)變量。
????例如:a=3鳍贾,b=3鞍匾。
????想將a和b的值互換,可以用以下賦值語(yǔ)句實(shí)現(xiàn):
????a=a^b;b=b^a;a=a^b;
4. “按位取反”運(yùn)算符(~)
????~是一個(gè)單目(元)運(yùn)算符骑科,用來(lái)對(duì)一個(gè)二進(jìn)制數(shù)按位取反橡淑,即將0變1,將1變0咆爽。例如:~025是對(duì)八進(jìn)制數(shù)25(即二進(jìn)制數(shù)00010101)按位求反梁棠。
5.“按位左移”運(yùn)算符(<<)
????左移運(yùn)算符用來(lái)將一個(gè)數(shù)的各二進(jìn)制位全部左移若干位。左移后高位溢出舍棄斗埂,低位補(bǔ)0符糊。
????例如:a<<2?? 將a的二進(jìn)制數(shù)左移2位,右邊的空位補(bǔ)0呛凶。
????若a=15男娄,即二進(jìn)制數(shù)00001111,a左移2位得00111100(十進(jìn)制數(shù)60)
????左移1位相當(dāng)于該數(shù)乘以2漾稀,左移2位相當(dāng)于該數(shù)乘以22,15<<2=60模闲,即乘4……依此類推,左移n位相當(dāng)于該數(shù)乘以2n崭捍。但此結(jié)論只適用于該數(shù)左移時(shí)被溢出舍棄的高位中不包含1的情況尸折。
6.“按位右移”運(yùn)算符(>>)
????右移運(yùn)算符用來(lái)將一個(gè)數(shù)的各二進(jìn)制位全部右移若干位。右移后空出的高位補(bǔ)符號(hào)位缕贡,低位舍棄翁授。
????例如:a>>2表示將a的各二進(jìn)制位右移2位,移到右端的低位被舍棄晾咪,對(duì)空出的高位而言收擦,如果a為正數(shù),則補(bǔ)0谍倦,如果a為負(fù)數(shù)塞赂,則補(bǔ)1。
????右移一位相當(dāng)于除以2昼蛀,右移n位相當(dāng)于除以2n宴猾。但此結(jié)論只適用于該數(shù)右移時(shí)被舍棄的低位中不包含1的情況。
7.“無(wú)符號(hào)右移”運(yùn)算符(>>>)
????無(wú)符號(hào)右移運(yùn)算符用來(lái)將一個(gè)數(shù)的各二進(jìn)制位全部右移若干位叼旋。右移后空出的高位補(bǔ)0仇哆,低位舍棄。
2.4.7 其他運(yùn)算符?
2.4.8 運(yùn)算符優(yōu)先級(jí)和結(jié)合性
????Java語(yǔ)言規(guī)定了運(yùn)算符的優(yōu)先級(jí)和結(jié)合性夫植。
? ? 1.運(yùn)算符優(yōu)先級(jí)是指同一表達(dá)式中多個(gè)運(yùn)算符被執(zhí)行的先后次序讹剔,即運(yùn)算符的優(yōu)先級(jí)決定了表達(dá)式中運(yùn)算執(zhí)行的先后順序油讯。
? ? 2.運(yùn)算符的結(jié)合性決定了相同級(jí)別的運(yùn)算符的先后執(zhí)行順序。左結(jié)合性是指同一優(yōu)先級(jí)的運(yùn)算從左到右順序執(zhí)行延欠;右結(jié)合性是指指同一優(yōu)先級(jí)的運(yùn)算從右到左順序執(zhí)行陌兑。例如,加減的結(jié)合性是從左到右由捎,8-5+3相當(dāng)于(8-5)+3兔综。邏輯否運(yùn)算符“!”的結(jié)合性是右到左狞玛,H沓邸!x 相當(dāng)于!(!x)为居。
? ? 3.在表達(dá)式求值時(shí)碌宴,按照優(yōu)先級(jí)的順序由高到低依次執(zhí)行。同一優(yōu)先級(jí)的按照結(jié)合性執(zhí)行蒙畴。
2.5 基本類型數(shù)據(jù)的輸入和輸出
2.5.1 從命令行輸入輸出數(shù)據(jù)
1.向控制臺(tái)輸出數(shù)據(jù)
????標(biāo)準(zhǔn)輸出流(System.out)中為我們提供了三種向控制臺(tái)輸出數(shù)據(jù)的方法
????(1)print(輸出項(xiàng)):實(shí)現(xiàn)不換行的數(shù)據(jù)輸出贰镣。輸出項(xiàng)可以是變量名、常量膳凝、表達(dá)式碑隆。
????(2)println(輸出項(xiàng)):數(shù)據(jù)輸出后換行。輸出項(xiàng)可以是變量名蹬音、常量上煤、表達(dá)式。
????(3)printf("格式控制部分"著淆,表達(dá)式1劫狠,表達(dá)式2,…表達(dá)式n):帶格式描述的數(shù)據(jù)輸出永部。格式控制部分由格式控制符和普通字符組成独泞,普通字符原樣輸出;常用的格式控制符有%d(代表十進(jìn)制數(shù))苔埋、%c(代表一個(gè)字符)懦砂、%f(代表浮點(diǎn)數(shù))、%e(代表科學(xué)計(jì)數(shù)法表示的浮點(diǎn)數(shù))组橄、%s(代表字符串)荞膘、%n(代表?yè)Q行符)。
2.從控制臺(tái)輸入數(shù)據(jù)
????(1)使用Scanner類實(shí)現(xiàn)數(shù)據(jù)的輸入
????使用Java語(yǔ)言提供的java.util.Scanner類中的方法可以實(shí)現(xiàn)從控制臺(tái)輸入數(shù)據(jù)玉工。使用步驟如下:
????第一步:在程序開頭添加一行導(dǎo)入包語(yǔ)句:
????import java.util; //Scanner類定義在java.util包中羽资。
????第二步:構(gòu)造Scanner類對(duì)象
????Scanner in=new Scanner(System.in);
????第三步:使用Scanner類的各種方法實(shí)現(xiàn)輸入操作,
????next()系列方法有:
????nextInt():輸入整數(shù)
????nextLine():輸入字符串
????nextDouble():輸入雙精度數(shù)
? ? next() :輸入字符串(以空格作為分隔符)
????(2)使用數(shù)據(jù)輸入流實(shí)現(xiàn)數(shù)據(jù)的輸入
????有關(guān)數(shù)據(jù)輸入流的相關(guān)知識(shí)請(qǐng)參見第9章遵班。這里只簡(jiǎn)單的用一個(gè)例子介紹利用字符輸入流輸入字符串的過(guò)程削罩。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class IoDemo{
??public static void main(String[]args){
?String s="";
System.out.println("請(qǐng)輸入一個(gè)字符串:");
?????try{?????????????????????????????????//使用異常處理語(yǔ)句
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
????????s=in.readLine();
??????}catch(IOExceptione){}
??????System.out.println("你輸入的字符串是:"+s);
}}
2.5.2. 使用Swing對(duì)話框?qū)崿F(xiàn)數(shù)據(jù)的輸入輸出
1.使用Swing對(duì)話框?qū)崿F(xiàn)數(shù)據(jù)的輸出
????使用javax.swing.JOptionPane包中的showMessageDialog()方法將彈出消息顯示對(duì)話框瞄勾,可以用該對(duì)話框顯示輸出結(jié)果。該方法的具體用法請(qǐng)參見第11章弥激。這里只簡(jiǎn)單的用一個(gè)例子介紹利用showMessageDialog()方法輸出數(shù)據(jù)的過(guò)程。
2. 使用Swing對(duì)話框?qū)崿F(xiàn)數(shù)據(jù)的輸入
????使用javax.swing.JOptionPane包的showInputDialog()方法從輸入對(duì)話框中獲得字符串愿阐。該方法的具體用法請(qǐng)參見第11章微服。這里只簡(jiǎn)單的用一個(gè)例子介紹利用方法showInputDialog()輸入字符串的過(guò)程。
2.6 程序流程控制語(yǔ)句
Java的控制語(yǔ)句分為以下三類:選擇缨历、循環(huán)和跳轉(zhuǎn)以蕴。
2.6.1 選擇結(jié)構(gòu)語(yǔ)句
????選擇結(jié)構(gòu)又稱分支結(jié)構(gòu),是根據(jù)判斷條件的成立與否決定要執(zhí)行哪些語(yǔ)句的一種程序結(jié)構(gòu)辛孵,它的作用是讓程序更具有選擇性丛肮。
Java語(yǔ)言中提供了兩種選擇語(yǔ)句:if語(yǔ)句和switch語(yǔ)句。
1.if 語(yǔ)句
if語(yǔ)句是最常用的選擇結(jié)構(gòu)魄缚,其語(yǔ)法格式如下:
if(條件表達(dá)式)
? 語(yǔ)句1
[else語(yǔ)句2]
格式說(shuō)明:
(1)條件表達(dá)式是布爾表達(dá)式宝与,結(jié)果為true或false;
(2)語(yǔ)句1和語(yǔ)句2可以是單獨(dú)一個(gè)語(yǔ)句冶匹,也可以是一個(gè)語(yǔ)句塊习劫。當(dāng)條件為true時(shí)執(zhí)行語(yǔ)句1,否則執(zhí)行語(yǔ)句2嚼隘。
(3)else部分可以省略诽里。
2.if語(yǔ)句的嵌套
????所謂if語(yǔ)句的嵌套是指if語(yǔ)句中的語(yǔ)句1或語(yǔ)句2又是if語(yǔ)句的情況。當(dāng)判斷條件比較復(fù)雜飞蛹,在一個(gè)布爾表達(dá)式中不能完全表示時(shí)谤狡,可以采用嵌套的if語(yǔ)句來(lái)實(shí)現(xiàn)。if語(yǔ)句的嵌套結(jié)構(gòu)較多卧檐,其中最常用的嵌套結(jié)構(gòu)為“if-else if”格式墓懂。
if-else if嵌套結(jié)構(gòu)的語(yǔ)法格式如下:
if(判斷條件1)
?語(yǔ)句1;
else if(判斷條件2)
?? 語(yǔ)句2;
…
else
?語(yǔ)句n+1:
}
3.switch語(yǔ)句
switch語(yǔ)句是多分支的開關(guān)語(yǔ)句,它基于一個(gè)表達(dá)式的值來(lái)執(zhí)行多個(gè)分支語(yǔ)句中的一個(gè)語(yǔ)句泄隔。
switch語(yǔ)句語(yǔ)法格式如下:
switch(表達(dá)式){
??case常量表達(dá)式1:語(yǔ)句1拒贱;break;
??case常量表達(dá)式2:語(yǔ)句2;break;
??…
??case常量表達(dá)式n:語(yǔ)句n佛嬉;break;
??[default:語(yǔ)句n+1逻澳;]
}
說(shuō)明:
(1)switch語(yǔ)句執(zhí)行時(shí)首先計(jì)算表達(dá)式的值。表達(dá)式的類型必須是以下5種類型之一:int暖呕、byte斜做、char、short湾揽、long瓤逼。同時(shí)還要保證與case分支判斷值的類型一致笼吟。
(2)case子句只是作為執(zhí)行語(yǔ)句的入口。switch語(yǔ)句把表達(dá)式返回的值依次與每個(gè)case子句中的常量值相比較霸旗,如果遇到匹配的值贷帮,則從該入口進(jìn)入switch語(yǔ)句,執(zhí)行該case后面的語(yǔ)句塊诱告,如果都不符合則執(zhí)行default后的語(yǔ)句撵枢。如果case子句后沒有break語(yǔ)句,則流程會(huì)一直向下執(zhí)行精居,直到遇到break語(yǔ)句或到switch語(yǔ)句的尾端才結(jié)束switch語(yǔ)句的執(zhí)行锄禽。
(3)default子句是可選的。
(4)break語(yǔ)句用來(lái)在執(zhí)行完一個(gè)case分支后靴姿,使程序跳出switch語(yǔ)句沃但,即終止switch語(yǔ)句的執(zhí)行。
(5)case后面的常量值必須互不相同佛吓。
(6)多個(gè)不同的case值要執(zhí)行一組相同的操作時(shí)宵晚,可以共用一組語(yǔ)句。
2.6.2 循環(huán)結(jié)構(gòu)語(yǔ)句
????在程序設(shè)計(jì)中辈毯,有時(shí)需要反復(fù)執(zhí)行一段相同的代碼坝疼,直到滿足終止循環(huán)的條件為止。為了簡(jiǎn)化程序結(jié)構(gòu)谆沃,Java語(yǔ)言也像c/c++語(yǔ)言一樣提供了循環(huán)結(jié)構(gòu)钝凶。其中反復(fù)被執(zhí)行的語(yǔ)句稱為循環(huán)體。在Java語(yǔ)言中有三種常用的循環(huán)語(yǔ)句唁影,分別是while語(yǔ)句耕陷、do…while語(yǔ)句和for語(yǔ)句。
一個(gè)循環(huán)結(jié)構(gòu)一般要包含四個(gè)因素:
(1)初始化部分:用來(lái)設(shè)置循環(huán)控制的一些初始條件据沈。
(2)判斷部分:循環(huán)的控制條件哟沫,是一個(gè)布爾表達(dá)式,用來(lái)判斷循環(huán)要不要繼續(xù)執(zhí)行锌介。
(3)循環(huán)體部分:被循環(huán)控制反復(fù)執(zhí)行的代碼嗜诀。
(4)迭代部分:用來(lái)修改循環(huán)的控制條件,以使循環(huán)趨向于終止孔祸。
1.while語(yǔ)句
while語(yǔ)句是一種先判斷條件隆敢,然后根據(jù)條件決定是否執(zhí)行循環(huán)體的循環(huán)語(yǔ)句。
while語(yǔ)句的語(yǔ)法格式如下:
while(循環(huán)條件){
?? 循環(huán)體
}
關(guān)于while語(yǔ)句的三點(diǎn)說(shuō)明:
(1)循環(huán)體如果包含一個(gè)以上的語(yǔ)句崔慧,應(yīng)該用花括弧括起來(lái)拂蝎,以語(yǔ)句塊的形式出現(xiàn)。
(2)在循環(huán)體中應(yīng)有使循環(huán)趨向于結(jié)束的語(yǔ)句惶室,即循環(huán)要素中的迭代部分温自。
(3)如果條件一開始就為false,則循環(huán)體一次都不執(zhí)行玄货。
2.do…while語(yǔ)句
????do…while語(yǔ)句用于循環(huán)體至少執(zhí)行一次的情形。它和while語(yǔ)句類似悼泌,區(qū)別是while語(yǔ)句為先判斷條件是否滿足再執(zhí)行循環(huán)體松捉,而do…while語(yǔ)句則先執(zhí)行循環(huán)體一次后,再判斷條件是否滿足馆里。因此do…while語(yǔ)句中的循環(huán)體至少被執(zhí)行一次惩坑,而while語(yǔ)句的循環(huán)體可能一次都不執(zhí)行。
do…while語(yǔ)句語(yǔ)法格式如下:
do{
循環(huán)體
}while(條件);
3.for循環(huán)語(yǔ)句
????for語(yǔ)句使用最為靈活也拜,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況趾痘,它完全可以代替while語(yǔ)句慢哈。
for循環(huán)語(yǔ)句的語(yǔ)法格式如下:
for(表達(dá)式1;表達(dá)式2永票;表達(dá)式3){
循環(huán)體
}
其中:
表達(dá)式1:初始化表達(dá)式卵贱,負(fù)責(zé)對(duì)控制變量賦初值。
表達(dá)式2:判斷條件表達(dá)式侣集,值為布爾型的表達(dá)式键俱,指定循環(huán)條件。
表達(dá)式3:循環(huán)控制變量修改表達(dá)式世分,負(fù)責(zé)修改循環(huán)控制變量编振,改變循環(huán)條件。
關(guān)于for語(yǔ)句的幾點(diǎn)說(shuō)明:
(1)for語(yǔ)句的一般形式中的表達(dá)式1臭埋、表達(dá)式2踪央、表達(dá)式3都可以省略,但是分號(hào)不能省略瓢阴。
(2)表達(dá)式2必須是關(guān)系表達(dá)式(如i<=100)或邏輯表達(dá)式(如a<b&& x<y)
(3)表達(dá)式1可以是設(shè)置循環(huán)變量初值的賦值表達(dá)式畅蹂,也可以是與循環(huán)變量無(wú)關(guān)的其他表達(dá)式。如:for (sum=0;i<=100;i++)? sum=sum+i;
(4)表達(dá)式3也可以是與循環(huán)控制無(wú)關(guān)的任意表達(dá)式荣恐。
(5)表達(dá)式1和表達(dá)式3可以使用用逗號(hào)分割的語(yǔ)句序列來(lái)進(jìn)行多個(gè)操作液斜。
如:for(i=1,sum=0;i<=100;sum+=i,i++);? 但是這種用逗號(hào)分割的語(yǔ)句序列只適用于for循環(huán)
提示: 利用for循環(huán)編程時(shí),for的三個(gè)表達(dá)式最好都與循環(huán)控制有關(guān)叠穆。
4.循環(huán)的嵌套
????一個(gè)循環(huán)體內(nèi)又包含另一個(gè)完整的循環(huán)結(jié)構(gòu)稱為循環(huán)的嵌套少漆。內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多層循環(huán)痹束。三種循環(huán)(while循環(huán)检疫、do-while循環(huán)和for循環(huán))可以互相嵌套。
2.6.3 流程跳轉(zhuǎn)語(yǔ)句
????Java中有三種跳轉(zhuǎn)語(yǔ)句祷嘶,分別是:break語(yǔ)句屎媳、continue語(yǔ)句夺溢、return語(yǔ)句。
1.break語(yǔ)句
????在前面所學(xué)的switch語(yǔ)句中烛谊,break語(yǔ)句已經(jīng)得到了應(yīng)用风响。在Java提供的各類循環(huán)中,break語(yǔ)句也提供了一種方便的結(jié)束循環(huán)的方法丹禀。
(1)break;? //用來(lái)終止當(dāng)前循環(huán)
(2)break 標(biāo)號(hào)状勤;//結(jié)束標(biāo)號(hào)所指的代碼塊,程序流程從內(nèi)層循環(huán)或內(nèi)層程序塊中退出,執(zhí)行代碼塊后面的語(yǔ)句双泪。
2.continue語(yǔ)句?
????continue語(yǔ)句只能用在循環(huán)語(yǔ)句中持搜,用于結(jié)束本次循環(huán)或指定的標(biāo)號(hào)循環(huán),即跳過(guò)循環(huán)體中下面尚未執(zhí)行的語(yǔ)句焙矛,然后進(jìn)入循環(huán)的起始處進(jìn)行終止條件判斷葫盼,以決定是否繼續(xù)循環(huán)。
Continue語(yǔ)句有以下兩種形式:
(1)continue;//終止當(dāng)前循環(huán)村斟,
(2)continue 標(biāo)號(hào)贫导;//直接跳轉(zhuǎn)到標(biāo)號(hào)指明的外層循環(huán)中
3.return語(yǔ)句?
????return語(yǔ)句通常用在一個(gè)方法的最后,其作用是將程序流程從當(dāng)前方法(被調(diào)方法)中返回到主調(diào)方法中蟆盹。return語(yǔ)句有如下兩種使用形式:
(1)return表達(dá)式孩灯;
(2)return;
????當(dāng)含有return語(yǔ)句的方法被調(diào)用時(shí),執(zhí)行return語(yǔ)句將從當(dāng)前方法中退出逾滥,返回到調(diào)用該方法的語(yǔ)句處峰档。如果執(zhí)行的return語(yǔ)句后帶有表達(dá)式,將同時(shí)返回表達(dá)式的結(jié)果匣距;如果執(zhí)行的是第二種形式的return語(yǔ)句面哥,則不返回任何值。
2.7 數(shù)組
????數(shù)組是由一組相同類型的數(shù)據(jù)按一定順序排列的集合毅待。
????數(shù)組的主要特點(diǎn)如下:
?????(1)數(shù)組中的所有元素都具有相同的數(shù)據(jù)類型尚卫。
?????(2)組中的各元素是有先后順序的,它們?cè)趦?nèi)存中按照這個(gè)先后順序連續(xù)存放在一起尸红。
?????(3)每個(gè)數(shù)組元素使用數(shù)組名和它在數(shù)組中的順序位置來(lái)表示吱涉。如a[0]表示名字為a的數(shù)組中的第一個(gè)元素,a[1]表示數(shù)組a中的第二個(gè)元素外里。
2.7.1? 一維數(shù)組
????一維數(shù)組是最簡(jiǎn)單的數(shù)組怎爵,其邏輯結(jié)構(gòu)是線性表。
????使用一維數(shù)組的一般過(guò)程是:一維數(shù)組的聲明盅蝗、創(chuàng)建和引用鳖链。
????1.一維數(shù)組的聲明
????聲明數(shù)組要定義數(shù)組的名稱、維數(shù)和數(shù)組元素的類型。聲明一維數(shù)組的格式有如下兩種形式:
????(1)數(shù)組類型??? 數(shù)組名[]芙委;
????(2)數(shù)組類型[]??? 數(shù)組名逞敷;
????例如: int? score[];或int[] score;????????? //聲明一個(gè)一維數(shù)組,數(shù)組名為score灌侣,元素類型為int型推捐。
????說(shuō)明:
????(1)數(shù)組類型可以是任意的Java類型,包括基本類型和引用類型侧啼;
????(2)數(shù)組名必須是合法的標(biāo)識(shí)符牛柒;
????(3)[]中不能有內(nèi)容。
????2.一維數(shù)組的創(chuàng)建
????創(chuàng)建數(shù)組的方式有如下兩種:
????(1)用運(yùn)算符new創(chuàng)建數(shù)組
????格式如下:數(shù)組名=new 數(shù)組類型[長(zhǎng)度]痊乾;
????例如:score = new int[3] 或int n=3;score = new int[n]皮壁;??
????聲明數(shù)組與創(chuàng)建數(shù)組兩個(gè)步驟可以一起完成,兩步合并如下:int??score[] = new int[3]哪审;
????(2)用靜態(tài)的初始化方法創(chuàng)建數(shù)組
????在定義數(shù)組的同時(shí)對(duì)數(shù)組元素分配空間并賦值闪彼,這種賦值方法,稱為對(duì)數(shù)組的靜態(tài)內(nèi)存分配方式协饲,也稱為對(duì)數(shù)組的靜態(tài)初始化。
????其格式如下:
????數(shù)據(jù)類型[] 數(shù)組名 ={初值1缴川,初值12茉稠,…,初值n}把夸;或數(shù)據(jù)類型[] 數(shù)組名 =new數(shù)據(jù)類型[]{初值1而线,初值12,…恋日,初值n}膀篮;
????例如:int?score[] ={7,6,5}; 或 int?score[] =new int []{7,6,5}岂膳;?
????3. length的使用
????對(duì)于創(chuàng)建好的數(shù)組誓竿,其元素個(gè)數(shù)稱為數(shù)組的長(zhǎng)度。對(duì)于一維數(shù)組岳颇,“數(shù)組名. length”的值就是數(shù)組的長(zhǎng)度喊崖。
????例如:score.length就表示數(shù)組score的長(zhǎng)度律杠。
????4.一維數(shù)組元素的引用
????數(shù)組元素的引用方式:
????數(shù)組名[下標(biāo)];
????例如:score[0]代表第1個(gè)元素毙死,score[1]代表第2個(gè)元素,score[n]代表第n+1個(gè)元素喻鳄。
????其中“下標(biāo)”可以是整型常量或表達(dá)式扼倘。例如int i=2; score[i-1]=5;
????Java數(shù)組元素的下標(biāo)從“0”開始,到“長(zhǎng)度-1”結(jié)束除呵。引用數(shù)組的元素時(shí)下標(biāo)不能超出范圍再菊,否則會(huì)產(chǎn)生“數(shù)組訪問越界異匙Υ”。
2.7.2 多維數(shù)組
????Java中袄简,多維數(shù)組被看作是數(shù)組的數(shù)組腥放,因此,多維數(shù)組的聲明和創(chuàng)建是通過(guò)對(duì)一維數(shù)組的嵌套來(lái)實(shí)現(xiàn)的绿语。即數(shù)組的元素又是數(shù)組的形式秃症。多維數(shù)組中最常用的是二維數(shù)組,下面以二維數(shù)組為例介紹多維數(shù)組的使用吕粹。
????1.二維數(shù)組的聲明
????數(shù)組元素類型? 數(shù)組名[][]; 或?? 數(shù)組元素類型[][]? 數(shù)組名;
????例如:int?a[][]; 或 double [][]b;
????2.二維數(shù)組的創(chuàng)建
????對(duì)于多維數(shù)組种柑,有兩種為數(shù)組分配內(nèi)存的方式:
????(1)直接為每一維分配內(nèi)存空間。
????格式如下:數(shù)組名= new 數(shù)據(jù)類型[行數(shù)][列數(shù)]匹耕;???
????例如:? a=new int[2][5]; //創(chuàng)建了一個(gè)包括兩行五列的二維數(shù)組a聚请。
????(2)從最高維開始,分別為每一維分配內(nèi)存空間稳其。
????例如:a= new int[2][]; //創(chuàng)建了一個(gè)包括兩行的二維數(shù)組a驶赏。
? ? ? ? ? ? ? a[0] =new int[3]; //二維數(shù)組a的第一行的長(zhǎng)度為3。
? ? ? ? ? ? ? a[1] =new int[5]; //二維數(shù)組a的第二行的長(zhǎng)度為5既鞠。
?????注意:Java語(yǔ)言中煤傍,由于把二維數(shù)組看作是數(shù)組的數(shù)組,數(shù)組空間不是連續(xù)分配的嘱蛋,所以不要求每一維的大小都相同蚯姆。
????3.二維數(shù)組的初始化
????其格式如下:
????數(shù)據(jù)類型? 數(shù)組名 [][]= {{第1行的初值},{第2行的初值}洒敏,…{第n行的初值}};
????舉例說(shuō)明:int a[][] ={ {5,6,7,8,9},{1,2,3} };
????上例中聲明了一個(gè)整型數(shù)組a龄恋,數(shù)組有2行,第一行有5個(gè)元素凶伙,第二行有3個(gè)元素郭毕。
????在二維數(shù)組中,想要獲取整個(gè)數(shù)組的行數(shù)函荣,則可以使用“數(shù)組名.length”來(lái)獲取铣卡。要想獲取某行元素的個(gè)數(shù),則可以使用“數(shù)組名[下標(biāo)].length”來(lái)獲取偏竟。
????4.二維數(shù)組元素的引用
????引用方式:數(shù)組名[行下標(biāo)][列下標(biāo)]煮落;
????例如:a[0][0]代表第1行第1列的元素,a[1][2]代表第2行第3列的元素踊谋。
????其中“行下標(biāo)”和“列下標(biāo)”可以是整型常量或表達(dá)式蝉仇,并且都是從“0”開始,到“長(zhǎng)度-1”結(jié)束。引用二維數(shù)組的元素時(shí)下標(biāo)不能超出范圍轿衔,否則會(huì)產(chǎn)生“數(shù)組訪問越界異吵良#”。