- Java語(yǔ)言程序設(shè)計(jì)與實(shí)現(xiàn)(微課版·第2版)
- 張桓 徐麗主編
- 5100字
- 2023-10-17 18:30:29
任務(wù)1.3 Java程序的入門案例

Java程序的入門案例
本任務(wù)講解Java程序的基本輸入/輸出的處理方式,主要包括Java程序的基本結(jié)構(gòu)、控制臺(tái)程序的輸入/輸出處理、圖形化程序的輸入/輸出處理、為今后實(shí)現(xiàn)Java程序與用戶的交互打下堅(jiān)實(shí)的基礎(chǔ)。
1.3.1 Java程序的基本結(jié)構(gòu)
Java程序,根據(jù)運(yùn)行界面是以圖形化要素為主,還是以文本字符為主,可分為兩種類型。
●GUI應(yīng)用程序(GUI Application)。
●控制臺(tái)程序(Console Application)。
認(rèn)識(shí)事物的正確方法應(yīng)該是從簡(jiǎn)單到復(fù)雜。因此,我們先從一個(gè)簡(jiǎn)單的實(shí)例入手,來(lái)逐步認(rèn)識(shí)這兩種Java程序的基本結(jié)構(gòu),為后面的程序開發(fā)建立良好的基礎(chǔ)。
計(jì)算機(jī)語(yǔ)言和其他語(yǔ)言一樣,都是為了描述事物而產(chǎn)生的,都有自身特定的語(yǔ)義、語(yǔ)法和語(yǔ)言結(jié)構(gòu)。在本任務(wù)中,為了能夠使大家更快進(jìn)入Java語(yǔ)言的程序世界,我們先不做過(guò)多語(yǔ)法方面的敘述,只簡(jiǎn)單介紹任務(wù)案例中所用到的基本語(yǔ)法知識(shí)。更多細(xì)節(jié)性內(nèi)容,將在本書后續(xù)相關(guān)位置中進(jìn)一步地講解。
1.Java程序的基本結(jié)構(gòu)概述
作為面向?qū)ο蟮木幊陶Z(yǔ)言,Java程序的核心要素是類。類是組成Java程序的最小結(jié)構(gòu)單位。一個(gè)Java源程序文件中可以包括一個(gè)或多個(gè)類的定義。定義類時(shí),必須使用關(guān)鍵字class。類名稱可以自己命名,但需符合基本的標(biāo)識(shí)符定義規(guī)則。標(biāo)識(shí)符定義規(guī)則是以字母、下畫線(_)、美元符號(hào)($)開頭,其后面是任意字母、數(shù)字(0~9)、下畫線和美元符號(hào)的字符序列。Java標(biāo)識(shí)符區(qū)分大小寫,對(duì)長(zhǎng)度沒有限制。同時(shí),用戶定義的標(biāo)識(shí)符不可以是Java的關(guān)鍵字。習(xí)慣上,類名稱每個(gè)單詞的首字母大寫。
例如,定義一個(gè)名稱為HelloWorld的類,其基本結(jié)構(gòu)如下。

Java程序的入口方法是main()方法。所謂入口方法是指在運(yùn)行Java程序時(shí)最先執(zhí)行的方法。一個(gè)Java程序必須有且只有一個(gè)main()方法。包含main()方法的類被稱為Java程序的主類,主類必須被定義為公共類。
在類關(guān)鍵字前面,可以附加一個(gè)類的訪問修飾符,表明該類的訪問控制級(jí)別。public修飾符使一個(gè)類成為公共類。
作為程序執(zhí)行的起點(diǎn),main()方法定義的基本格式必須遵循以下形式。

