- Java語言GUI程序設(shè)計(jì)
- 趙滿來
- 4646字
- 2019-12-06 14:22:08
3.1 Java的關(guān)鍵字、數(shù)據(jù)類型、常量與變量
關(guān)鍵字、數(shù)據(jù)類型、常量與變量是Java語言最基本的幾個(gè)概念,也是組成Java程序的最小結(jié)構(gòu)元素。
3.1.1 關(guān)鍵字
Java語言中規(guī)定了一些單詞和字符串,作為Java程序中的命令詞或指示符,Java編譯器會(huì)根據(jù)它們產(chǎn)生有關(guān)操作代碼或程序結(jié)構(gòu),它們是Java語言的關(guān)鍵字。例如,class就是關(guān)鍵字,指示編譯器隨后所定義的一段代碼是一個(gè)Java類。
關(guān)鍵字只有50個(gè),大多數(shù)是英文單詞、單詞片段或單詞組合,列舉如下。

雖然true、false和null從技術(shù)上講并不是關(guān)鍵字,但是它們?cè)贘ava語言中也有特定的含義和用法。這三個(gè)詞匯及關(guān)鍵字在NetBeans IDE的源代碼視圖中都使用藍(lán)色顯示。此外,Java 9保留下畫線字符“_”。Java語言關(guān)鍵字及保留字不能用作類名、方法名、變量名和常量名。從Java 9開始,open、module、requires、transitive、exports、opens、to、uses、provides和with只是在模塊聲明中才是關(guān)鍵字。Java 10中var是保留字。
3.1.2 Java的基本數(shù)據(jù)類型
Java語言對(duì)程序處理的代表現(xiàn)實(shí)世界各種信息的數(shù)據(jù)也表示為高層次的概念——不同的數(shù)據(jù)類型。Java語言有兩類數(shù)據(jù)類型:基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。前面接觸到的類(class)就是Java語言中最主要的引用數(shù)據(jù)類型,此外還有后面要介紹的接口(interface)、枚舉和數(shù)組三種引用數(shù)據(jù)類型。
基本數(shù)據(jù)類型是Java語言定義的一些簡(jiǎn)單數(shù)據(jù)類型,是進(jìn)行Java程序設(shè)計(jì)時(shí)頻繁使用且結(jié)構(gòu)簡(jiǎn)單的類型,是用以完成程序中最“基本”最“主要”計(jì)算的“主”(Primitive)類型?;緮?shù)據(jù)類型的具體量不需要用new創(chuàng)建,一旦定義這種類型的量,就可以高效地存取,并可以直接參與運(yùn)算。
Java語言決定了每種基本數(shù)據(jù)類型的大小,這些大小并不隨著機(jī)器結(jié)構(gòu)的變化而變化?;緮?shù)據(jù)類型的大小不可更改是Java程序具有很強(qiáng)移植能力的原因之一。表3.1列出了Java語言基本數(shù)據(jù)類型。
表3.1 Java語言基本數(shù)據(jù)類型

