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