main()方法的定義分為方法聲明和方法體兩部分。方法聲明說(shuō)明了方法的屬性、返回值類型、名稱及參數(shù);方法體定義了main()方法的行為,功能語(yǔ)句必須放置在塊語(yǔ)句界定符之內(nèi)。以下是main()方法定義格式中關(guān)鍵字及參數(shù)的說(shuō)明。
●public關(guān)鍵字,表明main()方法為公共方法。由于應(yīng)用程序一旦執(zhí)行,系統(tǒng)進(jìn)程就要調(diào)用入口方法。因此,main()方法必須設(shè)置為公共的訪問屬性,以便讓外界對(duì)象都能夠訪問它。
●static關(guān)鍵字,表明main()方法為靜態(tài)方法。由于main()方法的調(diào)用先于主類對(duì)象的創(chuàng)建,因此static關(guān)鍵字對(duì)main()方法是必不可少的。
●void關(guān)鍵字,表明main()方法沒有返回值。main()方法屬于功能型方法,沒有返回值。
●String[]args是main()方法的參數(shù)定義,用來(lái)向入口方法傳遞命令行參數(shù)。其中,String是Java語(yǔ)言提供的字符串類的名稱,不能出現(xiàn)拼寫錯(cuò)誤,其中第一個(gè)字母必須大寫;args為數(shù)組名,可以被其他合法的標(biāo)識(shí)符名稱所代替。
2.基于JDK環(huán)境的Java程序開發(fā)
在JDK環(huán)境下,進(jìn)行一個(gè)簡(jiǎn)單的Java程序的開發(fā)可歸結(jié)為如下步驟。
①用任意文本編輯器創(chuàng)建Java源程序,以擴(kuò)展名為.java的文件進(jìn)行保存。
②使用JDK中的編譯命令將源程序文件編譯成擴(kuò)展名為.class的類(字節(jié)碼)文件。
③使用JDK中的運(yùn)行命令運(yùn)行Java程序。
下面編寫一個(gè)Java程序,本著由簡(jiǎn)入繁的原則,這個(gè)程序只實(shí)現(xiàn)控制臺(tái)程序中的輸出功能。程序的編寫、編譯和運(yùn)行,將利用記事本工具和JDK環(huán)境完成。
控制臺(tái)程序的主要特征如下。
●程序界面為非圖形化的文本字符風(fēng)格界面。
●程序運(yùn)行的邏輯由預(yù)定的流程來(lái)控制。
●人機(jī)交互以文本字符為主。
●輸入設(shè)備以鍵盤為主,輸出設(shè)備以顯示器為主。
【例1-1】編寫Java程序,在計(jì)算機(jī)顯示器上輸出一行文本信息:“歡迎訪問Java世界”。
①創(chuàng)建Java程序。選擇Windows系統(tǒng)的“開始”→“所有程序”→“附件”→“記事本”命令,打開記事本程序,在新建的文本文件中輸入如下程序代碼。

下面結(jié)合程序代碼進(jìn)行說(shuō)明。語(yǔ)句“//這是名稱為“HelloWorld.java”的簡(jiǎn)單輸出程序”為注釋行。在程序中插入注釋,有利于提高程序的可讀性,便于他人理解程序。在程序運(yùn)行時(shí),注釋行不起任何作用,Java程序編譯環(huán)境將忽略所有注釋內(nèi)容。以“//”開始的注釋,稱為單行注釋;以“/*……*/”開始和結(jié)束的注釋,稱為多行注釋,這種注釋能夠連續(xù)跨越多行文本,中間的所有行都為注釋內(nèi)容。語(yǔ)句“System.out.println("歡迎訪問Java世界");”為控制臺(tái)的輸出語(yǔ)句,用來(lái)實(shí)現(xiàn)信息字符串的輸出。控制臺(tái)程序引入了java.lang包中的System類。java.lang包是Java程序開發(fā)必不可少的一個(gè)基礎(chǔ)包,Java開發(fā)環(huán)境會(huì)自動(dòng)引入該包中所有的類。out為System類中的一個(gè)標(biāo)準(zhǔn)輸出流對(duì)象,默認(rèn)為顯示器。println()為out對(duì)象的一個(gè)方法,其功能是向輸出設(shè)備輸出該方法參數(shù)所包含的信息并自動(dòng)換行。println()方法如果沒有參數(shù),則只起到換行的作用。與之對(duì)應(yīng),System.out也提供了不換行的輸出方法print(),其功能是輸出參數(shù)的內(nèi)容后不自動(dòng)換行,而是將光標(biāo)定位在輸出內(nèi)容最后一個(gè)字符的后面。
②保存Java程序。在記事本程序中,選擇“文件”→“保存”命令保存程序文件。在彈出的“另存為”對(duì)話框中選擇文件保存的路徑,如圖1-26所示。
在“另存為”對(duì)話框的“保存類型”下拉列表中默認(rèn)選擇“文本文檔(*.txt)”選項(xiàng),需將其更換為“所有文件”選項(xiàng),如圖1-27所示。