表3.1中byte、short和void三種類型在Java 1.0版中是沒有的,到了Java 1.1才加入;boolean和void類型的數(shù)據(jù)沒有大小,其余類型的數(shù)據(jù)都有大小之分,因而稱為數(shù)值類型。數(shù)值類型的數(shù)據(jù)都是有符號(hào)(正負(fù)號(hào))的數(shù)。
每種基本數(shù)據(jù)類型都有自己的“封裝器”(wrapper)類,通過封裝器類提供了對(duì)應(yīng)類型數(shù)據(jù)的大量實(shí)用方法。自Java 5開始,基本數(shù)據(jù)類型的數(shù)據(jù)與其封裝器類對(duì)象可以自動(dòng)進(jìn)行相互轉(zhuǎn)換。
此外,Java 1.1增加了兩個(gè)類用于進(jìn)行高精度計(jì)算:BigInteger和BigDecimal,且兩者都沒有對(duì)應(yīng)的“主類型”。這兩個(gè)類都有自己的特殊方法,對(duì)應(yīng)于針對(duì)主類型執(zhí)行的操作。也就是說,能對(duì)int或float做的事情,對(duì)BigInteger和BigDecimal一樣可以做,但是必須使用方法調(diào)用,不能使用運(yùn)算符,且運(yùn)算速度會(huì)慢一些。BigInteger支持任意精度的整數(shù)。也就是說,我們可精確表示任意大小的整數(shù)值,同時(shí)在運(yùn)算過程中不會(huì)丟失任何信息。BigDecimal支持任意精度的定點(diǎn)數(shù)字。例如,可用它進(jìn)行精確的幣值計(jì)算。
3.1.3 常量
常量是存儲(chǔ)在程序中不能被修改的固定值,程序運(yùn)行過程中一直保持這個(gè)固定值不變。例如,計(jì)算圓的面積和周長(zhǎng)時(shí)要用到的圓周率的值就必須保持不變,圓周率在這個(gè)程序中就是常量。
對(duì)應(yīng)于Java的基本數(shù)據(jù)類型,有各種類型的常量。
1. 整型常量
整型常量就是程序中直接使用的一些整數(shù)。例如,計(jì)算圓周長(zhǎng)時(shí)半徑的2倍,其中,這個(gè)2就是整型常量。
程序中可以使用十進(jìn)制、八進(jìn)制和十六進(jìn)制整型常量,負(fù)整數(shù)前面加“?”號(hào)。十進(jìn)制常量用非0(零)的數(shù)值表示,如?12,360,32 768等,0也是十進(jìn)制整數(shù);八進(jìn)制常量以數(shù)字0開頭,后面跟著由0~7組成的數(shù)字,例如?0172,030等;十六進(jìn)制常量以0X或0x開頭,后面跟著由0~9、A~F(大小寫相同,如a和A都是表示十進(jìn)制值10)組成的數(shù)字,例如-0x17f,0X3B0等。Java 7還允許增加0B或0b前綴來表示二進(jìn)制整型常量,如0b10101111。
整型常量對(duì)應(yīng)于基本數(shù)據(jù)類型的int和long類型。int型整型常量在內(nèi)存中占用4字節(jié)。如果希望使用占用8字節(jié)的整數(shù),可以使用對(duì)應(yīng)于long類型的長(zhǎng)整型常量,在數(shù)字后面加字母L即可,例如,1L將占用64位存儲(chǔ)空間。小寫l也可以表示長(zhǎng)整型常量,但與數(shù)字1不易分辨,一般還是使用大寫L。
2. 浮點(diǎn)型常量
帶有小數(shù)的表示數(shù)值的常量即是浮點(diǎn)型常量,對(duì)應(yīng)于float和double基本數(shù)據(jù)類型。
float類型的常量在數(shù)值后加字母f或F,且這個(gè)字符不能省略。例如,3.1416F、1.0F、0.0F等。這種常量在內(nèi)存中使用4字節(jié)存放。
double類型的常量在數(shù)值后加字母d或D,但這個(gè)字符可以省略,且不帶后綴字母的浮點(diǎn)型常量默認(rèn)就是double類型。例如,0.0D,2.1d、3.1416等。double類型的常量在內(nèi)存中使用8字節(jié)存放。
浮點(diǎn)型常量也可以采用科學(xué)計(jì)數(shù)法,其中,10的整數(shù)次方采用“e整數(shù)或E整數(shù)”形式。例如,4.12e?2表示4.12 x 10?2,8.927E6D表示8.927 x 10+6。
3. 布爾型常量
布爾型常量也稱為邏輯型常量,表示邏輯斷言的真假結(jié)果。表示斷言結(jié)果為真的布爾型常量值是true,表示斷言結(jié)果為假的布爾型常量值是false。
在Java GUI程序的可視化設(shè)計(jì)中,常用布爾常量表示可以轉(zhuǎn)換的兩種狀態(tài)。例如,對(duì)于文本字段組件的editable屬性,設(shè)置為true(屬性值列的復(fù)選框中打?qū)矗┍硎居脩艨梢跃庉嬈渲械奈淖郑O(shè)置為false(屬性值列的復(fù)選框中沒有打?qū)矗┍硎居脩舨荒芫庉嬈渲械奈淖?,像前面的?jiǎn)單加法計(jì)算器程序?qū)︼@示相加結(jié)果文本字段組件的editable屬性值列取消打勾,則生成語句“jTextFieldResult.setEditable(false);”,給setEditable方法傳遞邏輯常量值false;對(duì)于窗體組件的resizable屬性,設(shè)置為true表示用戶可以改變窗口大小,設(shè)置為false表示用戶不能改變窗口大?。粚?duì)于按鈕組件的enabled屬性,設(shè)置為true表示可以對(duì)用戶的單擊動(dòng)作進(jìn)行響應(yīng),設(shè)置為false表示不會(huì)響應(yīng)用戶的單擊動(dòng)作。
4. 字符型常量
字符型常量是表示單個(gè)英文字母、一個(gè)漢字或其他語言的單個(gè)字符,也就是Unicode字符集中的一個(gè)字符,用單引號(hào)“’”引起來。例如,‘C’、‘8’、‘言’、‘▲’等。
Unicode字符集是由Unicode Consortium機(jī)構(gòu)(一個(gè)非盈利機(jī)構(gòu))制定的字符編碼系統(tǒng),為世界上每種語言的每個(gè)字符都設(shè)定了統(tǒng)一且唯一的二進(jìn)制編碼,以滿足跨平臺(tái)、跨語言進(jìn)行文本轉(zhuǎn)換、處理的需求。Unicode支持Unicode-8、Unicode-16和Unicode-32三種編碼方案,都能夠表示超過65 000個(gè)不同字符的編碼。Java語言中的字符型常量還可以采用單引號(hào)引起來的Unicode編碼表示,如‘u0061’,‘u005a’等。在有些IDE中輸入了漢字之后可能看到這種表示形式。
還有一類具有特殊含義且很難用一般方式表示的字符,稱為轉(zhuǎn)義字符,如換行、回車、退格字符等。Java語言明確規(guī)定了轉(zhuǎn)義字符(見表3.2),它們都是在單引號(hào)內(nèi)以反斜線“\”開頭的表示形式。
表3.2 常用的轉(zhuǎn)義字符

