![教學(xué)課件-Java程序設(shè)計(jì)(第二版)陳圣國_第1頁](http://file4.renrendoc.com/view10/M02/11/18/wKhkGWeg_fiAPIpVAACop7hbMFE034.jpg)
![教學(xué)課件-Java程序設(shè)計(jì)(第二版)陳圣國_第2頁](http://file4.renrendoc.com/view10/M02/11/18/wKhkGWeg_fiAPIpVAACop7hbMFE0342.jpg)
![教學(xué)課件-Java程序設(shè)計(jì)(第二版)陳圣國_第3頁](http://file4.renrendoc.com/view10/M02/11/18/wKhkGWeg_fiAPIpVAACop7hbMFE0343.jpg)
![教學(xué)課件-Java程序設(shè)計(jì)(第二版)陳圣國_第4頁](http://file4.renrendoc.com/view10/M02/11/18/wKhkGWeg_fiAPIpVAACop7hbMFE0344.jpg)
![教學(xué)課件-Java程序設(shè)計(jì)(第二版)陳圣國_第5頁](http://file4.renrendoc.com/view10/M02/11/18/wKhkGWeg_fiAPIpVAACop7hbMFE0345.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第1章Java語言概述
1.1計(jì)算機(jī)與程序設(shè)計(jì)語言1.2Java的發(fā)展歷史1.3跨平臺的Java1.4面向?qū)ο蟮腏ava1.5Java程序的開發(fā)環(huán)境1.6最簡單的Java程序 1.1計(jì)算機(jī)與程序設(shè)計(jì)語言
1946年2月15日,第一臺通用電子數(shù)字計(jì)算機(jī)ENIAC在美國研制成功。它由1.8萬個(gè)電子管組成,重達(dá)30多噸。ENIAC無論功能還是運(yùn)算速度都無法跟今天的家用電腦相比,但它的出現(xiàn)卻開啟了一個(gè)新的時(shí)代。
計(jì)算機(jī)作為一種通用工具,與人類歷史上發(fā)明的各種工具相比,一個(gè)突出的不同就是可以編程控制,通過執(zhí)行不同的程序,計(jì)算機(jī)可以實(shí)現(xiàn)不同的功能。程序是計(jì)算機(jī)能夠執(zhí)行的指令序列,程序員可以使用不同的程序設(shè)計(jì)語言來編寫程序,其中有一些語言計(jì)算機(jī)能夠直接識別,而另一些程序設(shè)計(jì)語言需要經(jīng)過翻譯才能為計(jì)算機(jī)所執(zhí)行。程序設(shè)計(jì)語言的發(fā)展,經(jīng)歷了從機(jī)器語言、匯編語言到高級語言的歷程。
1)機(jī)器語言
計(jì)算機(jī)所使用的是由“0”和“1”組成的二進(jìn)制數(shù),計(jì)算機(jī)發(fā)明之初,人們只能使用一串串由“0”和“1”組成的指令序列來編寫程序,這種語言稱為機(jī)器語言。機(jī)器語言難以使用,程序調(diào)試修改十分困難。而且,由于不同型號計(jì)算機(jī)的指令系統(tǒng)往往不同,在一臺計(jì)算機(jī)上執(zhí)行的程序,要想在另一臺計(jì)算機(jī)上執(zhí)行,必須另編程序,造成了重復(fù)工作。
2)匯編語言
針對機(jī)器語言的缺點(diǎn),人們進(jìn)行了一種有益的改進(jìn),采用一些類似于英語單詞的縮寫代替計(jì)算機(jī)的各種二進(jìn)制指令,如“ADD”代表加法,“MOV”代表數(shù)據(jù)傳遞等等。這樣一來,程序變得易于理解和維護(hù)。這些縮寫便構(gòu)成了基本的匯編語言。用匯編語言編寫的程序不能直接由計(jì)算機(jī)執(zhí)行,需要一個(gè)翻譯程序?qū)⑦@些符號翻譯成二進(jìn)制的機(jī)器語言,這種翻譯程序被稱為匯編程序。
3)高級語言
雖然利用匯編語言編寫程序的效率遠(yuǎn)高于其他語言,但是對于一項(xiàng)簡單的任務(wù),仍需要大量的指令才能完成,所以使用匯編語言編程調(diào)試來實(shí)現(xiàn)一個(gè)復(fù)雜應(yīng)用依然是一件很痛苦的事情。
“痛”則思變,高級語言應(yīng)運(yùn)而生。1954年,第一個(gè)完全脫離機(jī)器硬件的高級語言——FORTRAN問世了,它采用接近于數(shù)學(xué)語言或人的自然語言的語法形式,同時(shí)又不依賴于計(jì)算機(jī)硬件,編程效率和程序的通用性得到很大的提高。50多年來,已出現(xiàn)的高級語言有幾百種,影響較大的也有幾十種。高級語言程序本身不能直接為計(jì)算機(jī)所執(zhí)行,必須由專門的編譯程序?qū)⒏呒壵Z言編寫的程序轉(zhuǎn)換為一個(gè)或多個(gè)包含了機(jī)器語言的文件。高級程序經(jīng)過編譯后,鏈接程序?qū)藱C(jī)器語言的文件鏈接成一個(gè)計(jì)算機(jī)可以運(yùn)行的程序,采用這種方式工作的高級語言稱為編譯型語言。
高級語言的另一種工作方式是由解釋器直接執(zhí)行高級語言程序,與編譯型方式相比,解釋器方式的執(zhí)行效率比較低。 1.2Java的發(fā)展歷史
1995年5月,Sun公司在“SunWorld95”大會上推出了Java語言。Java語言作為一種網(wǎng)絡(luò)編程語言,隨著國際互聯(lián)網(wǎng)的飛速發(fā)展,很快得到了廣泛的支持和實(shí)際的應(yīng)用。
其實(shí),Java語言最初并不是為互聯(lián)網(wǎng)設(shè)計(jì)的,它來自于Sun公司的一個(gè)叫Green的項(xiàng)目,目的是為家用消費(fèi)電子產(chǎn)品開發(fā)一個(gè)分布式代碼系統(tǒng),這樣,用戶可以把E-mail發(fā)給電冰箱、電視機(jī)等家用電器,對它們進(jìn)行控制和信息交流。該項(xiàng)目小組開始準(zhǔn)備采用C++,但他們很快意識到C++?太復(fù)雜,安全性差,后來基于C++?開發(fā)了一種新的語言——Oak(Java的前身)。
Oak是一種用于網(wǎng)絡(luò)的精巧而安全的語言,Sun公司曾以此投標(biāo)一個(gè)交互式電視項(xiàng)目,但未獲成功,使得Oak幾乎夭折。MarkArdreesen開發(fā)的Mosaic和Netscape啟發(fā)了Oak項(xiàng)目組成員,他們用Java編制了HotJava瀏覽器,得到了Sun公司首席執(zhí)行官ScottMcNealy的支持,Java得以進(jìn)軍互聯(lián)網(wǎng)。為此Sun公司引入了一個(gè)稱之為Applet的Java程序創(chuàng)建機(jī)制,用以在Web頁上執(zhí)行并通過Web瀏覽器進(jìn)行顯示,使得原本靜態(tài)的網(wǎng)頁“活躍起來”。
Java的取名也有一段趣聞。有一天,幾位Oak項(xiàng)目組成員正在討論給這個(gè)新的語言取什么名字,當(dāng)時(shí)他們正在咖啡館喝著Java咖啡,有一個(gè)人靈機(jī)一動說,就叫Java怎么樣,結(jié)果得到了其他人的贊同,于是,Java這個(gè)名字就這樣傳開了。
目前通常所說的Java有三層含義:先是指一種編程語言;其次是一種開發(fā)環(huán)境;再者是一種應(yīng)用環(huán)境。如今的Java語言不再只是將Web網(wǎng)頁“活躍起來”的一門語言,它已成為許多機(jī)構(gòu)編程時(shí)的首選語言。
Java作為新一代面向?qū)ο蟪绦蛟O(shè)計(jì)語言,特別適合于Internet應(yīng)用程序開發(fā),它的平臺無關(guān)性使Java作為軟件開發(fā)的一種革命性技術(shù)地位得到確立。計(jì)算機(jī)產(chǎn)業(yè)的許多大公司購買了Java的許可證,包括IBM、Microsoft、Apple、Oracle等。Java開發(fā)工具軟件日漸豐富,如Borland公司的JBuilder、Sun公司的JavaWorkshop、IBM公司的VisualAge、Microsoft公司的VisualJ++等。數(shù)據(jù)庫廠商如Sysbase、Versant、Oracle都在開發(fā)CGI接口,支持HTML和Java。
Sun公司于1996年年初發(fā)布了Java的第一個(gè)版本,1998年召開的JavaOne大會上發(fā)布了Java1.2版。1999年,Sun公司發(fā)布了以Java2平臺為核心的J2SE、J2EE和J2ME三大平臺?!?J2SE(Java2Platform,StandardEdition)
J2SE含有基本的Java2SDK工具和運(yùn)行時(shí)API,開發(fā)者可以用它們來編寫、部署和運(yùn)行Java應(yīng)用程序和Applet(在Web瀏覽器如IE中運(yùn)行的Java小程序)。
●?J2EE(Java2Platform,EnterpriseEdition)
J2EE建立在J2SE的基礎(chǔ)上,它是JSP(JavaServerPage)、Servlet、EJB、JTS(JavaTransactionService)、Javamail以及JMS(JavaMessageService)等多項(xiàng)技術(shù)的混合體,主要用于開發(fā)分布式的、服務(wù)器端的多層結(jié)構(gòu)的應(yīng)用系統(tǒng),如電子商務(wù)網(wǎng)站。●?J2ME(Java2Platform,MicroEdition)
J2ME主要用于開發(fā)電子產(chǎn)品,如移動電話、數(shù)字機(jī)頂盒、汽車導(dǎo)航系統(tǒng)等。
本書介紹的內(nèi)容基本都屬于J2SE的范疇,僅第9章涉及J2EE的部分內(nèi)容。
2002年2月,Sun公司發(fā)布了J2SE1.4版,該版本為目前應(yīng)用最為廣泛的Java版本。2004年10月J2EE1.5版發(fā)布,該版引入了一些新的特性,Sun將其正式稱為Java5,相應(yīng)的三個(gè)平臺分別改稱為JavaSE、JavaEE、JavaME。目前,Sun公司網(wǎng)站已正式發(fā)布了Java6。
本書內(nèi)容主要基于Java2,少量程序使用了Java5的一些新特性。 1.3跨平臺的Java
與常見的編譯型高級程序設(shè)計(jì)語言不同,Java語言編譯器產(chǎn)生的二進(jìn)制代碼是一種與具體機(jī)器指令無關(guān)的指令集合,只要有Java運(yùn)行時(shí)系統(tǒng)存在,編譯后的代碼便可在許多處理器上運(yùn)行。Java運(yùn)行時(shí)系統(tǒng)被稱為Java虛擬機(jī)(JavaVirtualMachine,JVM),Java編譯器產(chǎn)生的代碼由Java虛擬機(jī)解釋執(zhí)行,如圖1.1所示。由此,Java語言實(shí)現(xiàn)了平臺獨(dú)立性——一次編寫,隨處運(yùn)行(Writeonce,Runanywhere)。圖1.1Java的平臺無關(guān)性
Java編譯器產(chǎn)生的二進(jìn)制代碼稱為字節(jié)碼(ByteCode),字節(jié)碼與任何具體計(jì)算機(jī)結(jié)構(gòu)都無關(guān)。實(shí)際上,這并不是一個(gè)新想法,多年前的UCSDPascal系統(tǒng)就在一個(gè)商業(yè)產(chǎn)品中做了同樣的努力,甚至比這更早,NiklausWirth的Pascal的最初實(shí)現(xiàn)也使用了同樣的方法。
不過這種技術(shù)存在著一個(gè)很大的缺點(diǎn),即與通常高級語言采用的編譯為機(jī)器指令相比,其程序執(zhí)行效率相差很多。為此,Java系統(tǒng)采用了一些獨(dú)特的方法來改善其執(zhí)行效率。例如,采用即時(shí)編譯技術(shù)(JustInTime,JIT),在程序執(zhí)行前將字節(jié)碼轉(zhuǎn)換為本地指令,避免了對某些指令段的重復(fù)解釋;精心設(shè)計(jì)Java字節(jié)碼,使其既可容易地在任何機(jī)器上解釋,又可容易地被快速翻譯為本地機(jī)器代碼。
Java系統(tǒng)的基本數(shù)據(jù)類型不依賴于具體實(shí)現(xiàn),在任何硬件平臺上均保持一致。而通常的高級語言數(shù)據(jù)類型是與平臺相關(guān)的,如C語言在Windows3.1中整數(shù)(int)為16位,在Windows95中整數(shù)為32位,在DECAlpha中整數(shù)為64位,在Intel486中整數(shù)為32位。
這種與體系結(jié)構(gòu)無關(guān)的特性使得Java應(yīng)用程序可以在配備了Java虛擬機(jī)的任何計(jì)算機(jī)系統(tǒng)上運(yùn)行,這成為Java應(yīng)用軟件便于移植的良好基礎(chǔ)。 1.4面向?qū)ο蟮腏ava
20世紀(jì)60年代,軟件開發(fā)技術(shù)發(fā)展緩慢,隨著硬件技術(shù)的發(fā)展,出現(xiàn)了“軟件危機(jī)”。在軟件開發(fā)過程中,所做的工作常常落后于預(yù)先的計(jì)劃,成本大幅提高,超過預(yù)算,而得到的最終產(chǎn)品卻并不可靠,不能滿足實(shí)際的需要。
為了解決“軟件危機(jī)”,20世紀(jì)60年代末70年代初人們提出了結(jié)構(gòu)化程序設(shè)計(jì)的思想,按照結(jié)構(gòu)化程序設(shè)計(jì)的原則和方法,設(shè)計(jì)出結(jié)構(gòu)清晰、容易理解、容易修改、容易驗(yàn)證的程序。結(jié)構(gòu)化程序設(shè)計(jì)方法采用自頂向下、逐步細(xì)化的方法將復(fù)雜的過程分解成由三種基本控制結(jié)構(gòu)(順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu))構(gòu)成的程序。到了20世紀(jì)70年代末期,隨著計(jì)算機(jī)科學(xué)的發(fā)展和應(yīng)用領(lǐng)域的不斷擴(kuò)大,對計(jì)算機(jī)技術(shù)的要求越來越高。結(jié)構(gòu)化程序設(shè)計(jì)語言和結(jié)構(gòu)化分析與設(shè)計(jì)已無法滿足用戶需求的變化,面向?qū)ο蠹夹g(shù)開始嶄露頭角。
面向?qū)ο蟪绦蛟O(shè)計(jì)方法起源于Simula67語言,它本身雖因比較難學(xué)、難用而未能廣泛流行,但在它的影響下所產(chǎn)生的面向?qū)ο蠹夹g(shù)卻迅速傳播開來,并在全世界掀起了一股OO(ObjectOriented)熱潮,至今盛行不衰。面向?qū)ο蟪绦蛟O(shè)計(jì)在軟件開發(fā)領(lǐng)域引起了大的變革,極大地提高了軟件開發(fā)的效率,為解決軟件危機(jī)帶來了一線光明。結(jié)構(gòu)化程序設(shè)計(jì)方法將要實(shí)現(xiàn)的系統(tǒng)描述為一個(gè)過程,而一些復(fù)雜的系統(tǒng)如Windows的窗口系統(tǒng)、一個(gè)大型機(jī)構(gòu)的管理信息系統(tǒng)等,我們則很難將其運(yùn)作規(guī)律描述成一個(gè)單一的過程。面向?qū)ο蟮幕舅枷胝J(rèn)為系統(tǒng)是由若干對象構(gòu)成的,每個(gè)對象都有各自的內(nèi)部狀態(tài)和運(yùn)動規(guī)律,不同對象之間通過消息傳送相互作用和聯(lián)系。使用面向?qū)ο蟮姆椒?,我們可以通過分別描述系統(tǒng)中的每個(gè)對象的特性和這些對象之間的聯(lián)系來描述整個(gè)系統(tǒng)。
Java語言的設(shè)計(jì)完全是面向?qū)ο蟮?。在Java語言編寫的程序中,使用類class來描述一組對象的共同特性,類可以看成是創(chuàng)建對象的藍(lán)圖,對象之間通過方法調(diào)用來實(shí)現(xiàn)相互間的聯(lián)系。
Java語言程序的基本單位是類class,一個(gè)完整的Java語言程序一般由多個(gè)類構(gòu)成。Java語言運(yùn)行環(huán)境還提供了功能強(qiáng)大的類庫(或稱為應(yīng)用程序接口API),可以幫助應(yīng)用程序很容易地實(shí)現(xiàn)一些復(fù)雜的功能。
1.5Java程序的開發(fā)環(huán)境
1.5.1Java程序的開發(fā)過程
Java程序的開發(fā)過程與其他高級語言相似。首先編寫程序,然后采用文本編輯軟件輸入源程序,再使用Java語言編譯器進(jìn)行編譯,生成字節(jié)碼文件。
與C/C++?等其他高級語言不同的是,一個(gè)Java程序由若干個(gè)字節(jié)碼文件構(gòu)成,Java虛擬機(jī)直接執(zhí)行字節(jié)碼文件,沒有連接生成獨(dú)立的可執(zhí)行文件的過程。Java類庫代碼也不像C/C++?的函數(shù)庫或類庫那樣需要連接到執(zhí)行文件中,用戶要執(zhí)行Java程序必須安裝相應(yīng)的Java運(yùn)行環(huán)境(JavaRuntimeEnvironment,JRE),這些類庫在安裝Java運(yùn)行環(huán)境時(shí)已安裝在用戶的系統(tǒng)中了。1.5.2Java開發(fā)工具
Java語言最基本的開發(fā)環(huán)境是由Sun公司免費(fèi)提供的JDK(JavaDevelopmentKit),它的開發(fā)環(huán)境比較簡單,使用命令行編譯源代碼,編譯調(diào)試程序都不是很方便。
目前很多廠商推出了Java語言的集成開發(fā)工具,這些開發(fā)工具集源代碼的編輯、編譯及調(diào)試于一體,而且可以幫助程序員生成應(yīng)用程序框架,減少程序員的重復(fù)勞動,提高軟件開發(fā)的效率。常見的集成開發(fā)工具有Microsoft公司的VisualJ++、Borland公司的JBuilder、IBM公司的VisualAgeforJava和Eclipse等。由于Microsoft公司與Sun公司的Java標(biāo)準(zhǔn)之爭,VisualJ++后續(xù)版本已不再支持Java的一些新特性,也不再作為Java應(yīng)用的開發(fā)工具。大部分的Java集成開發(fā)環(huán)境均需要JDK的支持,某些廠商的集成開發(fā)環(huán)境在安裝過程中會自動安裝特定版本的JDK,并允許用戶自行安裝其他版本的JDK,以便用戶能夠使用Java語言新版本的一些特性。
目前,Sun公司網(wǎng)站提供JDK6以及J2SE5.0、J2SE1.4.2等版本的下載,用戶可根據(jù)需要選擇下載。從J2SE1.4開始,Sun公司提供了帶集成開發(fā)環(huán)境的JDK版本,其所使用的集成開發(fā)環(huán)境為NetBeansIDE。Sun公司于2000年6月創(chuàng)建了NetBeans開放源碼計(jì)劃,并繼續(xù)充當(dāng)該計(jì)劃的主贊助商。NetBeansIDE是一個(gè)開發(fā)環(huán)境,也即一個(gè)供程序員編寫、編譯、調(diào)試和部署程序的工具。它是用Java編寫的,但卻可以支持任何編程語言。另外也有巨大數(shù)量的模塊來擴(kuò)展NetBeansIDE,它是一個(gè)免費(fèi)產(chǎn)品,不限制其使用形式。
JBuilder是Borland公司提供的跨平臺Java開發(fā)環(huán)境,可以用于構(gòu)建符合工業(yè)標(biāo)準(zhǔn)的Java應(yīng)用系統(tǒng),開發(fā)各類應(yīng)用程序。雙向、可視化設(shè)計(jì)工具使得用戶可以快速地構(gòu)建和部署各種J2EE應(yīng)用程序。JBuilder功能強(qiáng)大,易于使用,本書將其作為實(shí)驗(yàn)環(huán)境推薦給讀者使用。 1.6最簡單的Java程序
Java程序主要有Java應(yīng)用程序(JavaApplication)和Applet兩種。下面給出兩個(gè)最簡單的Java程序,從中可以了解Java語言程序的基本結(jié)構(gòu)。
1.6.1最簡單的Java應(yīng)用程序
【程序1.1】
最簡單的Java應(yīng)用程序。
/*HelloWorldApp.java*/
classHelloWorldApp{
/***Traditional“HelloWorld!”program.
*/
publicstaticvoidmain(Stringargs[]){
//Writetostdout.
System.out.println(“HelloWorld!”);
}
}
程序1.1是一個(gè)JavaApplication,它的功能很簡單,向標(biāo)準(zhǔn)輸出設(shè)備輸出字符串“HelloWorld!”,運(yùn)行該程序可以在顯示器上看到該字符串。從程序1.1中首先看到的是注釋語句,編譯器在編譯時(shí)將跳過該部分內(nèi)容。Java語言的注釋語句有兩種基本形式:
(1)以/*開始,以*/結(jié)束。其中的所有字符在編譯時(shí)被忽略。
(2)行注釋。以//開始到本行結(jié)束。
程序1.1定義了一個(gè)類HelloWorldApp,其中定義了一個(gè)方法main。有關(guān)類和方法的概念本書第3章將詳細(xì)描述。
main方法是程序的入口點(diǎn),Java應(yīng)用程序從main方法開始執(zhí)行,main方法執(zhí)行結(jié)束則該程序退出運(yùn)行。因此,如果一個(gè)程序由多個(gè)類構(gòu)成,則只能有一個(gè)類有main方法。程序1.1使用了JavaAPI完成字符串的輸出功能,System.out為標(biāo)準(zhǔn)輸出流對象,用于訪問操作系統(tǒng)的標(biāo)準(zhǔn)輸出設(shè)備,通常情況下標(biāo)準(zhǔn)輸出設(shè)備為顯示設(shè)備。println為其方法成員,其功能為輸出括號中的字符串或其他類型的數(shù)據(jù)并換行。類似的還有方法print,它與println的區(qū)別是輸出數(shù)據(jù)后不換行。
程序1.1的結(jié)構(gòu)比較簡單,只定義了一個(gè)類,在后面的章節(jié)中讀者將會看到包含多個(gè)類的程序。1.6.2最簡單的JavaApplet
JavaApplet的執(zhí)行環(huán)境與Java應(yīng)用程序不同,Applet不是獨(dú)立的應(yīng)用程序,它是嵌入在HTML文件中使用的,程序被放置在Web服務(wù)器上,下載到客戶端后,由Web瀏覽器如微軟的InternetExplorer執(zhí)行。
【程序1.2】
最簡單的JavaApplet。
importjava.applet.Applet;
importjava.awt.Graphics;
publicclassHelloWorldextendsApplet{
publicvoidpaint(Graphicsg)
{
g.drawString(“你好,Java世界!”,2,20);
}
}
程序1.2是一個(gè)最簡單的JavaApplet。下面是一個(gè)發(fā)布程序1.2的HTML文件的內(nèi)容,請注意其中斜黑體的內(nèi)容。
<html>
<head><title>我的第一個(gè)JavaApplet程序</title></head>
<body>
<p><appletcode=HelloWorld.classwidth=300height=200></applet>
</body>
</html>將上述HTML文件和程序1.2編譯得到的字節(jié)碼文件HelloWorld.class放在Web服務(wù)器的同一個(gè)目錄下,當(dāng)使用Web瀏覽器瀏覽該HTML文件時(shí),瀏覽器將下載HelloWorld.class,然后執(zhí)行。
因?yàn)閳?zhí)行環(huán)境與JavaApplication不同,Applet的程序結(jié)構(gòu)與JavaApplication也有所不同,當(dāng)然它們有一點(diǎn)是共同的,即都是由若干個(gè)類組成的。程序1.2的第1行表示該Applet程序需要引用JavaAPI類庫提供的Applet類。學(xué)習(xí)過C語言的讀者應(yīng)注意import與C語言中的?#inlcude類似,但Java編譯器的處理方法不同于C語言,它并不將該文件讀入,而且它引用的是已經(jīng)編譯過的Java字節(jié)碼文件。在編譯階段,Java編譯器將從該字節(jié)碼文件中讀取有關(guān)Applet類的信息,檢驗(yàn)程序中對Applet的使用是否正確。程序1.2編譯生成的HelloWorld.class文件中也不包含Applet類的代碼。第2行的作用與第1行類似,由于程序中用java.awt.Graphics類的功能來輸出字符串,因此引入該類。
第3行開始定義HelloWorld類,注意后面的extendsApplet,這是Java類繼承語法。一個(gè)Applet程序可以由多個(gè)類構(gòu)成,其中只有一個(gè)類繼承自Applet類,這是Applet程序的入口。
Applet的執(zhí)行與JavaApplication不同,從程序中看不到像Application中main方法那樣的一個(gè)明顯的執(zhí)行流程。實(shí)際上這些都已經(jīng)在Applet中實(shí)現(xiàn)了,Applet在執(zhí)行時(shí)一直等待用戶的輸入或其他的一些事件(如關(guān)閉瀏覽器),根據(jù)不同的事件執(zhí)行不同的功能。在編寫Applet時(shí)需要做的就是提供各種事件的處理程序,例如程序1.2類HelloWorld中定義了方法paint,該方法當(dāng)Applet需要繪制界面時(shí)被調(diào)用。
Applet類中定義了paint方法的調(diào)用形式,它有一個(gè)Graphics類的對象作參數(shù),通過它可以在Applet的界面上繪制圖形和文字。程序1.2調(diào)用drawString方法來輸出一個(gè)字符串:
g.drawString(“你好,Java世界!”,2,20);
drawString方法有三個(gè)參數(shù):第一個(gè)是要輸出的字符串;第二、三個(gè)是輸出位置,分別為x、y軸的值。
圖1.2是程序1.2在IE6.0中執(zhí)行的畫面。圖1.2Applet的運(yùn)行
實(shí)訓(xùn)一安裝與熟悉Java開發(fā)工具
A.
JDK開發(fā)工具
一、實(shí)訓(xùn)目的
1.學(xué)習(xí)從網(wǎng)絡(luò)上下載JDK開發(fā)工具與幫助文檔。
2.學(xué)習(xí)安裝JDK開發(fā)工具及其文檔。
3.掌握J(rèn)avaAppllcation程序的開發(fā)過程并編寫一個(gè)JavaApplication程序。
4.掌握J(rèn)avaApplet程序的開發(fā)過程并編寫一個(gè)JavaApplet程序。
5.學(xué)習(xí)編寫簡單的HTML文件以配合JavaApplet的使用。
6.學(xué)習(xí)使用JDK的幫助文檔。
7.給出JavaApplet、Application例子,調(diào)試程序、修改程序功能。
二、實(shí)訓(xùn)內(nèi)容
1.從網(wǎng)絡(luò)上下載JDK開發(fā)工具與幫助文檔。
(1)訪問,瀏覽JDK下載頁面,JDK5的下載頁面為/javase/downloads/index_jdk5.jsp,如圖1.3所示。也可以訪問其他國內(nèi)外的免費(fèi)FTP站點(diǎn)或從CD-ROM光盤中下載得到JDK開發(fā)工具。圖1.3JDK5下載頁面
(2)選擇適合的軟件版本,點(diǎn)擊,進(jìn)入圖1.4所示的頁面,選擇其中的“AcceptLicenseAgreement”接受許可協(xié)議。圖1.4接受許可協(xié)議
(3)在圖1.5所示的頁面中選擇適合用戶的JDK版本,點(diǎn)擊下載該JDK。在Windows環(huán)境下IE將彈出如圖1.6所示的對話框,點(diǎn)擊按鈕,然后選擇保存的文件目錄,IE會將文件下載到指定的位置。圖1.5選擇適合用戶平臺的JDK版本圖1.6文件下載保存提示
(4)按同樣的方法下載JDK的幫助文檔。下載鏈接參考圖1.3。
2.安裝JDK開發(fā)工具與幫助文檔。
(1)運(yùn)行下載的可執(zhí)行文件,安裝JDK。
(2)為方便運(yùn)行Java編譯器,設(shè)置環(huán)境變量Path。對于Windows95/98,修改計(jì)算機(jī)的C:\AUTOEXEC.BAT文件時(shí)應(yīng)在文件末增加一句:
setPath=%Path%;C:\jdk1.5.0_09\bin
這里,C:\jdk1.5.0_09為JDK的安裝目錄。對于WindowsXP及Windows2000等平臺,在控制面板中選擇“系統(tǒng)”圖標(biāo),在彈出的“系統(tǒng)屬性”對話框中單擊“高級”標(biāo)簽,再在彈出的對話框中單擊按鈕,如圖1.7所示。然后在圖1.8中的“系統(tǒng)變量”列表中選擇“Path”,單擊按鈕,在出現(xiàn)的對話框中仿照上面的set命令將C:\jdk1.5.0_09\bin加入到path環(huán)境變量中。圖1.7“系統(tǒng)屬性”對話框圖1.8環(huán)境變量設(shè)置
(3)使用解壓縮工具Winzip解壓JDK幫助文檔jdk-1_5_0-doc.zip文件,該壓縮文件包含一組以HTML文件形式組織的幫助文件,把它們保存在本地的一個(gè)目錄下,例如保存在C:\jdk1.5.0_09\document\目錄下。
3.編寫并運(yùn)行一個(gè)JavaApplicadon程序。
(1)打開一個(gè)純文本編輯器,例如Windows記事本NotePad.exe或DOS下的edit.exe。
(2)鍵入1.2節(jié)中的程序1.1。
(3)檢查無誤后(注意大小寫準(zhǔn)確)把文件保存起來,命名為HelloWorldApp.java,可以創(chuàng)建一個(gè)目錄,如C:\Java\prog1_1,保存這個(gè)文件。
(4)進(jìn)入DOS命令行方式,用cd命令進(jìn)入(3)中創(chuàng)建的目錄,運(yùn)行Java編譯器:
javacHelloWorldApp.java
(5)如果JDK安裝正確、程序輸入無誤且保存的文件名正確,運(yùn)行編譯器將沒有任何輸出;否則會輸出錯(cuò)誤信息,一般的錯(cuò)誤都是由于拼寫失誤引起的。運(yùn)行dir命令查看是否已在相同目錄下生成一個(gè)名為HelloWorldApp.class的文件。
(6)利用Java解釋器運(yùn)行這個(gè)JavaApplication程序,并查看運(yùn)行結(jié)果:
javaHelloWorldApp
4.編寫并編譯一個(gè)JavaApplet程序。
(1)打開一個(gè)純文本編輯器。
(2)鍵入1.2節(jié)中的程序1.2。
(3)創(chuàng)建一個(gè)目錄保存文件,命名為HelloWorld.java。
(4)進(jìn)入DOS命令行方式,在保存有上述Java文件的目錄下運(yùn)行Java編譯器:
javacHelloWorld.java
(5)如果程序輸入無誤且保存的文件名正確,運(yùn)行編譯器將沒有任何輸出;否則會輸出錯(cuò)誤信息。運(yùn)行dir命令查看是否已在相同目錄下生成一個(gè)名為HelloWorld.class的文件。
5.編寫配合JavaApplet的HTML文件。
(1)打開一個(gè)純文本編輯器。
(2)鍵入如下的HTML程序:
<html>
<head><title>我的第一個(gè)JavaApplet程序</title></head>
<body>
<p><appletcode=HelloWorld.classwidth=300height=200></applet>
</body>
</html>
(3)檢查無誤后把文件命名為Page1.htm,保存在與文件HelloWorld.java同一目錄下。
(4)直接雙擊這個(gè)HTML文件的圖標(biāo),或者打開Web瀏覽器(例如IE),在地址欄中鍵入這個(gè)HTML文件的全路徑名,查看Applet在瀏覽器中的運(yùn)行結(jié)果。
(5)利用模擬的Applet運(yùn)行環(huán)境解釋運(yùn)行這個(gè)JavaApplet程序并觀察運(yùn)行結(jié)果。進(jìn)入DOS環(huán)境,在程序所在目錄下運(yùn)行下面的命令:
appletviewerPage1.htm
6.使用JDK幫助文檔。
在Windows中打開JDK文檔目錄,雙擊indexhtml文件,或者在Web瀏覽器的地址欄中輸入這個(gè)文件的路徑名,打開這個(gè)文件對應(yīng)的網(wǎng)頁,查閱相關(guān)內(nèi)容。B.
JBuilder2006集成開發(fā)環(huán)境
一、實(shí)訓(xùn)目的
1.學(xué)習(xí)安裝JBuilder2006集成開發(fā)環(huán)境。
2.掌握集成開發(fā)環(huán)境(IDE)的概念,了解并學(xué)習(xí)使用JBuilder2006開發(fā)環(huán)境的基本構(gòu)成和功能。
3.了解“項(xiàng)目”的概念,掌握利用JBuilder2006開發(fā)并編譯運(yùn)行、修改及調(diào)試JavaApplication和JavaApplet的過程。
二、實(shí)訓(xùn)內(nèi)容
1.安裝JBuilder2006。
(1)將JBuilder2006光盤放入光盤驅(qū)動器,安裝程序會自動運(yùn)行,顯示如圖1.9所示的畫面。然后單擊BorlandJBuilder2006Enterprise啟動安裝進(jìn)程,稍候片刻,顯示如圖1.10所示的畫面。
(2)在圖1.10所示的畫面中單擊Next按鈕,在接下來的幾個(gè)畫面中分別接受Borland的許可協(xié)議、選擇安裝類型(選擇Full即可)、安裝目錄,最后開始復(fù)制文件,等待一段時(shí)間后安裝完畢。圖1.9安裝程序啟動畫面圖1.10JBuilder安裝簡介
(3)第一次啟動JBuilder2006出現(xiàn)注冊向?qū)?,如圖1.11所示,可按照要求提供注冊碼或注冊文件。圖1.11注冊向?qū)?/p>
2.編寫并運(yùn)行一個(gè)JavaApplication程序。
(1)啟動JBuilder,選擇File菜單的NewProject子菜單(如圖1.12所示),創(chuàng)建一個(gè)新項(xiàng)目。圖1.12創(chuàng)建新項(xiàng)目
(2)在圖1.13中輸入項(xiàng)目名(Name),存放項(xiàng)目文件的文件夾(Directory),單擊Finish按鈕。圖1.13輸入項(xiàng)目名和存放文件夾
(3)在Project窗口<ProjectSource>處右擊選擇新建文件,如圖1.14所示。圖1.14新建文件
(4)選擇文件類型(java),輸入文件名,如圖1.15所示。圖1.15選擇文件類型和文件名
(5)在源程序編輯區(qū)輸入源程序,如圖1.16所示。圖1.16輸入源程序
(6)編譯源程序。選擇Project菜單的子菜單MakeProject,如果編譯失敗將顯示錯(cuò)誤信息,按照提示修改程序后重新編譯即可。
(7)運(yùn)行程序。選擇Run菜單的子菜單RunProject可運(yùn)行程序。首次運(yùn)行需先進(jìn)行配置,指定項(xiàng)目類型和主類名稱后才能運(yùn)行。配置窗口如圖1.17所示,類型Type指定為Application,主類(MainClass)可點(diǎn)擊按鈕選擇,如圖1.18所示。運(yùn)行結(jié)果可以在Messages窗口中看到,如圖1.19所示。圖1.17運(yùn)行配置圖1.18選擇主類圖1.19運(yùn)行結(jié)果
(8)運(yùn)行完畢,可以關(guān)閉項(xiàng)目,創(chuàng)建新項(xiàng)目調(diào)試下一個(gè)程序。選擇File菜單的CloseProjects子菜單即可,如圖1.20所示。圖1.20關(guān)閉項(xiàng)目
3.編寫并調(diào)試一個(gè)JavaApplet程序。
(1)創(chuàng)建項(xiàng)目,輸入源程序,方法與創(chuàng)建JavaApplication相同。
(2)運(yùn)行程序。在運(yùn)行配置中選擇類型為Applet(見圖1.21),其余與Application相似,這里不再詳述。Applet運(yùn)行畫面如圖1.22所示。圖1.21項(xiàng)目類型選擇為Applet圖1.22Applet運(yùn)行畫面第2章Java語言基礎(chǔ)
2.1案例:課程成績統(tǒng)計(jì)程序2.2變量和常量2.3數(shù)據(jù)類型2.4運(yùn)算符與表達(dá)式2.5案例的初步實(shí)現(xiàn)2.6流程控制語句2.7案例的完整實(shí)現(xiàn)2.8程序舉例 2.1案例:課程成績統(tǒng)計(jì)程序
下面首先看一個(gè)案例,本章將圍繞該案例介紹所需掌握的知識。該案例是一個(gè)課程成績統(tǒng)計(jì)程序,所要求實(shí)現(xiàn)的功能如下:
某班級有若干名學(xué)生,教師在課程考試結(jié)束后,需要統(tǒng)計(jì)班級某門課的最高分、最低分及平均成績?,F(xiàn)要求編寫一個(gè)Java應(yīng)用程序,允許教師輸入學(xué)生人數(shù)和所有學(xué)生該門課的成績,然后輸出最高分、最低分及平均成績。
完成后程序運(yùn)行情況如圖2.1所示,輸入若干學(xué)生成績后輸出最高分、最低分和平均成績。圖2.1課程成績統(tǒng)計(jì)程序 2.2變?量?和?常?量
2.2.1變量的定義
本章案例要求從鍵盤接收用戶輸入的學(xué)生成績,學(xué)生成績輸入后必須存放到計(jì)算機(jī)內(nèi)部的存儲器中。在Java程序中可以通過變量的定義來聲明所需要的存儲空間,例如案例中的學(xué)生成績是一個(gè)0~100之間的整數(shù),在程序中可以采用下面的語句定義一個(gè)整型的變量來存儲一個(gè)學(xué)生的成績:
intstudentGrade;
這里定義了一個(gè)名為studentGrade的變量,其類型為int。一個(gè)變量的類型決定了它在存儲空間中所占據(jù)的字節(jié)數(shù)和表示形式,變量的值在程序執(zhí)行的過程中可以改變。變量名在程序設(shè)計(jì)語言中稱為標(biāo)識符,標(biāo)識符除了可以表示變量外,還可以用來表示后面將要介紹的類、方法、標(biāo)號及其他各種用戶自定義對象。
Java語言的標(biāo)識符可以由字母、數(shù)字、下劃線或$符號組成,以字母、下劃線或$符開頭,區(qū)分大小寫,對標(biāo)識符的長度沒有特別限定。
Java語言的基本符號采用Unicode字符集,而不是ASCII字符集,以方便支持多語種。Unicode字符集中,字母不僅限于英語,還包括其他語言的字符,包括漢字。Unicode字符集采用16位編碼,一個(gè)字符在內(nèi)存中占用兩個(gè)字節(jié)。雖然現(xiàn)有的多數(shù)程序使用ASCII編碼,但在運(yùn)行前都要被轉(zhuǎn)換為Unicode字符。
Unicode字符集中的字母包括英文字母以及序號大于十六進(jìn)制數(shù)0xC0的字符,因此可以使用漢字作標(biāo)識符。下面都是合法的Java語言標(biāo)識符:
變量1,$Str,_var1,myVar另外,與大多數(shù)程序設(shè)計(jì)語言一樣,Java語言也有一些系統(tǒng)保留的標(biāo)識符,稱為關(guān)鍵字或保留字。
目前Java語言用到的關(guān)鍵字有:abstract、boolean、break、byte、byvalue、case、catch、char、class、continue、default、do、double、else、extends、final、finally、float、for、if、implements、import、inner、instanceof、int、interface、long、native、new、null、package、private、protected、public、return、short、static、super、switch、synchronized、this、throw、throws、transient、try、var、volatile、void、while。
cast、const、future、generic、goto、operator、outer、rest等也被列為系統(tǒng)保留字,但目前的Java規(guī)范并未用到。另外,在VisualJ++中true、false也作為關(guān)鍵字使用。
Java語言中變量必須定義后才能使用,每個(gè)變量有各自不同的作用范圍,稱為作用域。Java語言中的變量定義有兩種形式:一種是類的成員,本書將在第3章介紹;另一種就是局部變量,指在方法或復(fù)合語句(由大括號括起的若干語句)中定義的變量,分別在所定義的方法或復(fù)合語句中起作用。圖2.2是一個(gè)簡單的例子。圖2.2變量的作用域變量定義的時(shí)候可以賦初值,例如:
intk=20;
定義一個(gè)整型變量k,其初值為20。
2.2.2常量的定義
有些數(shù)據(jù)在程序執(zhí)行過程中其值不可改變,例如數(shù)學(xué)常量π。Java語言中的常量分為兩種:一種稱為直接量,其字面代表了該常量的值;另一種是用標(biāo)識符表示的常量。
直接常量根據(jù)其類型的不同書寫的方法也不同,例如123、-780為兩個(gè)int型常量。使用標(biāo)識符定義常量,其形式與變量的定義類似,只是需要用關(guān)鍵字final修飾,表示該數(shù)據(jù)在執(zhí)行過程中不可修改。Java語言編譯器會做相應(yīng)的檢查,如果發(fā)現(xiàn)程序中有改變該常量值的語句,編譯器將指出錯(cuò)誤。下面的語句定義了一個(gè)int型常量:
finalintCOUNT=5;
該語句定義了一個(gè)名為COUNT的常量,并初始化其值為5。由于在程序執(zhí)行過程中常量的值不可改變,因此必須在定義時(shí)初始化。
有些教材將用這種方法定義的常量稱為final變量或只讀變量。 2.3數(shù)據(jù)類型
Java語言支持的數(shù)據(jù)類型可以分為簡單數(shù)據(jù)類型和復(fù)合數(shù)據(jù)類型兩類。簡單數(shù)據(jù)類型包括整型、實(shí)型、字符型和布爾型;復(fù)合類型包括類與接口。本章首先介紹簡單數(shù)據(jù)類型。
2.3.1整型
整型用來表示數(shù)學(xué)中的整數(shù)。Java語言的整型分為byte、short、int、long四種,它們占用的內(nèi)存大小及表示范圍見表2.1。表2.1Java整型數(shù)據(jù)字節(jié)數(shù)和取值范圍
Java語言中的整型常量可以采用十進(jìn)制、八進(jìn)制和十六進(jìn)制表示。十進(jìn)制表示方法最為常見,如123、-780。
在書寫十進(jìn)制常量時(shí),注意不能以0為打頭字符,因?yàn)镴ava語言中以0開始的整型常量被當(dāng)作八進(jìn)制處理,如017、-0234都是八進(jìn)制表示的整型常量。八進(jìn)制數(shù)據(jù)使用的數(shù)字字符只能是0~7,不能出現(xiàn)8、9。
十六進(jìn)制整型常量以0x或0X開始,如0x123、0x1AB。十六進(jìn)制數(shù)據(jù)使用的數(shù)字字符是0~9和A~F(或a~f)。
整型常量中,byte、short、int表示方法相同,而長整型(long)常量必須在數(shù)后加字母L或l,表示該數(shù)是長整型,如0L、306l。下面是整型變量定義的例子:
byteb; //指定變量b為byte型
shorts; //指定變量s為short型
inti=10; //指定變量i為int型,初始化為10
longl; //指定變量l為long型
也可以在一條語句中定義多個(gè)變量,變量名之間以逗號隔開,例如:
intx,y;2.3.2實(shí)型
Java語言的實(shí)型數(shù)據(jù)分為單精度實(shí)數(shù)(float)和雙精度實(shí)數(shù)(double)兩種,分別為32位和64位IEEE754-1985標(biāo)準(zhǔn)浮點(diǎn)數(shù)。這兩種類型所占內(nèi)存的字節(jié)數(shù)和表示范圍見表2.2,雙精度類型比單精度類型具有更高的精度和更大的表示范圍。表2.2實(shí)型數(shù)據(jù)字節(jié)數(shù)及范圍數(shù)據(jù)
Java的實(shí)型常量有兩種表示形式:
(1)十進(jìn)制數(shù)形式。由數(shù)字和小數(shù)點(diǎn)組成,且必須有小數(shù)點(diǎn),如0.123、.123、123.、123.0。
(2)科學(xué)計(jì)數(shù)法形式。如123e3或123E3,其中e或E之前必須有數(shù)字,且e或E后面的指數(shù)必須為整數(shù)。
實(shí)型常量缺省為double型,如果希望聲明某個(gè)實(shí)型常量為float型,則要在數(shù)字后加f或F,如12.3F,它在機(jī)器中占4個(gè)字節(jié),精度較低。實(shí)型變量的定義方法與整型變量的定義方法相同,如:
floatf=2.3f; //指定變量f為float型
doubled,yp=2.3; //指定變量d為double型
Java語言對數(shù)據(jù)類型的檢查很嚴(yán)格,不允許用雙精度的常量初始化單精度變量,因此下面的變量定義語句是錯(cuò)誤的:
floatf=1.23;2.3.3字符型
Java語言使用Unicode字符集,因此其字符型數(shù)據(jù)在內(nèi)存中占用2個(gè)字節(jié),共16位,其范圍為0~65535。
字符常量是用單引號括起來的一個(gè)字符,如‘a(chǎn)’、‘A’。對于一些特殊字符,如單引號?‘,由于該符號已用做字符常量的起始符號,因此不直接將它放在一對單引號中,而是通過轉(zhuǎn)義符字符來表示。
轉(zhuǎn)義字符以反斜杠(\)開頭,其后的字符轉(zhuǎn)變?yōu)榱硗獾暮x。表2.3列出了Java中的轉(zhuǎn)義字符。表2.3Java中的轉(zhuǎn)義字符字符型的類型標(biāo)識符為char,下面是定義字符型變量的例子:
charc=‘a(chǎn)’; //指定變量c為char型,且賦初值為‘a(chǎn)’
字符類型在計(jì)算機(jī)內(nèi)部的表示形式與整型數(shù)據(jù)類似,但Java語言不允許將字符型變量用作整型,但可與整型進(jìn)行混合運(yùn)算。例如:
inti=‘A’;
是非法的,而下面的語句是合法的:
inti=3;
i=i+‘0’;
Java語言用雙引號(")括起一串字符表示字符串常量,如"Thisisastring.\n"。但與前面介紹的幾種類型不同,字符串常量是作為字符串類String的一個(gè)對象來處理的。有關(guān)String的使用本書將在第3章講述。2.3.4布爾型
布爾型用以表示邏輯判斷的結(jié)果,只有兩個(gè)值:true和false。Java語言中關(guān)系運(yùn)算和邏輯運(yùn)算的結(jié)果均為布爾型。
布爾型變量用關(guān)鍵字boolean定義,例如:
booleanb=true; //定義b為布爾型變量,且初值為true
布爾型數(shù)據(jù)不可作為整型數(shù)據(jù)使用,不能等同于0和1。Java語言中應(yīng)該使用布爾型數(shù)據(jù)的地方,不可使用其他類型的數(shù)據(jù)。
true和false雖然不是關(guān)鍵字,但在編寫程序時(shí)應(yīng)將其作為關(guān)鍵字處理,以免在閱讀程序時(shí)引起誤解。 2.4運(yùn)算符與表達(dá)式
2.4.1概述
程序在運(yùn)行過程中會進(jìn)行各種各樣的運(yùn)算,例如案例1中求平均成績會用到求和運(yùn)算和除法運(yùn)算,求最高、最低成績會進(jìn)行比較運(yùn)算。Java語言提供了豐富多樣的運(yùn)算符來實(shí)現(xiàn)各種運(yùn)算。
運(yùn)算符是指明對操作數(shù)進(jìn)行何種運(yùn)算的符號。按操作數(shù)的數(shù)目可以分為單目運(yùn)算符、雙目運(yùn)算符和三目運(yùn)算符,它們分別有一個(gè)、兩個(gè)和三個(gè)操作數(shù)。Java語言中的運(yùn)算符按照功能來分有下面幾類:
(1)算術(shù)運(yùn)算符:+,-,*,/,%,++,--;
(2)關(guān)系運(yùn)算符:>,<,>=,<=,==,!=;
(3)布爾邏輯運(yùn)算符:!,&&,||,&,|;
(4)位運(yùn)算符:>>,<<,>>>,&,|,^,~;
(5)賦值運(yùn)算符:=,+=(復(fù)合賦值運(yùn)算符);
(6)條件運(yùn)算符:?:;
(7)其他運(yùn)算符:包括分量運(yùn)算符.、下標(biāo)運(yùn)算符[
]、實(shí)例運(yùn)算符instanceof、內(nèi)存分配運(yùn)算符new、強(qiáng)制類型轉(zhuǎn)換運(yùn)算符(類型)、方法調(diào)用運(yùn)算符(
)等。
Java程序通過用各種不同的運(yùn)算符與操作數(shù)連接起來構(gòu)成的表達(dá)式來完成各種運(yùn)算的。本節(jié)主要講述前6類運(yùn)算符。2.4.2算術(shù)運(yùn)算符
算術(shù)運(yùn)算符是最基本的運(yùn)算符,用來實(shí)現(xiàn)基本的算術(shù)運(yùn)算,表2.4列出了Java語言的算術(shù)運(yùn)算符。表2.4Java語言的算術(shù)運(yùn)算符
+、-、*、/?運(yùn)算符實(shí)現(xiàn)數(shù)學(xué)中的加、減、乘、除運(yùn)算,其中運(yùn)算符?+?的功能有所擴(kuò)展,可以用它進(jìn)行字符串的連接,如“abc”+“de”,得到串“abcde”。除法運(yùn)算當(dāng)兩個(gè)運(yùn)算對象均為整型數(shù)據(jù)時(shí),作整除運(yùn)算。例如,45/4的值為10。
取模運(yùn)算符%為求余運(yùn)算,例如,21%4的值為1,25%5的值為0。Java語言中取模運(yùn)算的操作數(shù)也可以為浮點(diǎn)數(shù),如37.2%10=7.2。
++、--運(yùn)算符的運(yùn)算對象通常為變量,分別使運(yùn)算對象的值加1和減1。它們可以做前綴也可以做后綴,即?++i或i++,但其含義有一定的差別。i++?在使用i之后,使i的值加1,因此執(zhí)行完i++?后,整個(gè)表達(dá)式的值為原來i的值,而i的值加1。++i在使用i之前,使i的值加1,因此執(zhí)行完?++i后,整個(gè)表達(dá)式和i的值均為i原來的值加1。對i--與--i的運(yùn)算方式與?++?運(yùn)算符相似。假設(shè)i的值為5,則不管執(zhí)行i++?還是?++i后,i的值均為6,但第一個(gè)表達(dá)式的值為5,而第二個(gè)表達(dá)式的值為6。當(dāng)一個(gè)表達(dá)式中有多個(gè)運(yùn)算符時(shí),其運(yùn)算順序取決于運(yùn)算符的優(yōu)先級和結(jié)合順序。
當(dāng)一個(gè)表達(dá)式中有多個(gè)優(yōu)先級不同的運(yùn)算符時(shí),首先計(jì)算優(yōu)先級較高的運(yùn)算。例如表達(dá)式a+b*c,其中乘法運(yùn)算符的優(yōu)先級高于加法運(yùn)算,因此首先計(jì)算b*c,然后a與b*c所得的結(jié)果進(jìn)行加法運(yùn)算。
Java語言中算術(shù)運(yùn)算符的優(yōu)先級按下面的次序排列:++、--級別最高,然后是*、/、%,而+、-級別最低。如果一個(gè)表達(dá)式中有多個(gè)相同優(yōu)先級的運(yùn)算符,則按照其結(jié)合順序進(jìn)行運(yùn)算。例如表達(dá)式a+b-c中,加法運(yùn)算符與減法運(yùn)算符優(yōu)先級相同,它們的結(jié)合順序是從左至右,因此首先計(jì)算a+b,然后a+b所得結(jié)果與c進(jìn)行減法運(yùn)算。
當(dāng)一個(gè)表達(dá)式中有多個(gè)不同運(yùn)算符,運(yùn)算順序不能一目了然時(shí),建議將先運(yùn)算的部分加上括號(),減少出錯(cuò)的幾率,增加程序的可讀性。
【程序2.1】
算術(shù)運(yùn)算符的使用。
publicclassArithmaticOp{
publicstaticvoidmain(Stringargs[]){
inta=5+4; //a=9
intb=a*2; //b=18
intc=b/4; //c=4
intd=b-c; //d=14
inte=-d; //e=-14
intf=e%4; //f=-2
doubleg=18.4;doubleh=g%4;//h=2.4
inti=3;
intj=i++; //i=4,j=3
intk=++i; //i=5,k=5
System.out.println("a="+a);
System.out.println("b="+b);
System.out.println("c="+c);
System.out.println("d="+d);
System.out.println("e="+e);
System.out.println("f="+f);
System.out.println(“g=”+g);
System.out.println(“h=”+h);
System.out.println(“i=”+i);
System.out.println(“j=”+j);
System.out.println(“k=”+k);
}
}
編譯運(yùn)行,其結(jié)果為
a=9
b=18
c=4
d=14
e=-14
f=-2
g=18.4
h=2.3999999999999986
i=5
j=3
k=5
由于實(shí)數(shù)與整型數(shù)據(jù)不同,在計(jì)算機(jī)內(nèi)部存儲的值是不精確的,因此使得h的值看起來有點(diǎn)古怪。2.4.3賦值運(yùn)算符
賦值運(yùn)算的功能是將一個(gè)數(shù)據(jù)或表達(dá)式的值賦給一個(gè)變量。賦值運(yùn)算符是雙目運(yùn)算符,左邊的操作數(shù)必須是變量。
Java語言的賦值運(yùn)算符可以分為兩種:基本賦值運(yùn)算符和復(fù)合賦值運(yùn)算符。所有賦值運(yùn)算符的優(yōu)先級都相同,與其他運(yùn)算符相比,賦值運(yùn)算符的優(yōu)先級最低。
基本賦值運(yùn)算符是最簡單的賦值運(yùn)算符,格式為
變量名=表達(dá)式
先計(jì)算表達(dá)式,再將結(jié)果賦給變量,整個(gè)賦值表達(dá)式的值為賦值后變量的值。使用賦值運(yùn)算符時(shí),應(yīng)盡量使變量和表達(dá)式的數(shù)據(jù)類型一致,否則,先將表達(dá)式的值轉(zhuǎn)換為變量的數(shù)據(jù)類型再賦值。例如:
byteb=123;
inti;
i=b; //自動類型轉(zhuǎn)換
復(fù)合賦值運(yùn)算符是在基本運(yùn)算符的基礎(chǔ)上加上另一個(gè)運(yùn)算符,例如:
x*=a-b
這個(gè)表達(dá)式與下面的表達(dá)式等價(jià):
x=x*(a-b)
先計(jì)算復(fù)合賦值運(yùn)算符右邊的表達(dá)式,然后變量與該表達(dá)式的值進(jìn)行指定的運(yùn)算后將結(jié)果賦給該變量。常見的雙目算術(shù)運(yùn)算符如+、-、*、/、%以及下面將介紹的位運(yùn)算符>>、<<、&、|、^等都可以構(gòu)成復(fù)合賦值運(yùn)算符。2.4.4關(guān)系運(yùn)算符
關(guān)系運(yùn)算符用來比較兩個(gè)值,Java語言關(guān)系運(yùn)算的結(jié)果為布爾類型的值true或false。關(guān)系運(yùn)算符都是雙目運(yùn)算符,如表2.5所示。表2.5關(guān)?系?運(yùn)?算?符表2.5中的前四種關(guān)系運(yùn)算符的優(yōu)先級相同,高于后兩種,后兩種的優(yōu)先級也相同。關(guān)系運(yùn)算符的優(yōu)先級與前面的算術(shù)運(yùn)算符相比要低一些。
參與比較大小的兩個(gè)操作數(shù)或表達(dá)式的值可以是浮點(diǎn)型,但是浮點(diǎn)型數(shù)之間作“等于”比較是無意義的,因?yàn)檫\(yùn)算總有誤差,所以通常沒有絕對相等的浮點(diǎn)數(shù)。
2.4.5邏輯運(yùn)算符
Java語言的邏輯運(yùn)算符只能對布爾類型的數(shù)據(jù)進(jìn)行運(yùn)算,表2.6列出了Java語言支持的邏輯運(yùn)算符。
&&、||、^、&、|?為雙目運(yùn)算符,!?為單目運(yùn)算符。表2.7給出了邏輯運(yùn)算符的運(yùn)算規(guī)則。表2.6Java語言的邏輯運(yùn)算符表2.7邏輯運(yùn)算真值表從表2.7中可以看出,&&與&的真值完全一樣,||與|的真值完全一樣,那么它們在Java語言中有什么區(qū)別呢?
條件與(&&)和條件或(||)構(gòu)成的表達(dá)式求值規(guī)則是:先求出運(yùn)算符左邊的表達(dá)式的值,根據(jù)左邊表達(dá)式的結(jié)果決定是否需要求解右邊的表達(dá)式。例如:
booleanb1,b2,b3;
b1=false;
b2=false;
b3=b1&&(b2=true);由于b1的值為假,則表達(dá)式b1&&(b2=true)右邊部分b2=true無需計(jì)算即可得到結(jié)果,因此該部分不計(jì)算,b2的值不改變。
如果將該表達(dá)式中的“條件與”換為“邏輯與”,改成:
booleanb1,b2,b3;
b1=false;
b2=false;
b3=b1&(b2=true);
則不管前面b1的值為什么,b2=true都計(jì)算,該程序片斷運(yùn)行結(jié)束后,b2的值為true。條件或(||)與邏輯或(|)的區(qū)別與此類似。
【程序2.3】
關(guān)系運(yùn)算符與邏輯運(yùn)算符的使用。
publicclassRelationLogicOp{
publicstaticvoidmain(Stringargs[]){
inta=25,b=30;
booleand=a<b;
System.out.println(“a<b=”+d);
inte=3;
if(e!=0&&a/e>5)
System.out.println(“a/e=”+a/e);
intf=2;
if(f==0&(d=false))
System.out.println(“f=0”);
else
System.out.println(“f!=0”);
System.out.println(“d=”+d);
}
}
其運(yùn)行結(jié)果為:
a<b=true
a/e=8
f=0
d=true2.4.6位運(yùn)算符
位運(yùn)算符用來對整型和字符型數(shù)據(jù)按二進(jìn)制位進(jìn)行操作,Java語言提供的位運(yùn)算符見表2.8。表2.8Java語言的位運(yùn)算符
Java語言的整型數(shù)據(jù)也以補(bǔ)碼表示。補(bǔ)碼的最高位為符號位,正數(shù)的符號位為0,負(fù)數(shù)為1。補(bǔ)碼的規(guī)定如下:對于正數(shù),最高位為0,其余各位代表數(shù)值本身,如+42的補(bǔ)碼為00101010。而對負(fù)數(shù)而言,將該數(shù)絕對值的原碼按位取反,然后對整個(gè)數(shù)加1,即得該數(shù)的補(bǔ)碼,如-42的補(bǔ)碼為11010110(00101010按位取反后為11010101,+1后為11010110)。
按位與運(yùn)算符&為雙目運(yùn)算符,如果參與運(yùn)算的兩個(gè)值相應(yīng)位都為1,則該位的結(jié)果為1,否則為0。例如,3&5結(jié)果為1。按位或運(yùn)算符?|?也是雙目運(yùn)算符,參與運(yùn)算的兩個(gè)值只要兩個(gè)相應(yīng)位中有一個(gè)為1,則該位的結(jié)果為1。例如,3|5結(jié)果為7。
按位取反運(yùn)算符~是單目運(yùn)算符,對數(shù)據(jù)的每個(gè)二進(jìn)制位取反,即把1變?yōu)?,把0變?yōu)?。例如,~3的值為-4。3表示成二進(jìn)制為
0000000000000011
按位取反為
1111111111111100
該值為-4的補(bǔ)碼表示。對于“按位異或”運(yùn)算符?^,如果參與運(yùn)算的兩個(gè)值相應(yīng)位相同,則結(jié)果為0,否則為1,即0^0=0,1^0=1,0^1=1,1^1=0。例如,3^5結(jié)果為6。
左移運(yùn)算符<<用來將一個(gè)數(shù)的各二進(jìn)位全部左移若干位。例如,a=a<<2,使a的各二進(jìn)制位左移2位,右補(bǔ)0,若a=00001111,則a<<2=00111100。高位左移后溢出,舍棄不起作用。在不產(chǎn)生溢出的情況下,左移一位相當(dāng)于乘2,而且用左移來實(shí)現(xiàn)乘法比乘法運(yùn)算速度要快。右移運(yùn)算符>>用來將一個(gè)數(shù)的各二進(jìn)制位全部右移若干位。例如,a=a>>2,使a的各二進(jìn)制位右移2位,移到右端的低位被舍棄,最高位則移入原來高位的值。帶符號右移運(yùn)算以符號位填補(bǔ)空位,而不帶符號右移空位固定以0填補(bǔ)。因此負(fù)數(shù)帶符號右移若干位后仍為負(fù)數(shù),而不帶符號右移則變?yōu)檎龜?shù)。例如:
-17>>2 結(jié)果為-5;
-17>>>2 結(jié)果為1073741819。2.4.7條件運(yùn)算符
條件運(yùn)算符的格式如下:
(boolean_expr)?true_statement:false_statement
如果
boolean_expr為真,則計(jì)算true_satatement,將結(jié)果作為表達(dá)式的值;否則計(jì)算false_statement作為表達(dá)式的值。true_statement與false_statement應(yīng)為相同數(shù)據(jù)類型的表達(dá)式。例如:
booleanopr1=true,opr2=fales;
intcount1,count2;
count1=(opr1)?3:5;
count2=(opr2)?3:5;
該程序段執(zhí)行結(jié)束時(shí),count1的值為3,count2的值為5。2.4.8類型轉(zhuǎn)換
在編程時(shí),經(jīng)常會出現(xiàn)不同類型的數(shù)據(jù)進(jìn)行混合運(yùn)算的情況,運(yùn)算前應(yīng)將不同類型的數(shù)據(jù)轉(zhuǎn)換為相同類型。類型轉(zhuǎn)換有兩種方法:自動類型轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換。
整型、實(shí)型、字符型等數(shù)據(jù)混合運(yùn)算時(shí),Java語言編譯器可以對它們進(jìn)行自動類型轉(zhuǎn)換。轉(zhuǎn)換規(guī)則為從低級數(shù)據(jù)類型轉(zhuǎn)換為高級數(shù)據(jù)類型:
(1)(byte或short)opint→int;
(2)(byte或short或int)oplong→long;
(3)(byte或short或int或long)opfloat→float;
(4)(byte或short或int或long或float)opdouble→double;
(5)charopint→int。
這里箭頭左邊表示參與運(yùn)算的數(shù)據(jù)類型,op為運(yùn)算符(如加、減、乘、除等),右邊表示轉(zhuǎn)換后進(jìn)行運(yùn)算的數(shù)據(jù)類型。
混合運(yùn)算中如果高級數(shù)據(jù)要轉(zhuǎn)換成低級數(shù)據(jù),需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換。例如:
inti=10;
byteb=(byte)i;這里使用了強(qiáng)制類型轉(zhuǎn)換運(yùn)算符把int型的值強(qiáng)制轉(zhuǎn)換為byte型,然后賦值給變量b。強(qiáng)制類型轉(zhuǎn)換運(yùn)算符為單目運(yùn)算符,優(yōu)先級高于其他運(yùn)算符。
采用強(qiáng)制類型轉(zhuǎn)換將高級類型數(shù)據(jù)轉(zhuǎn)換為低級類型數(shù)據(jù)會導(dǎo)致溢出或精度的下降,在使用時(shí)應(yīng)注意值的范圍。
2.5案例的初步實(shí)現(xiàn)
本節(jié)給出本章案例的一個(gè)初步實(shí)現(xiàn),用戶輸入兩個(gè)學(xué)生的成績后,程序輸出最高分、最低分和平均成績。
【程序2.4】
本章案例的初步實(shí)現(xiàn)。
importjava.util.Scanner;
publicclassch2c1{
publicstaticvoidmain(String[]args){
intfirstGrade,secondGrade;
Scannerinput=newScanner(System.in);
System.out.println("Pleaseinputthe1stgrade:"); firstGrade=input.nextInt();
System.out.println("Pleaseinputthe2ndgrade:");
secondGrade=input.nextInt();
System.out.println("Themaximumgradeis"
+((firstGrade>secondGrade)?firstGrade:secondGrade));
System.out.println("Theminimumgradeis"
+((firstGrade<secondGrade)?firstGrade:secondGrade));
System.out.println("Theaveragegradeis"+((firstGrade+secondGrade)/2.0));
}
}上面的程序使用了Java2SDK新增的一個(gè)類Scanner來實(shí)現(xiàn)數(shù)據(jù)的輸入,使用該類創(chuàng)建一個(gè)對象:
Scannerinput=newScanner(System.in);
其中System.in為標(biāo)準(zhǔn)輸入流,默認(rèn)情況下從鍵盤輸入數(shù)據(jù)。然后input對象調(diào)用nextInt()方法輸入一個(gè)整型數(shù)據(jù)。如果用戶需要輸入其他數(shù)據(jù)類型可以使用其他幾個(gè)方法,如next.Byte()、nextDouble()、nextFloat()、nextInt()、nextLine()、nextLong()、nextShort()等。nextLine()用于等待用戶輸入一個(gè)文本行并回車,該方法得到一個(gè)String類型的數(shù)據(jù)。 2.6流程控制語句
2.5節(jié)的程序結(jié)構(gòu)十分簡單,程序從main方法的第一條語句開始執(zhí)行,依次執(zhí)行下面的語句,執(zhí)行完最后一條語句后程序結(jié)束,這樣的結(jié)構(gòu)稱為順序結(jié)構(gòu)。
但是程序僅僅有順序結(jié)構(gòu)能實(shí)現(xiàn)的功能十分有限,本章案例要求輸入一個(gè)班級的學(xué)生成績,我們不可能像2.5節(jié)的程序那樣為每一個(gè)學(xué)生的分?jǐn)?shù)定義一個(gè)整型變量,因?yàn)檫M(jìn)行程序設(shè)計(jì)時(shí)并不知道學(xué)生數(shù),不可能按順序?qū)懗鏊蟹謹(jǐn)?shù)的輸入語句。要完整地實(shí)現(xiàn)本章案例要求的功能,需要更復(fù)雜的語句來控制程序的執(zhí)行流程。
Java語言的流程控制語句主要分為分支(選擇)、重復(fù)和跳轉(zhuǎn)三種類型,下面分別加以介紹。
2.6.1分支語句
分支語句提供了一種控制機(jī)制,使得程序可以根據(jù)指定的條件選擇執(zhí)行部分語句或跳過某些語句不執(zhí)行。Java語言提供了兩種分支語句:條件語句if-else和多分支語句switch。
1.條件語句if-else
if-else語句根據(jù)判定條件的真假來執(zhí)行兩種操作中的一種,格式如下:
if(布爾表達(dá)式)語句1
[else
語句2]
其中else子句是任選的,可以不出現(xiàn)。
if后表示條件的表達(dá)式只能是布爾類型的,如果該布爾表達(dá)式的值為true,則程序執(zhí)行語句1,否則執(zhí)行語句2。
語句1和語句2可以是單一的語句,也可以是復(fù)合語句(用大括號{}括起來的若干條語句)。如果是單一的語句,不要忘了語句后的分號。建議對單一的語句也用大括號括起,這樣程序的可讀性更好。
else子句不能單獨(dú)作為語句使用,它必須和if配對使用。else總是與離它最近尚未配對的if配對,可以通過使用大括號{}來改變配對關(guān)系。
【程序2.5】
比較兩個(gè)數(shù)的大小,并按從小到大的次序輸出。
publicclassCompareTwo{
publicstaticvoidmain(Stringargs[]){
doubled1=21.5,d2=33.2;
if(d2>=d1)
System.out.println(d2+“>=”+d1);
else
System.out.println(d1+“>=”+d2);
}
}
【程序2.6】
判斷某一年是否為閏年。
閏年的條件是符合下面二者之一:①能被4整除,但不能被100整除;②能被100整除,又能被400整除。
publicclassLeapYear{
publicstaticvoidmain(Stringargs[]){
intyear=2003;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 買房車購車合同范例
- 代發(fā)快遞服務(wù)合同范本
- 2025年度環(huán)保技術(shù)研發(fā)與應(yīng)用合作合同
- 2025年度國際物流信息平臺進(jìn)口與實(shí)施合同
- 兄弟合伙生意合同范本
- 城市中等裝修房屋出租合同范本
- 入股代理合同范本
- 關(guān)于砂石購買標(biāo)準(zhǔn)合同范本
- 出版社教材出版合同范本
- 2025年食品級甘氨酸鈉項(xiàng)目投資可行性研究分析報(bào)告
- 政府資金項(xiàng)目(榮譽(yù))申報(bào)獎勵辦法
- JJF 1069-2012 法定計(jì)量檢定機(jī)構(gòu)考核規(guī)范(培訓(xùn)講稿)
- 最新如何進(jìn)行隔代教育專業(yè)知識講座課件
- 當(dāng)前警察職務(wù)犯罪的特征、原因及防范,司法制度論文
- 計(jì)算機(jī)文化基礎(chǔ)單元設(shè)計(jì)-windows
- 創(chuàng)建動物保護(hù)家園-完整精講版課件
- 廣東省保安服務(wù)監(jiān)管信息系統(tǒng)用戶手冊(操作手冊)
- DNA 親子鑒定手冊 模板
- DB33T 1233-2021 基坑工程地下連續(xù)墻技術(shù)規(guī)程
- 天津 建設(shè)工程委托監(jiān)理合同(示范文本)
- 部編一年級語文下冊教材分析
評論
0/150
提交評論