圖1-26 “另存為”對(duì)話框

圖1-27 選擇文件類型
Java程序要求文件名必須與公共類名完全相同,包括字母的大小寫形式,其擴(kuò)展名為.java。在“另存為”對(duì)話框的“文件名”下拉列表框中輸入文件名HelloWorld.java,如圖1-28所示。保存后的源文件如圖1-29所示。

圖1-28 輸入文件名

圖1-29 保存后的源文件
③編譯Java程序。選擇Windows系統(tǒng)的“開始”→“運(yùn)行”命令,在打開的“運(yùn)行”對(duì)話框中輸入“cmd”命令(見圖1-30),進(jìn)入命令提示符窗口。在命令提示符窗口中,使用cd命令進(jìn)入源文件所在目錄,如圖1-31所示。編譯源程序的命令是javac,如圖1-32所示。注意,調(diào)用JDK中的javac命令,需要配置好JDK的環(huán)境變量。如果編譯成功,會(huì)產(chǎn)生一個(gè)和源程序同名的.class文件,如圖1-33所示。

圖1-30 “運(yùn)行”對(duì)話框

圖1-31 進(jìn)入源文件所在目錄

圖1-32 編譯源程序

圖1-33 編譯成功
如果程序沒有語(yǔ)法錯(cuò)誤,系統(tǒng)將自動(dòng)返回命令提示符狀態(tài)。如果程序有語(yǔ)法錯(cuò)誤,系統(tǒng)將顯示錯(cuò)誤信息。此時(shí)需檢查源碼,修正錯(cuò)誤并保存文件,再次執(zhí)行編譯命令,直至編譯通過(guò)。
④運(yùn)行Java程序。運(yùn)行編譯好的程序的命令是java,如圖1-34所示。注意,調(diào)用JDK中的java命令也需要配置好JDK的環(huán)境變量。例1-1程序運(yùn)行結(jié)果如圖1-35所示。
編寫和運(yùn)行Java程序看似很簡(jiǎn)單,但初學(xué)者在實(shí)際操作過(guò)程中會(huì)遇到很多意想不到的問題,如字母大小寫形式輸入不正確、單詞拼寫錯(cuò)誤等。因此,程序的編寫和調(diào)試需要開發(fā)人員有足夠的細(xì)心和耐心,這也是成為一名優(yōu)秀的程序員所需具備的良好素質(zhì)。

圖1-34 運(yùn)行程序

圖1-35 例1-1程序運(yùn)行結(jié)果
1.3.2 控制臺(tái)程序的輸入/輸出處理
前文簡(jiǎn)單介紹了Java控制臺(tái)程序的基本輸出方法。在實(shí)際的程序編寫過(guò)程中,除了輸出環(huán)節(jié)之外,還包括輸入和處理環(huán)節(jié)。下面給出了一個(gè)Java程序處理任務(wù)的通用結(jié)構(gòu):輸入數(shù)據(jù)、處理數(shù)據(jù)和輸出數(shù)據(jù)。