5. 字符串常量
字符串常量是用雙引號(hào)(")引起來的字符序列,在Java GUI程序的可視化設(shè)計(jì)過程中使用十分頻繁。例如,2.5節(jié)介紹的組件的text屬性、窗體的title屬性等目前都是使用字符串常量設(shè)置的,如簡(jiǎn)單計(jì)算器項(xiàng)目的源程序中的語句“jLabel1.setText("第一個(gè)數(shù):");”等給setText方法傳遞字符串常量"第一個(gè)數(shù):"。
在字符串常量中可以使用轉(zhuǎn)義字符,例如Java語句“jLabel1.setText("歡迎使用用戶登錄程序,\n輸入正確的用戶名和密碼就可以進(jìn)入系統(tǒng)。");”將在字符‘\n’處換行分兩行顯示文本。如果看不到兩行內(nèi)容,選擇該標(biāo)簽組件后,光標(biāo)放到下邊框中間調(diào)控柄上向下拖動(dòng),增加高度即可。
字符串常量的實(shí)際類型是java.lang.String類,有大量的實(shí)用方法可以對(duì)字符串進(jìn)行各種操作,將在以后章節(jié)詳細(xì)介紹。
Java GUI程序中經(jīng)常會(huì)通過文本字段等組件返回字符串,并且需要將字符串轉(zhuǎn)換為其他類型的數(shù)值。這種轉(zhuǎn)換使用目標(biāo)類型包裝器類的parseXxx方法完成,這些方法主要是:
Integer.parseInt(String); Long.parseLong (String); Float.parseFloat(String); Double.parseDouble(String);
例如,圖2.12簡(jiǎn)單的加法計(jì)算器程序第120和121行的語句:
double num1 = Double.parseDouble(jTextFieldNum1.getText()); double num2 = Double.parseDouble(jTextFieldNum2.getText());
首先調(diào)用組件的getText()方法得到文本字段組件中用戶輸入的字符串,然后使用double類型的包裝器類Double的parseDouble方法轉(zhuǎn)換為double類型。
6. 常量標(biāo)識(shí)符
可以為常量定義一個(gè)標(biāo)識(shí)符,以方便對(duì)其使用。使用Java語言關(guān)鍵字final進(jìn)行定義,格式是:
final 類型 標(biāo)識(shí)符=常量值;
其中,類型可以是上述任何一種基本類型;標(biāo)識(shí)符命名規(guī)則與類名的相同,習(xí)慣上全部字母使用大寫字母;常量值則受類型限定。以下是幾個(gè)例子:
final double PI=3.1416D; final int MAX=1024; final boolean SELECTED=true;
使用常量標(biāo)識(shí)符代替常量值可以使程序更容易閱讀和維護(hù),例如,在有關(guān)圓的程序中見到PI就容易想到是圓周率π,如果需要精確到小數(shù)點(diǎn)后6位,則只需修改常量標(biāo)識(shí)符PI(final double PI=3.141593D;)即可,不必在每個(gè)用到π的語句中都進(jìn)行修改。
3.1.4 變量
通常,開發(fā)程序的目的是為某一類或某一種問題給出一個(gè)通用的使用計(jì)算機(jī)解決的方案,即便是最簡(jiǎn)單的程序基本也是如此。例如,2.1節(jié)設(shè)計(jì)的簡(jiǎn)單加法計(jì)算器程序,其中的加數(shù)和被加數(shù)可以是用戶輸入的任何合法值,能夠計(jì)算無數(shù)對(duì)數(shù)值的和。顯然,其中的加數(shù)和被加數(shù)是變化的量,而不是常量。這種在程序運(yùn)行過程中值可以變化的量,在Java語言程序中稱為變量。
1. 變量聲明
Java程序中的變量使用之前必須進(jìn)行聲明。聲明變量的格式如下:
(1)類型變量名1,變量名2,…;或者:
(2)類型變量名1=初始值,變量名2=初始值,…;
其中,類型規(guī)定變量可以存放和使用的數(shù)據(jù)的類型,可以是基本類型或引用類型。變量名符合標(biāo)識(shí)符命名規(guī)則;習(xí)慣上字母使用小寫,如果用多個(gè)單詞組合,第一個(gè)單詞首字母小寫,其余單詞首字母大寫??梢栽诼暶髯兞康耐瑫r(shí)指定變量初值,初值類型應(yīng)該與變量聲明的類型相同或相容(如整數(shù)值與聲明為double類型的變量相容)。
例如,以下是幾個(gè)變量聲明語句:
int age; float salaryOfMonth; java.lang.String name;
2. 變量初始化
使用格式(2)聲明變量,則在變量聲明的同時(shí)進(jìn)行了初始化,變量獲得了一個(gè)值。
Java語言規(guī)定,變量使用之前必須初始化。對(duì)于類中屬性變量(也稱為域變量、域、字段變量、字段),如果定義時(shí)沒有初始化,則編譯器會(huì)采用默認(rèn)值初始化它們。其中,boolean類型默認(rèn)初值為false、char為'\u0000'、int為0、long為0L、float為0.0f、double為0.0d、引用類型變量默認(rèn)初值為null。
例如,圖2.12簡(jiǎn)單的加法計(jì)算器程序第120~122行的語句:
double num1 = Double.parseDouble(jTextFieldNum1.getText()); double num2 = Double.parseDouble(jTextFieldNum2.getText()); double result = num1+num2;
分別聲明了三個(gè)double類型變量num1、num2和result,且num1被初始化為接收用戶輸入的第一個(gè)數(shù)的文本框中的內(nèi)容轉(zhuǎn)換為double型的浮點(diǎn)數(shù),num2進(jìn)行類似初始化,num3初始化為num1與num2之和。顯然,一個(gè)變量可以使用另外一些變量進(jìn)行初始化。又如:
java.lang.String name="Java語言GUI程序設(shè)計(jì)" ;
使用字符串常量初始化了String類型的name變量。
Java程序中變量的初值保存到變量值改變時(shí)為止。
3. 變量的理解
變量是程序中用來存儲(chǔ)數(shù)據(jù)的。實(shí)際上,程序中的數(shù)據(jù)在運(yùn)行過程中是存儲(chǔ)在內(nèi)存中的,因此程序中的變量必然與內(nèi)存相聯(lián)系。對(duì)于基本數(shù)據(jù)類型,變量就是為存儲(chǔ)數(shù)據(jù)的那塊內(nèi)存取的名字,使用這個(gè)變量就是使用那塊內(nèi)存。對(duì)于類等引用數(shù)據(jù)類型,變量是存放對(duì)象引用的內(nèi)存塊名字;在使用new操作符創(chuàng)建類的一個(gè)對(duì)象時(shí),會(huì)為該對(duì)象分配一塊內(nèi)存區(qū)域,同時(shí)返回該對(duì)象所使用的這塊內(nèi)存區(qū)的引用(可以理解為地址),而這個(gè)引用值可以存放到用該類定義的引用變量中。
3.1.5 使用JShell練習(xí)
在JDK 9發(fā)布之前編寫一個(gè)Java程序,必須使用一個(gè)編輯-編譯-執(zhí)行循環(huán),無法簡(jiǎn)單地直接執(zhí)行Java語句,使初學(xué)者上手困難,也使調(diào)試Java程序部分代碼的工作顯得有些煩瑣。JDK 9中引入了一種交互式訪問Java編程語言的工具和API——JShell(Java Shell),為初學(xué)者提供了一種快速探索Java編程語言的方法;給有經(jīng)驗(yàn)的開發(fā)人員提供了一種快速的方式來查看代碼段的結(jié)果,而無須編譯和運(yùn)行整個(gè)程序;它還提供了一種使用增量方法快速開發(fā)原型的方法,即添加一段代碼,獲取即時(shí)反饋,并添加另一個(gè)代碼片段,直到原型完成。
JShell位于JDK 9安裝目錄下的bin子目錄中,在Windows的命令提示符窗口中輸入JShell(如果出現(xiàn)錯(cuò)誤,將當(dāng)前目錄轉(zhuǎn)到其所在的目錄),回車之后如果出現(xiàn),就啟動(dòng)了JShell進(jìn)入到Java的交互式執(zhí)行環(huán)境中。如果在NetBeans IDE中,單擊“工具”|
菜單項(xiàng),則會(huì)在“編輯”窗口中新增一個(gè)
選項(xiàng)卡,“輸出”窗口中出現(xiàn)
面板(見圖3.1)。

圖3.1 NetBeans IDE中JShell窗口
在JShell下直接輸入Java語句(但不用輸入語句后的分號(hào))就可以得到執(zhí)行結(jié)果,例如,輸入4e-2回車之后JShell直接顯示結(jié)果$1 ==> 0.04(見圖3.2)。如果輸入的語句有錯(cuò)誤,則會(huì)顯示錯(cuò)誤和警告信息(見圖3.2),從而幫助初學(xué)者理解和糾偏。要退出JShell,只需在之后輸入“/exit”命令即可。在JShell中執(zhí)行的Java語句稱為程序片,/list命令可列出所有片段。

圖3.2 Windows命令行窗口中的JShell界面
- Learning Selenium Testing Tools with Python
- Visual FoxPro程序設(shè)計(jì)教程
- 我的第一本算法書
- Vue.js 3.0源碼解析(微課視頻版)
- 21天學(xué)通C++(第6版)
- 重學(xué)Java設(shè)計(jì)模式
- 學(xué)Python也可以這么有趣
- TypeScript項(xiàng)目開發(fā)實(shí)戰(zhàn)
- Python Web數(shù)據(jù)分析可視化:基于Django框架的開發(fā)實(shí)戰(zhàn)
- Windows內(nèi)核編程
- C#應(yīng)用程序設(shè)計(jì)教程
- OpenGL Data Visualization Cookbook
- 30天學(xué)通C#項(xiàng)目案例開發(fā)
- Software-Defined Networking with OpenFlow(Second Edition)
- VMware vSphere 5.5 Cookbook