計(jì)算機(jī)系統(tǒng)通常都有默認(rèn)的標(biāo)準(zhǔn)輸入設(shè)備和標(biāo)準(zhǔn)輸出設(shè)備。對(duì)于一般的系統(tǒng),標(biāo)準(zhǔn)輸入設(shè)備通常是指鍵盤,標(biāo)準(zhǔn)輸出設(shè)備通常是指顯示器。Java控制臺(tái)程序從鍵盤輸入數(shù)據(jù),向顯示器輸出數(shù)據(jù),是十分常見的數(shù)據(jù)通信操作。為了方便程序員的開發(fā)工作,Java語(yǔ)言預(yù)先定義了兩個(gè)流對(duì)象,分別與系統(tǒng)的標(biāo)準(zhǔn)輸入設(shè)備和標(biāo)準(zhǔn)輸出設(shè)備相聯(lián)系,它們就是System.in和System.out,位于Java的語(yǔ)言類庫(kù)包java.lang中。Java語(yǔ)言提供了大量預(yù)先定義好的類和接口供程序員使用。Java語(yǔ)言把預(yù)先定義的類和接口按包的形式進(jìn)行組織管理。一個(gè)包就是一系列Java類和接口的集合。所有包組成了Java的類庫(kù),即Java API。Java API包分為核心包和擴(kuò)展包,分別為java和javax。
【例1-2】編寫Java程序,完成從鍵盤輸入兩個(gè)運(yùn)算數(shù)據(jù),計(jì)算兩數(shù)之和并輸出計(jì)算結(jié)果的功能。
在例1-1中利用了“記事本+JDK”的開發(fā)模式。對(duì)Java開發(fā)人員來(lái)說(shuō),這個(gè)開發(fā)模式中的過(guò)程過(guò)于煩瑣,也不便于程序的編寫和調(diào)試。在本書后續(xù)的內(nèi)容中,將統(tǒng)一使用集成開發(fā)環(huán)境Eclipse來(lái)完成Java程序的開發(fā)工作。
參照前文介紹的方法,在Eclipse中建立Java程序項(xiàng)目,輸入如下程序代碼。


結(jié)合程序代碼進(jìn)行分析,如下。
①輸入數(shù)據(jù)部分,對(duì)程序而言,最簡(jiǎn)單的輸入方式就是賦值語(yǔ)句。例如,參與運(yùn)算的數(shù)據(jù)為整數(shù)5和3,可利用賦值語(yǔ)句,將數(shù)據(jù)賦值給定義好的對(duì)應(yīng)程序變量。
②處理數(shù)據(jù)部分,利用加法運(yùn)算符和表達(dá)式完成計(jì)算求和的任務(wù),并將計(jì)算結(jié)果賦值給對(duì)應(yīng)程序變量。
③輸出結(jié)果部分,利用字符串連接運(yùn)算符,將字符串常量“計(jì)算的結(jié)果為:”和計(jì)算的結(jié)果值輸出至顯示器屏幕。
參照前文介紹的方法,運(yùn)行Java程序,結(jié)果如圖1-36所示。

圖1-36 例1-2程序運(yùn)行結(jié)果
從上面的程序中可以看出,如果參與運(yùn)算的數(shù)據(jù)發(fā)生變化,如變?yōu)?和12,則必須修改源程序代碼,并重新編譯。顯然,利用賦值語(yǔ)句提供運(yùn)算數(shù)據(jù)是很不靈活的方式。更為常見的輸入方式是在程序執(zhí)行后,由用戶從鍵盤輸入程序運(yùn)行所需的數(shù)據(jù),進(jìn)而實(shí)現(xiàn)更加靈活的用戶與程序之間的交互過(guò)程。
將MyTest.java源程序中的程序代碼進(jìn)行修改,以實(shí)現(xiàn)用戶從鍵盤輸入?yún)⑴c運(yùn)算的兩個(gè)數(shù)據(jù),程序完成計(jì)算兩數(shù)之和并顯示結(jié)果的功能,修改后的程序代碼如下。


結(jié)合程序代碼進(jìn)行分析,如下。
①以import關(guān)鍵字引導(dǎo)的語(yǔ)句稱為導(dǎo)入語(yǔ)句,作用是將java.io包中所有的類導(dǎo)入當(dāng)前程序,以便在程序中調(diào)用相關(guān)的類和方法。
②Java語(yǔ)言要求在控制臺(tái)進(jìn)行標(biāo)準(zhǔn)輸入時(shí),必須有異常處理。這里采用了異常拋出的throws語(yǔ)法格式,當(dāng)發(fā)生輸入異常時(shí),程序自動(dòng)拋出異常IOException,異常將由JVM自行處理。Java中的異常處理機(jī)制分為兩種:一種是捕獲異常,另一種是拋出異常。更詳細(xì)的內(nèi)容將在本書后續(xù)的異常處理部分進(jìn)行進(jìn)一步的說(shuō)明。
③System.in.read(t)方法用于獲得用戶從鍵盤輸入的數(shù)據(jù),存入字節(jié)數(shù)組t中。Java是強(qiáng)類型語(yǔ)言,要求先定義后使用。因此,之前已定義了字節(jié)數(shù)組byte t[]。數(shù)組在Java中是引用類型,需要通過(guò)new關(guān)鍵字完成內(nèi)存空間的分配。
④鍵盤輸入的數(shù)據(jù)保存在字節(jié)數(shù)組中,但最后的加法運(yùn)算需要數(shù)值類型的數(shù)據(jù)來(lái)參與完成。Java系統(tǒng)為整數(shù)(int)和實(shí)型小數(shù)(double)都提供了對(duì)應(yīng)的轉(zhuǎn)換方法來(lái)實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)換。Integer.parseInt(String)的作用是將參數(shù)由數(shù)字組成的字符串轉(zhuǎn)換為對(duì)應(yīng)的整數(shù)型數(shù)據(jù)。Double.parseDouble(String)的作用是將參數(shù)由數(shù)字和小數(shù)點(diǎn)組成的字符串轉(zhuǎn)換為對(duì)應(yīng)的實(shí)型數(shù)據(jù)。在存儲(chǔ)鍵盤輸入數(shù)據(jù)時(shí),如果字節(jié)數(shù)組中的存儲(chǔ)空間未全部使用,在將字節(jié)數(shù)組轉(zhuǎn)換為字符串時(shí),將用空格進(jìn)行填充。字符串中的空格是無(wú)法轉(zhuǎn)換為數(shù)值的,因此需要利用trim()方法去除掉多余的空格。Integer類和Double類都定義在java.lang包中,因此可以直接使用。
參照前文介紹的方法,運(yùn)行Java程序,結(jié)果如圖1-37所示。

圖1-37 改進(jìn)后程序的運(yùn)行結(jié)果
Java語(yǔ)言的系統(tǒng)類庫(kù)中對(duì)控制臺(tái)程序處理用戶鍵盤輸入還提供了其他的處理方案,比如可以使用封裝程度更高的java.util.Scanner類來(lái)完成獲得用戶鍵盤輸入數(shù)據(jù)這個(gè)任務(wù)。下面這段程序代碼是使用Scanner類來(lái)完成用戶從鍵盤輸入兩個(gè)數(shù)據(jù)(即一個(gè)整數(shù)和一個(gè)小數(shù)),然后計(jì)算兩數(shù)之和并顯示結(jié)果這個(gè)任務(wù)的,程序的運(yùn)行結(jié)果同圖1-37所示。


我們?cè)谔幚砜刂婆_(tái)程序鍵盤輸入任務(wù)時(shí),可以根據(jù)需求選擇上述兩個(gè)程序代碼段中的任意一個(gè)解決方案進(jìn)行使用,獲得的結(jié)果是相同的。
1.3.3 圖形化程序的輸入/輸出處理
上面的程序是使用控制臺(tái)方式來(lái)完成Java程序的輸入/輸出處理過(guò)程的。除此之外,在Java程序中還可以使用圖形化方式來(lái)完成與用戶的交互過(guò)程。
圖形化交互方式是當(dāng)今程序開發(fā)的主流方式,其主要特征如下。
●程序界面主要由圖形化的要素(如窗體、菜單、按鈕等)構(gòu)成。
●程序沒有預(yù)定好的運(yùn)行流程,而是由隨機(jī)事件來(lái)驅(qū)動(dòng)。
●人機(jī)交互由消息機(jī)制來(lái)支持。
●輸入設(shè)備以鼠標(biāo)、鍵盤為主,輸出設(shè)備以顯示器為主。
在下面的例子中,將使用Java語(yǔ)言中提供的對(duì)話框類JOptionPane來(lái)完成圖形化的輸入和輸出過(guò)程。更復(fù)雜的Java圖形化程序的開發(fā)實(shí)現(xiàn),將在本書后續(xù)相關(guān)部分進(jìn)行講解。
【例1-3】編寫Java程序,利用圖形用戶界面,完成從鍵盤輸入兩個(gè)運(yùn)算數(shù)據(jù),計(jì)算兩數(shù)之和并輸出結(jié)果的功能。
參照前文介紹的方法,在Eclipse中建立Java程序項(xiàng)目,輸入如下程序代碼:

結(jié)合程序代碼進(jìn)行分析,如下。
①javax.swing包中包含很多創(chuàng)建Java圖形用戶界面應(yīng)用程序所必需的類。第1行將JOptionPane類引入當(dāng)前程序,以便在程序中調(diào)用相關(guān)的方法,實(shí)現(xiàn)相關(guān)輸入/輸出功能。
②調(diào)用類JOptionPane的showInputDialog()方法顯示“輸入”對(duì)話框,如圖1-38和圖1-39所示。showInputDialog()方法的參數(shù)為提示信息,用以提示用戶輸入相關(guān)內(nèi)容。用戶在文本框中輸入相關(guān)字符信息后,單擊“確定”按鈕或按Enter鍵可以把文本框中的字符信息返回給Java程序。
③調(diào)用類JOptionPane的showMessageDialog()方法,打開“消息”對(duì)話框顯示結(jié)果信息,如圖1-40所示。這個(gè)方法包含兩個(gè)參數(shù),參數(shù)之間用逗號(hào)分隔。第一個(gè)參數(shù)表示對(duì)話框的父窗口對(duì)象,當(dāng)使用關(guān)鍵字null時(shí),表示對(duì)話框的父窗口不存在,對(duì)話框?qū)⒅苯语@示在計(jì)算機(jī)的顯示器屏幕上;第二個(gè)參數(shù)為對(duì)話框中要顯示的信息,類型為字符串。
參照前文介紹的方法,運(yùn)行Java程序。按照提示輸入第一個(gè)計(jì)算數(shù)據(jù)5,如圖1-38所示。按照提示輸入第二個(gè)計(jì)算數(shù)據(jù)3.5,如圖1-39所示。顯示計(jì)算結(jié)果,如圖1-40所示。

圖1-38 輸入第一個(gè)計(jì)算數(shù)據(jù)

圖1-39 輸入第二個(gè)計(jì)算數(shù)據(jù)

圖1-40 例1-3的計(jì)算結(jié)果
- 西南大學(xué)外國(guó)語(yǔ)學(xué)院211翻譯碩士英語(yǔ)[專業(yè)碩士]歷年考研真題及詳解
- 廈門大學(xué)241英語(yǔ)(二外)歷年考研真題及詳解
- 吳于廑《世界史·現(xiàn)代史編(下卷)》筆記和典型題(含考研真題)詳解
- 經(jīng)濟(jì)學(xué)原理(宏觀經(jīng)濟(jì)學(xué))考點(diǎn)歸納、習(xí)題詳解、考研真題
- 中西服裝發(fā)展史(第3版)
- 王利明《民法學(xué)》(第4版)筆記和考研真題詳解
- 大學(xué)生心理健康教育
- 電子商務(wù)理論與實(shí)務(wù)
- 常耀信《美國(guó)文學(xué)簡(jiǎn)史》(第3版)筆記和考研真題詳解
- 西北師范大學(xué)外語(yǔ)學(xué)院211翻譯碩士英語(yǔ)[專業(yè)碩士]歷年考研真題及詳解
- 設(shè)計(jì)構(gòu)成
- 劉豪興《農(nóng)村社會(huì)學(xué)》(第2版)筆記和課后習(xí)題詳解
- 基礎(chǔ)會(huì)計(jì)學(xué)(第2版)
- 工業(yè)水處理技術(shù)
- 大學(xué)生職業(yè)生涯規(guī)劃與就業(yè)競(jìng)爭(zhēng)