第一章 java基礎(chǔ)
《第一章 java基礎(chǔ)》由會(huì)員分享,可在線閱讀,更多相關(guān)《第一章 java基礎(chǔ)(23頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第一章: 教案名稱: 教案大小: 教案類型: WORD文檔 星級(jí)評(píng)定: ★★★★☆ 教案簡(jiǎn)介: java語(yǔ)言的產(chǎn)生起源于Sun Microsystems公司為消費(fèi)電子產(chǎn)品上應(yīng)用程序的開發(fā)尋找一門編程語(yǔ)言的過程中,而隨著互聯(lián)網(wǎng)時(shí)代的到來(lái),原有的Oak軟件就順理成章的改造成java語(yǔ)言推向了市場(chǎng),其跨平臺(tái)、面相對(duì)象、安全等特點(diǎn)使其得到廣泛的應(yīng)用。通過在不同的軟硬件上實(shí)現(xiàn)的java虛擬機(jī),java的字節(jié)碼文件就可以跨平臺(tái)的進(jìn)行運(yùn)行,無(wú)用內(nèi)存自動(dòng)回收器也給程序員帶來(lái)了極大的方便。java程序以兩種方式進(jìn)行運(yùn)行,一種是通過java虛擬機(jī)進(jìn)行直接運(yùn)行的java applicatio
2、n,另一種是通過瀏覽器進(jìn)行運(yùn)行的java applet,但是無(wú)論是何種方式,java都是一門純粹的面向?qū)ο蟮木幊陶Z(yǔ)言。面向?qū)ο缶幊痰乃悸氛J(rèn)為程序都是對(duì)象的組合,因此要克服面向過程編程的思路,直接按照對(duì)象和類的思想去組織程序,面向?qū)ο笏哂械姆庋b性、繼承性、多態(tài)性等特點(diǎn)使其具有強(qiáng)大的生命力。Sun公司為全世界java開發(fā)人員提供了一套免費(fèi)的軟件開發(fā)包Java2 SDK,也稱為JDK,它不僅是java的開發(fā)平臺(tái),還是java的運(yùn)行平臺(tái)。java源程序存放在.java文件中,可以通過任意一個(gè)文本編輯器編輯產(chǎn)生,源程序經(jīng)過"javac"命令編譯過后,就生成了相應(yīng)的.class文件,而用"java"命令
3、就可以運(yùn)行.class文件。作為面向?qū)ο缶幊倘藛T來(lái)說(shuō),大體可以分為兩種:類創(chuàng)建者和應(yīng)用程序員,應(yīng)用程序員是類的使用者。所以對(duì)程序的可讀性和API幫助文檔就有要求,java語(yǔ)言本身有一套約定成俗的編程規(guī)范,同時(shí)程序員首先要學(xué)會(huì)閱讀系統(tǒng)API幫助文檔,還要學(xué)會(huì)生成自己編寫的程序的API幫助文檔。 下載一 【課前思考】 1. 一門新的語(yǔ)言的產(chǎn)生是否需要借鑒以前的編程語(yǔ)言? 2. 在java語(yǔ)言出現(xiàn)之前是否存在其它跨平臺(tái)的語(yǔ)言? 3. 有哪些編程語(yǔ)言是面向?qū)ο蟮??而哪些編程語(yǔ)言是面向過程的?從編程思路上存在著哪些本質(zhì)差別?C++語(yǔ)言是面向?qū)ο蟮倪€是面向過程的?
4、4. 一段優(yōu)秀的程序代碼是否應(yīng)該是可讀性極強(qiáng)的?程序員之間是否應(yīng)該遵循相同的編程規(guī)范? 5. 一個(gè)程序員編好的代碼如果需要讓別的程序員使用,如何提供該代碼的使用說(shuō)明? 【學(xué)習(xí)目標(biāo)】 了解java語(yǔ)言產(chǎn)生的歷史和工作原理,掌握java語(yǔ)言作為一門面向?qū)ο缶幊陶Z(yǔ)言的基本編程思路,初步接觸java程序的兩種方式:java application和java applet,掌握java程序的結(jié)構(gòu)、編程規(guī)范,學(xué)習(xí)閱讀java幫助文檔,并安裝java開發(fā)環(huán)境和幫助文檔,最后要學(xué)會(huì)編寫小的java程序并生成相應(yīng)的幫助文檔。 【學(xué)習(xí)指南】 跳過面向過程的編程思路,直接進(jìn)入到面向?qū)ο蟮木幊谭?/p>
5、式。 【難 重 點(diǎn)】 java虛擬機(jī) 無(wú)用內(nèi)存自動(dòng)回收器 java語(yǔ)言的特點(diǎn) 面向?qū)ο蟮木幊趟悸? java編程規(guī)范 java類庫(kù)幫助文檔的瀏覽和生成 【知 識(shí) 點(diǎn)】 1.1 java語(yǔ)言的發(fā)展史 1.1.1 java語(yǔ)言在互聯(lián)網(wǎng)時(shí)代獲得巨大成功 1.1.2 java語(yǔ)言的產(chǎn)生 1.2 java的工作原理 1.2.1 java虛擬機(jī) 1.2.2 無(wú)用內(nèi)存自動(dòng)回收機(jī)制 1.2.3 代碼安全性檢查機(jī)制 1.2.4 java語(yǔ)言的特點(diǎn) 1.2.5 java平臺(tái)-不斷擴(kuò)展的計(jì)算平臺(tái) 1.3
6、 一切都是對(duì)象 1.3.1 面向過程 1.3.2 面向?qū)ο? 1.4 構(gòu)建java程序 1.4.1 第一個(gè)java application 1.4.2 java程序的編輯 1.4.3 java程序的編譯 1.4.4 java application的執(zhí)行 1.4.5 第一個(gè)java applet 1.4.6 java applet的執(zhí)行 1.5 java程序規(guī)范 1.5.1 java源程序結(jié)構(gòu) 1.5.2 java編程規(guī)范 1.5.3 java幫助文檔 1.5.4 java注釋 1.
7、6 建立java開發(fā)環(huán)境 1.6.1 安裝java開發(fā)包JDK 1.6.2 安裝java幫助文檔 1.6.3 配置類路徑 1.1 java語(yǔ)言的發(fā)展史 1.1.1java語(yǔ)言在互聯(lián)網(wǎng)時(shí)代獲得巨大成功 大家想一想,在PC下用windows編寫的程序能夠不做修改就直接拿到UNIX系統(tǒng)上運(yùn)行嗎?顯然是不可以的,因?yàn)槌绦虻膱?zhí)行最終必須轉(zhuǎn)換成為計(jì)算機(jī)硬件的機(jī)器指令來(lái)執(zhí)行,專門為某種計(jì)算機(jī)硬件和操作系統(tǒng)編寫的程序是不能夠直接放到另外的計(jì)算機(jī)硬件上執(zhí)行的,至少要做移植工作。要想讓程序能夠在不同的計(jì)算機(jī)上能夠運(yùn)行,就要求程序設(shè)計(jì)語(yǔ)言是能夠跨越各種軟件和硬件平臺(tái)的,而java滿
8、足了這一需求。 1995年,美國(guó)Sun Microsystems公司正式向IT業(yè)界推出了java語(yǔ)言,該語(yǔ)言具有安全、跨平臺(tái)、面向?qū)ο?、?jiǎn)單、適用于網(wǎng)絡(luò)等顯著特點(diǎn),當(dāng)時(shí)以web為主要形式的互聯(lián)網(wǎng)正在迅猛發(fā)展,java語(yǔ)言的出現(xiàn)迅速引起所有程序員和軟件公司的極大關(guān)注,程序員們紛紛嘗試用java語(yǔ)言編寫網(wǎng)絡(luò)應(yīng)用程序,并利用網(wǎng)絡(luò)把程序發(fā)布到世界各地進(jìn)行運(yùn)行。包括IBM、Oracle、微軟、Netscape、Apple、SGI等大公司紛紛與Sun Microsystems公司簽訂合同,授權(quán)使用java平臺(tái)技術(shù)。微軟公司總裁比爾蓋茨先生在經(jīng)過研究后認(rèn)為"java語(yǔ)言是長(zhǎng)時(shí)間以來(lái)最卓越的程序設(shè)計(jì)語(yǔ)言"
9、。目前,java語(yǔ)言已經(jīng)成為最流行的網(wǎng)絡(luò)編程語(yǔ)言,截止到2001年中,全世界大約有310萬(wàn)java程序員,許多大學(xué)紛紛開設(shè)java課程,java正逐步成為世界上程序員最多的編程語(yǔ)言。 在經(jīng)歷了以大型機(jī)為代表的集中計(jì)算模式和以PC機(jī)為代表的分散計(jì)算模式之后,互聯(lián)網(wǎng)的出現(xiàn)使得計(jì)算模式進(jìn)入了網(wǎng)絡(luò)計(jì)算時(shí)代。網(wǎng)絡(luò)計(jì)算模式的一個(gè)特點(diǎn)是計(jì)算機(jī)是異構(gòu)的,即計(jì)算機(jī)的類型和操作系統(tǒng)是不一樣的,例如SUN工作站的硬件是SPARC體系,軟件是UNIX中的Solaris操作系統(tǒng),而PC機(jī)的硬件是INTEL體系,操作系統(tǒng)是windows或者是Linux,因此相應(yīng)的編程語(yǔ)言基本上只是適用于單機(jī)系統(tǒng),例如COBOL
10、、FORTRAN、C、C++等等;網(wǎng)絡(luò)計(jì)算模式的另一個(gè)特點(diǎn)是代碼可以通過網(wǎng)絡(luò)在各種計(jì)算機(jī)上進(jìn)行遷移,這就迫切需要一種跨平臺(tái)的編程語(yǔ)言,使得用它編寫的程序能夠在網(wǎng)絡(luò)中的各種計(jì)算機(jī)上能夠正常運(yùn)行,java就是在這種需求下應(yīng)運(yùn)而生的。正是因?yàn)閖ava語(yǔ)言符合了互聯(lián)網(wǎng)時(shí)代的發(fā)展要求,才使它獲得了巨大的成功。 1.1.2 java語(yǔ)言的產(chǎn)生 俗話說(shuō):"有心栽花花不成,無(wú)心插柳柳成蔭"。Sun公司絕沒想到本想用于消費(fèi)電子產(chǎn)品開發(fā)的編程語(yǔ)言卻率先在網(wǎng)絡(luò)中得到了廣泛應(yīng)用,但是也可以說(shuō)是"東方不亮西方亮",正是因?yàn)閖ava語(yǔ)言在設(shè)計(jì)目標(biāo)上的正確性使得java語(yǔ)言"是金字總會(huì)發(fā)光的"。C語(yǔ)言是面向過程
11、的語(yǔ)言,也是使用率非常高的語(yǔ)言;而面向?qū)ο蟮乃枷胍氲骄幊陶Z(yǔ)言之后,C語(yǔ)言就被改造成為面向?qū)ο蟮腃++語(yǔ)言,得到了廣泛的應(yīng)用。但是C++語(yǔ)言必須兼容C語(yǔ)言,因此C++語(yǔ)言是面向過程和面向?qū)ο蠡旌系恼Z(yǔ)言。 java語(yǔ)言產(chǎn)生于C++語(yǔ)言之后,是完全的面向?qū)ο蟮木幊陶Z(yǔ)言,充分吸取了C++語(yǔ)言的優(yōu)點(diǎn),采用了程序員所熟悉的C和C++語(yǔ)言的許多語(yǔ)法,同時(shí)又去掉了C語(yǔ)言中指針、內(nèi)存申請(qǐng)和釋放等影響程序健壯性的部分,可以說(shuō)java語(yǔ)言是站在C++語(yǔ)言這個(gè)"巨人的肩膀上"前進(jìn)的。 java語(yǔ)言的一個(gè)目標(biāo)是跨平臺(tái),因此采用了解釋執(zhí)行而不是編譯執(zhí)行的運(yùn)行環(huán)境,在執(zhí)行過程中根據(jù)所在的不同的硬件
12、平臺(tái)把程序解釋為當(dāng)前的機(jī)器碼,實(shí)現(xiàn)跨平臺(tái)運(yùn)行。而動(dòng)態(tài)下載程序代碼的機(jī)制完全是為了適應(yīng)網(wǎng)絡(luò)計(jì)算的特點(diǎn),程序可以根據(jù)需要把代碼實(shí)時(shí)的從服務(wù)器中下載過來(lái)執(zhí)行,在此之前還沒有任何一種語(yǔ)言能夠支持這一點(diǎn)。 java是印尼的一個(gè)小島,盛產(chǎn)咖啡,而程序員往往喜歡喝咖啡,因此取名為java語(yǔ)言??磥?lái),目前java這杯咖啡已經(jīng)飄香在世界各地?!? 任何事物的產(chǎn)生既有必然的原因也有偶然的因素,java語(yǔ)言的出現(xiàn)也驗(yàn)證了這一點(diǎn)。1991年,美國(guó)Sun Microsystems公司的某個(gè)研究小組為了能夠在消費(fèi)電子產(chǎn)品上開發(fā)應(yīng)用程序,積極尋找合適的編程語(yǔ)言。消費(fèi)電子產(chǎn)品種類繁多,包括PDA、機(jī)頂盒、手機(jī)等等,
13、即使是同一類消費(fèi)電子產(chǎn)品所采用的處理芯片和操作系統(tǒng)也不相同,也存在著跨平臺(tái)的問題。當(dāng)時(shí)最流行的編程語(yǔ)言是C和C++語(yǔ)言,Sun公司的研究人員就考慮是否可以采用C++語(yǔ)言來(lái)編寫消費(fèi)電子產(chǎn)品的應(yīng)用程序,但是研究表明,對(duì)于消費(fèi)電子產(chǎn)品而言C++語(yǔ)言過于復(fù)雜和龐大,并不適用,安全性也并不令人滿意。于是,Bill Joy先生領(lǐng)導(dǎo)的研究小組就著手設(shè)計(jì)和開發(fā)出一種語(yǔ)言,稱之為Oak。該語(yǔ)言采用了許多C語(yǔ)言的語(yǔ)法,提高了安全性,并且是面向?qū)ο蟮恼Z(yǔ)言,但是Oak語(yǔ)言在商業(yè)上并未獲得成功。時(shí)間轉(zhuǎn)到了1995年,互聯(lián)網(wǎng)在世界上蓬勃發(fā)展,Sun公司發(fā)現(xiàn)Oak語(yǔ)言所具有的跨平臺(tái)、面向?qū)ο?、安全性高等特點(diǎn)非常符合互聯(lián)網(wǎng)的
14、需要,于是改進(jìn)了該語(yǔ)言的設(shè)計(jì),要達(dá)到如下幾個(gè)目標(biāo): ◇ 創(chuàng)建一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,而不是面向過程的語(yǔ)言; ◇ 提供一個(gè)解釋執(zhí)行的程序運(yùn)行環(huán)境,是程序代碼獨(dú)立于平臺(tái); ◇ 吸收C和C++的優(yōu)點(diǎn),使程序員容易掌握; ◇ 去掉C和C++中影響程序健壯性的部分,使程序更安全,例如指針、內(nèi)存申請(qǐng)和釋放; ◇ 實(shí)現(xiàn)多線程,使得程序能夠同時(shí)執(zhí)行多個(gè)任務(wù); ◇ 提供動(dòng)態(tài)下載程序代碼的機(jī)制; ◇ 提供代碼校驗(yàn)機(jī)制以保證安全性; 最終,Sun公司給該語(yǔ)言取名為java語(yǔ)言,造就了一代成功的編程語(yǔ)言。 1.2 java的工作原理 1
15、.2.1 java虛擬機(jī) java虛擬機(jī)是軟件模擬的計(jì)算機(jī),可以在任何處理器上(無(wú)論是在計(jì)算機(jī)中還是在其它電子設(shè)備中)安全并且兼容的執(zhí)行保存在.class文件中的字節(jié)碼。java虛擬機(jī)的"機(jī)器碼"保存在.class文件中,有時(shí)也可以稱之為字節(jié)碼文件。java程序的跨平臺(tái)主要是指字節(jié)碼文件可以在任何具有java虛擬機(jī)的計(jì)算機(jī)或者電子設(shè)備上運(yùn)行,java虛擬機(jī)中的java解釋器負(fù)責(zé)將字節(jié)碼文件解釋成為特定的機(jī)器碼進(jìn)行運(yùn)行。java源程序需要通過編譯器編譯成為.class文件(字節(jié)碼文件),java程序的編譯和執(zhí)行過程如動(dòng)畫所示。 但是,java虛擬機(jī)的建立需要針對(duì)不同的軟硬件平臺(tái)
16、做專門的實(shí)現(xiàn),既要考慮處理器的型號(hào),也要考慮操作系統(tǒng)的種類。如下圖所示,目前在SPARC結(jié)構(gòu)、X86結(jié)構(gòu)、MIPS和PPC等嵌入式處理芯片上、在UNIX、Linux、windows和部分實(shí)時(shí)操作系統(tǒng)上都有java虛擬機(jī)的實(shí)現(xiàn)。 1.2.2 無(wú)用內(nèi)存自動(dòng)回收機(jī)制 在程序的執(zhí)行過程中,部分內(nèi)存在使用過后就處于廢棄狀態(tài),如果不及時(shí)進(jìn)行無(wú)用內(nèi)存的回收,就會(huì)導(dǎo)致內(nèi)存泄漏,進(jìn)而導(dǎo)致系統(tǒng)崩潰。在C++語(yǔ)言中是由程序員進(jìn)行內(nèi)存回收的,程序員需要在編寫程序的時(shí)候把不再使用的對(duì)象內(nèi)存釋放掉;但是這種人為的管理內(nèi)存釋放的方法卻往往由于程序員的疏忽而致使內(nèi)存無(wú)法回收,同時(shí)也增加
17、了程序員的工作量。而在java運(yùn)行環(huán)境中,始終存在著一個(gè)系統(tǒng)級(jí)的線程,專門跟蹤內(nèi)存的使用情況,定期檢測(cè)出不再使用的內(nèi)存,并進(jìn)行自動(dòng)回收,避免了內(nèi)存的泄露,也減輕了程序員的工作量。 1.2.3 代碼安全性檢查機(jī)制 安全和方便總是相對(duì)矛盾的。java編程語(yǔ)言的出現(xiàn)使得客戶端機(jī)器可以方便的從網(wǎng)絡(luò)上下載java程序到本機(jī)上運(yùn)行,但是如何保證該java程序不攜帶病毒或者不懷有其它險(xiǎn)惡目的呢?如果java語(yǔ)言不能保證執(zhí)行的安全性,那么它就不可能存活到今天。雖然有時(shí)候少數(shù)程序員會(huì)抱怨說(shuō)applet連文件系統(tǒng)也不能訪問,但是正是各種安全措施的實(shí)行才確保了java語(yǔ)言的生存。 字節(jié)碼的執(zhí)行需要經(jīng)過三個(gè)
18、步驟,首先由類裝載器(class loader)負(fù)責(zé)把類文件(.class文件)加載到j(luò)ava虛擬機(jī)中,在此過程需要檢驗(yàn)該類文件是否符合類文件規(guī)范;其次字節(jié)碼校驗(yàn)器(bytecode verifier)檢查該類文件的代碼中是否存在著某些非法操作,例如applet程序中寫本機(jī)文件系統(tǒng)的操作;如果字節(jié)碼校驗(yàn)器檢驗(yàn)通過,由java解釋器負(fù)責(zé)把該類文件解釋成為機(jī)器碼進(jìn)行執(zhí)行。java虛擬機(jī)采用的是"沙箱"運(yùn)行模式,即把java程序的代碼和數(shù)據(jù)都限制在一定內(nèi)存空間里執(zhí)行,不允許程序訪問該內(nèi)存空間外的內(nèi)存,如果是applet程序,還不允許訪問客戶端機(jī)器的文件系統(tǒng)。 1.2.4 Java語(yǔ)言的特點(diǎn)
19、 1. 簡(jiǎn)單、面向?qū)ο蠛蜑槿怂煜? java的簡(jiǎn)單首先體現(xiàn)在精簡(jiǎn)的系統(tǒng)上,力圖用最小的系統(tǒng)實(shí)現(xiàn)足夠多的功能;對(duì)硬件的要求不高,在小型的計(jì)算機(jī)上便可以良好的運(yùn)行。和所有的新一代的程序設(shè)計(jì)語(yǔ)言一樣,java也采用了面向?qū)ο蠹夹g(shù)并更加徹底,所有的java程序和applet程序均是對(duì)象,封裝性實(shí)現(xiàn)了模塊化和信息隱藏,繼承性實(shí)現(xiàn)了代碼的復(fù)用,用戶可以建立自己的類庫(kù)。而且java采用的是相對(duì)簡(jiǎn)單的面向?qū)ο蠹夹g(shù),去掉了運(yùn)算符重載、多繼承的復(fù)雜概念,而采用了單一繼承、類強(qiáng)制轉(zhuǎn)換、多線程、引用(非指針)等方式。無(wú)用內(nèi)存自動(dòng)回收機(jī)制也使得程序員不必費(fèi)心管理內(nèi)存,是程序設(shè)計(jì)更加簡(jiǎn)單,同時(shí)大大減少了出錯(cuò)的可能。j
20、ava語(yǔ)言采用了C語(yǔ)言中的大部分語(yǔ)法,熟悉C語(yǔ)言的程序員會(huì)發(fā)現(xiàn)java語(yǔ)言在語(yǔ)法上與C語(yǔ)言極其相似。 2. 魯棒并且安全 java語(yǔ)言在編譯及運(yùn)行程序時(shí),都要進(jìn)行嚴(yán)格的檢查。作為一種強(qiáng)制類型語(yǔ)言,java在編譯和連接時(shí)都進(jìn)行大量的類型檢查,防止不匹配問題的發(fā)生。如果引用一個(gè)非法類型、或執(zhí)行一個(gè)非法類型操作,java將在解釋時(shí)指出該錯(cuò)誤。在java程序中不能采用地址計(jì)算的方法通過指針訪問內(nèi)存單元,大大減少了錯(cuò)誤發(fā)生的可能性;而且java的數(shù)組并非用指針實(shí)現(xiàn),這樣就可以在檢查中避免數(shù)組越界的發(fā)生。無(wú)用內(nèi)存自動(dòng)回收機(jī)制也增加了java的魯棒性。作為網(wǎng)絡(luò)語(yǔ)言,java必須提供足夠的安全保障,并
21、且要防止病毒的侵襲。java在運(yùn)行應(yīng)用程序時(shí),嚴(yán)格檢查其訪問數(shù)據(jù)的權(quán)限,比如不允許網(wǎng)絡(luò)上的應(yīng)用程序修改本地的數(shù)據(jù)。下載到用戶計(jì)算機(jī)中的字節(jié)代碼在其被執(zhí)行前要經(jīng)過一個(gè)核實(shí)工具,一旦字節(jié)代碼被核實(shí),便由java解釋器來(lái)執(zhí)行,該解釋器通過阻止對(duì)內(nèi)存的直接訪問來(lái)進(jìn)一步提高java的安全性。同時(shí)java極高的魯棒性也增強(qiáng)了java的安全性。 3. 結(jié)構(gòu)中立并且可以移植 網(wǎng)絡(luò)上充滿了各種不同類型的機(jī)器和操作系統(tǒng),為使java程序能在網(wǎng)絡(luò)的任何地方運(yùn)行,java編譯器編譯生成了與體系結(jié)構(gòu)無(wú)關(guān)的字節(jié)碼結(jié)構(gòu)文件格式。任何種類的計(jì)算機(jī),只有在其處理器和操作系統(tǒng)上有java運(yùn)行時(shí)環(huán)境,字節(jié)碼文件就可以在該計(jì)
22、算機(jī)上運(yùn)行。即使是在單一系統(tǒng)的計(jì)算機(jī)上,結(jié)構(gòu)中立也有非常大的作用。隨著處理器結(jié)構(gòu)的不斷發(fā)展變化,程序員不得不編寫各種版本的程序以在不同的處理器上運(yùn)行,這使得開發(fā)出能夠在所有平臺(tái)上工作的軟件集合是不可能的。而使用java將使同一版本的應(yīng)用程序可以運(yùn)行在所有的平臺(tái)上。 體系結(jié)構(gòu)的中立也使得java系統(tǒng)具有可移植性。java運(yùn)行時(shí)系統(tǒng)可以移植到不同的處理器和操作系統(tǒng)上,java的編譯器是由java語(yǔ)言實(shí)現(xiàn)的,解釋器是由java語(yǔ)言和標(biāo)準(zhǔn)C語(yǔ)言實(shí)現(xiàn)的,因此可以較為方便的進(jìn)行移植工作。 4. 高性能 雖然java是解釋執(zhí)行的,但它仍然具有非常高的性能,在一些特定的CPU上,java
23、字節(jié)碼可以快速的轉(zhuǎn)換成為機(jī)器碼進(jìn)行執(zhí)行。而且java字節(jié)碼格式的設(shè)計(jì)就是針對(duì)機(jī)器碼的轉(zhuǎn)換,實(shí)際轉(zhuǎn)換時(shí)相當(dāng)簡(jiǎn)便,自動(dòng)的寄存器分配與編譯器對(duì)字節(jié)碼的一些優(yōu)化可使之生成高質(zhì)量的代碼。隨著java虛擬機(jī)的改進(jìn)和"即時(shí)編譯"(just in time)技術(shù)的出現(xiàn)使得java的執(zhí)行速度有了更大的提高。 5. 解釋執(zhí)行、多線程并且是動(dòng)態(tài)的 為易于實(shí)現(xiàn)跨平臺(tái)性,java設(shè)計(jì)成為解釋執(zhí)行,字節(jié)碼本身包含了許多編譯時(shí)生成的信息,使連接過程更加簡(jiǎn)單。而多線程使應(yīng)用程序可以同時(shí)進(jìn)行不同的操作,處理不同的事件。在多線程機(jī)制中,不同的線程處理不同的任務(wù),互不干涉,不會(huì)由于某一任務(wù)處于等待狀態(tài)而影響了其它任務(wù)的執(zhí)行
24、,這樣就可以容易的實(shí)現(xiàn)網(wǎng)絡(luò)上的實(shí)時(shí)交互操作。java在執(zhí)行過程中,可以動(dòng)態(tài)的加載各種類庫(kù),這一特點(diǎn)使之非常適合于網(wǎng)絡(luò)運(yùn)行,同時(shí)也非常有利于軟件的開發(fā),即使是更新類庫(kù)也不必重新編譯使用這一類庫(kù)的應(yīng)用程序。 如果你了解C語(yǔ)言和C++語(yǔ)言,可以參考下列java與C/C++語(yǔ)言的比較,如果不了解C語(yǔ)言和C++語(yǔ)言,可以忽略本部分知識(shí)。 a. 全局變量 java程序不能定義程序的全局變量,而類中的公共、靜態(tài)變量就相當(dāng)于這個(gè)類的全局變量。這樣就使全局變量封裝在類中,保證了安全性,而在C/C++語(yǔ)言中,由于不加封裝的全局變量往往會(huì)由于使用不當(dāng)而造成系統(tǒng)的崩潰。 b. 條件轉(zhuǎn)移指令
25、 C/C++語(yǔ)言中用goto語(yǔ)句實(shí)現(xiàn)無(wú)條件跳轉(zhuǎn),而java語(yǔ)言沒有g(shù)oto語(yǔ)言,通過例外處理語(yǔ)句try、catch、finally來(lái)取代之,提高了程序的可讀性,也增強(qiáng)了程序的魯棒性。 c. 指針 指針是C/C++語(yǔ)言中最靈活,但也是最容易出錯(cuò)的數(shù)據(jù)類型。用指針進(jìn)行內(nèi)存操作往往造成不可預(yù)知的錯(cuò)誤,而且,通過指針對(duì)內(nèi)存地址進(jìn)行顯示類型轉(zhuǎn)換后,可以類的私有成員,破壞了安全性。在java中,程序員不能進(jìn)行任何指針操作,同時(shí)java中的數(shù)組是通過類來(lái)實(shí)現(xiàn)的,很好的解決了數(shù)組越界這一C/C++語(yǔ)言中不做檢查的缺點(diǎn)。 d. 內(nèi)存管理 在C語(yǔ)言中,程序員使用庫(kù)函數(shù)mall
26、oc()和free()來(lái)分配和釋放內(nèi)存,C++語(yǔ)言中則是運(yùn)算符new和delete。再次釋放已經(jīng)釋放的內(nèi)存塊或者釋放未被分配的內(nèi)存塊,會(huì)造成系統(tǒng)的崩潰,而忘記釋放不再使用的內(nèi)存塊也會(huì)逐漸耗盡系統(tǒng)資源。在java中,所有的數(shù)據(jù)結(jié)構(gòu)都是對(duì)象,通過運(yùn)算符new分配內(nèi)存并得到對(duì)象的使用權(quán)。無(wú)用內(nèi)存回收機(jī)制保證了系統(tǒng)資源的完整,避免了內(nèi)存管理不周而引起的系統(tǒng)崩潰。 e. 數(shù)據(jù)類型的一致性 在C/C++語(yǔ)言中,不同的平臺(tái)上,編譯器對(duì)簡(jiǎn)單的數(shù)據(jù)類型如int、float等分別分配不同的字節(jié)數(shù)。例如:int在IBM PC上為16位,在VAX-11上就為32位,導(dǎo)致了代碼數(shù)據(jù)的不可移植。在java
27、中,對(duì)數(shù)據(jù)類型的位數(shù)分配總是固定的,而不管是在任何的計(jì)算機(jī)平臺(tái)上。因此就保證了java數(shù)據(jù)的平臺(tái)無(wú)關(guān)性和可移植性。 f. 類型轉(zhuǎn)換 在C/C++語(yǔ)言中,可以通過指針進(jìn)行任意的類型轉(zhuǎn)換,不安全因素大大增加。而在java語(yǔ)言中系統(tǒng)要對(duì)對(duì)象的處理進(jìn)行嚴(yán)格的相容性檢查,防止不安全的轉(zhuǎn)換。 g. 頭文件 在C/C++語(yǔ)言中使用頭文件聲明類的原型和全局變量及庫(kù)函數(shù)等,在大的系統(tǒng)中,維護(hù)這些頭文件是非常困難的。java不支持頭文件,類成員的類型和訪問權(quán)限都封裝在一個(gè)類中,運(yùn)行時(shí)系統(tǒng)對(duì)訪問進(jìn)行控制,防止非法的訪問。同時(shí),java中用import語(yǔ)句與其它類進(jìn)行通信,以便訪問其它
28、類的對(duì)象。 h. 結(jié)構(gòu)和聯(lián)合 C/C++語(yǔ)言中用結(jié)構(gòu)和聯(lián)合來(lái)表示一定的數(shù)據(jù)結(jié)構(gòu),但是由于其成員均為公有的,安全性上存在問題。java不支持結(jié)構(gòu)和聯(lián)合,通過類把數(shù)據(jù)結(jié)構(gòu)及對(duì)該數(shù)據(jù)的操作都封裝在類里面。 i. 預(yù)處理 C/C++語(yǔ)言中有宏定義,而用宏定義實(shí)現(xiàn)的代碼往往影響程序的可讀性,而java不支持宏定義。 1.2.5 java平臺(tái)-不斷擴(kuò)展的計(jì)算平臺(tái) java不僅是編程語(yǔ)言,還是一個(gè)開發(fā)平臺(tái),java技術(shù)給程序員提供了許多工具:編譯器、解釋器、文檔生成器和文件打包工具等等。同時(shí)java還是一個(gè)程序發(fā)布平臺(tái),有兩種主要的"發(fā)布環(huán)境",首先java運(yùn)行
29、時(shí)環(huán)境(java runtime environment,簡(jiǎn)稱JRE)包含了完整的類文件包,其次許多主要的瀏覽器都提供了java解釋器和運(yùn)行時(shí)環(huán)境。目前Sun公司把java平臺(tái)劃分成J2EE、J2SE、J2ME三個(gè)平臺(tái),針對(duì)不同的市場(chǎng)目標(biāo)和設(shè)備進(jìn)行定位。J2EE是Java2 Enterprise Edition,主要目的是為企業(yè)計(jì)算提供一個(gè)應(yīng)用服務(wù)器的運(yùn)行和開發(fā)平臺(tái)。J2EE本身是一個(gè)開放的標(biāo)準(zhǔn),任何軟件廠商都可以推出自己的符合J2EE標(biāo)準(zhǔn)的產(chǎn)品,使用戶可以有多種選擇。IBM、Oracle、BEA、HP等29家已經(jīng)推出了自己的產(chǎn)品,其中尤以BEA公司的weglogic產(chǎn)品和IBM公司的webs
30、phare最為著名。J2EE將逐步發(fā)展成為可以與微軟的.NET戰(zhàn)略相對(duì)抗的網(wǎng)絡(luò)計(jì)算平臺(tái)。J2SE是Java2 Standard Edition,主要目的是為臺(tái)式機(jī)和工作站提供一個(gè)開發(fā)和運(yùn)行的平臺(tái)。我們?cè)趯W(xué)習(xí)java的過程中,主要是采用J2SE來(lái)進(jìn)行開發(fā)。J2ME是Java2 Micro Edition,主要是面向消費(fèi)電子產(chǎn)品,為消費(fèi)電子產(chǎn)品提供一個(gè)java的運(yùn)行平臺(tái),使得java程序能夠在手機(jī)、機(jī)頂盒、PDA等產(chǎn)品上運(yùn)行。上述三個(gè)java平臺(tái)的關(guān)系如右圖所示。 1.3 一切都是對(duì)象 1.3.1 面向過程 面向?qū)ο蟮牡谝粋€(gè)原則是把數(shù)據(jù)和對(duì)該數(shù)據(jù)的操作都封裝在一個(gè)類中,在程序設(shè)計(jì)時(shí)要考慮
31、多個(gè)對(duì)象及其相互間的關(guān)系。有些功能并不一定由一個(gè)程序段完全實(shí)現(xiàn),可以讓其它對(duì)象來(lái)實(shí)現(xiàn),在本例中就由類Max完成求最大值的功能。而面向?qū)ο蟮牧硗庖粋€(gè)好處是實(shí)現(xiàn)代碼的重復(fù)使用,例如其它的程序中如果需要求最大值的功能,只需要通過類Max的對(duì)象就可以達(dá)到目的。但是如果象面向過程的代碼段那樣把求最大值的算法都實(shí)現(xiàn)在該代碼段中,則無(wú)法復(fù)用。 1.3.2 面向?qū)ο? 1. 所有的東西都是對(duì)象。 可以將對(duì)象想象成為一種新型變量,它保存著數(shù)據(jù),而且還可以對(duì)自身數(shù)據(jù)進(jìn)行操作。例如類Max中保留著數(shù)據(jù)的最大值,同時(shí)還有方法updateMax根據(jù)新加入的price值產(chǎn)生最新的最大值,還有g(shù)etMax方法返回
32、數(shù)據(jù)的最大值。 2. 程序是一大堆對(duì)象的組合。 通過消息傳遞,各對(duì)象知道自己應(yīng)該做些什么。如果需要讓對(duì)象做些事情,則須向該對(duì)象"發(fā)送一條消息"。具體來(lái)說(shuō),可以將消息想象成為一個(gè)調(diào)用請(qǐng)求,它調(diào)用的是從屬于目標(biāo)對(duì)象的一個(gè)方法。例如上面面向?qū)ο蟮某绦蚨螒?yīng)該是屬于某個(gè)類的,比如說(shuō)是屬于類Shopping,則Shopping中就包含了類Max的對(duì)象max,調(diào)用方法updateMax就相當(dāng)于Shopping對(duì)象對(duì)max對(duì)象發(fā)出一條指令"updateMax",要求對(duì)象max重新計(jì)算最大值。 3. 每個(gè)對(duì)象都有自己的存儲(chǔ)空間。 可容納其它對(duì)象,或者說(shuō)通過封裝現(xiàn)有的對(duì)象,可以產(chǎn)生新型對(duì)象。因
33、此,盡管對(duì)象的概念非常簡(jiǎn)單,但是經(jīng)過封裝以后卻可以在程序中達(dá)到任意高的復(fù)雜程度。 4. 每個(gè)對(duì)象都屬于某個(gè)類。 根據(jù)語(yǔ)法,每個(gè)對(duì)象都是某個(gè)"類"的一個(gè)"實(shí)例"。一個(gè)類的最重要的的特征就是"能將什么消息發(fā)給它?",也就是類本身有哪些操作。例如max是類Max的實(shí)例。 1.4 構(gòu)建java程序 1.4.1 第一個(gè)java application java程序分為java application(java 應(yīng)用程序)和java applet(java小應(yīng)用程序)兩種。下面讓我們編寫一個(gè)java應(yīng)用程序,它能夠利用來(lái)自java標(biāo)準(zhǔn)庫(kù)的System對(duì)象的多種方法,打印出與當(dāng)前運(yùn)行的系
34、統(tǒng)有關(guān)的資料。其中"http://"代表一種注釋方式,表示從這個(gè)符號(hào)開始到這行結(jié)束的所有內(nèi)容都是注釋。在每個(gè)程序文件的開頭,如果這個(gè)文件的代碼中用到了系統(tǒng)所提供的額外的類,就必須放置一個(gè)import語(yǔ)句。說(shuō)它是額外的是指一個(gè)特殊的類庫(kù)"java.lang"會(huì)自動(dòng)導(dǎo)入到每個(gè)java文件。 //這是我們的第一個(gè)java application,該程序保存在文件Property.java中 import java.util.*; /*下面我們用到了Date和Properties這兩個(gè)類,是 屬于java.util這個(gè)包的;*/ /*而System和Ru
35、ntime這兩個(gè)類,是屬于 java.lang這個(gè)包的。*/ public class Property { //程序員給這個(gè)類取名為Property public static void main(String args[]){ //main是類的主方法 System.out.println(new Date( )); //在命令行下面打印出日期 Properties p=System.getProperties( ); //獲得系統(tǒng)的Properties對(duì)象p p.list(System.out); //在命令行下打印出p中的各個(gè)系統(tǒng)變
36、量的值 System.out.println("--- Memory Usage:"); /*打印一行字符串---Memory Usage*/ Runtime rt=Runtime.getRuntime( ); //獲得系統(tǒng)的Runtime對(duì)象rt System.out.println("Total Memory= " + rt.totalMemory( ) //打印總內(nèi)存大小 +" Free Memory = " +rt.freeMemory( )); //打印空閑內(nèi)存大小 } }
37、 在java中,程序都是以類的方式組織的,java源文件都保存在以java為后綴的.java文件當(dāng)中。每個(gè)可運(yùn)行的程序都是一個(gè)類文件,或者稱之為字節(jié)碼文件,保存在.class文件中。而作為一個(gè)java application,類中必須包含主方法,程序的執(zhí)行是從main方法開始的,方法頭的格式是確定不變的: public static void main(String args[]) 其中關(guān)鍵字public意味著方法可以由外部世界調(diào)用。main方法的參數(shù)是一個(gè)字符串?dāng)?shù)組args,雖然在本程序中沒有用到,但是必須列出來(lái)。 程序的第一行非常有意思:
38、 System.out.println(new Date()); 打印語(yǔ)句的參數(shù)是一個(gè)日期對(duì)象Date,而創(chuàng)建Date對(duì)象的目的就是把它的值發(fā)給println()語(yǔ)句。一旦這個(gè)語(yǔ)句執(zhí)行完畢,Date對(duì)象就沒用了,而后"無(wú)用內(nèi)存回收器"會(huì)將其收回。 第二行中調(diào)用了System.getProperties( )。從幫助文檔中可知,getProperties( )是System類的一個(gè)靜態(tài)方法(static 方法),由于它是"靜態(tài)"的,所以不必創(chuàng)建任何對(duì)象就可以調(diào)用該方法。在第三行,Properties對(duì)象有一個(gè)名為list( )的方法,它將自己的全部?jī)?nèi)容都發(fā)給一個(gè)Print
39、Stream對(duì)象,該對(duì)象就是list()方法的參數(shù)。 第四行和第六行是典型的打印語(yǔ)句,其中第六行通過運(yùn)算符"+"的重載來(lái)連接多個(gè)字符串對(duì)象,在java中只有當(dāng)"+"運(yùn)算符作用于字符串時(shí)在能夠進(jìn)行重載。但是讓我們仔細(xì)觀察下述語(yǔ)句: System.out.println("Total Memory= " + rt.totalMemory( ) //打印總內(nèi)存大小 +" Free Memory = " +rt.freeMemory( )); //打印空閑內(nèi)存大小 其中,totalMemory( )和
40、freeMemory( )返回的是數(shù)值,并非String對(duì)象。如果將一個(gè)字符串與一個(gè)數(shù)值相加,結(jié)果會(huì)如何?在這種情況下,編譯器會(huì)自動(dòng)調(diào)用一個(gè)toString()方法,將該數(shù)值(int型或者float型)轉(zhuǎn)換成字符串。經(jīng)過這樣處理以后,就可以用"+"進(jìn)行字符串連接了。 main()的第五行通過調(diào)用Runtime的getRuntime()方法創(chuàng)建了一個(gè)Runtime對(duì)象,該對(duì)象中包含了內(nèi)存等信息。 1.4.2 java程序的編輯 java程序的編輯可以使用任何一種文本編輯器,例如UltraEdit、Notepad、Wordpad甚至word,然后只要把編輯好的文件存成.jav
41、a文件。當(dāng)然也可以用一些集成開發(fā)環(huán)境,例如Borland公司的JBuilder,IBM公司的Visualage for Java,此外還有cafe、kawa等其它集成開發(fā)環(huán)境。 1.4.3 java程序的編譯 Sun公司為全世界的java程序員提供了一個(gè)免費(fèi)的java程序開發(fā)包(Java Develop Kit,簡(jiǎn)稱JDK),其中包括了java編譯器命令"javac",以及java執(zhí)行命令"java",還有幫助文檔生成器命令"javadoc"等等。所有這些命令都可以在命令行下運(yùn)行,例如我們要編譯上述java文件Property.java,如果是在windows中進(jìn)行開發(fā),就可以在"命令
42、提示符"下進(jìn)行編譯,在命令行中敲入"javac Property.java",如圖1_4_1所示: 1.4.4 java application的執(zhí)行 當(dāng)編譯結(jié)束以后,在java源文件中的每一個(gè)類都會(huì)生成相應(yīng)的 .class 文件,例如上圖中就會(huì)生成一個(gè)Property.class文件,而java程序在執(zhí)行時(shí)調(diào)用的是.class 文件。Java application的執(zhí)行是在命令行下進(jìn)行的,如果是在windows系統(tǒng)中,就可以"命令提示符"下敲入"java Propery"進(jìn)行執(zhí)行,該"java"命令會(huì)啟動(dòng)java虛擬機(jī),并讀入Property.class文件進(jìn)行執(zhí)行。 由于該
43、程序的運(yùn)行結(jié)果直接在命令行下進(jìn)行輸出 1.4.5 第一個(gè)java applet java程序的另一種形式是java applet,applet沒有main()方法,它必須嵌在超文本文件中,在瀏覽器中進(jìn)行運(yùn)行。右面這個(gè)程序?qū)⒃跒g覽器中顯示一行字符串。 //這是我們的第一個(gè)java applet,該程序保存在文件HelloEducation.java中 import java.awt.Graphics; //在進(jìn)行顯示輸出時(shí),需要用到類Graphics的對(duì)象; import java.applet.Applet; //Applet類是所有的java applet的父類; pu
44、blic class HelloEducation extends Applet { //程序員給這個(gè)類取名為HelloEducation //所有的applet程序都是Applet類的子類 public String s; public void init() { // s=new String("Welcome to Tongfang Education"); //生成一個(gè)字符串對(duì)象 } public void paint(Graphics g){ g
45、.drawString(s,25,25); //在瀏覽器中坐標(biāo)為(25,25)的位置顯示字符串s } } applet程序是從方法init( )開始執(zhí)行的,在該方法中完成了對(duì)字符串s的初始化工作,而顯示功能是在方法paint( )中執(zhí)行的。paint( )方法是類Applet的一個(gè)成員方法,其參數(shù)是圖形對(duì)象Graphics g,通過調(diào)用對(duì)象g的drawString( )方法就可以顯示輸出。 1.4.6 java applet的執(zhí)行 java applet程序也是一個(gè)類,其編譯方式與java application完全一樣,
46、HelloEducation.java程序經(jīng)過編譯以后就生成了HelloEducation.class文件。java applet的執(zhí)行方式與java application完全不同,java applet程序必須嵌入到html文件中才能夠執(zhí)行,因此必須編寫相應(yīng)的html文件。下面為HelloEducaiton.html文件的內(nèi)容: 然后可以通過JDK所提供的命令"appletviewer",在命令行下面執(zhí)行java a
47、pplet程序。如果是在windows操作系統(tǒng)中,就可以在"命令提示符"下敲入"appletviewer HelloEducation.html",如圖1_4_4所示。 此時(shí)系統(tǒng)會(huì)彈出另外一個(gè)窗口運(yùn)行該applet程序,結(jié)果如圖1_4_5所示。 applet還可以采用另外一種方式運(yùn)行,那就是直接在瀏覽器中打開HelloEducation.html程序,結(jié)果如圖1_4_6所示。在主流的瀏覽器如IE、Netscape中都包含有java虛擬機(jī),負(fù)責(zé)解釋執(zhí)行java applet程序。 1.5 java程序規(guī)范 1.5.1 java源程序結(jié)構(gòu) 一個(gè)完整的java源程序應(yīng)該包括下列
48、部分: package語(yǔ)句; //該部分至多只有一句,必須放在源程序的第一句 import語(yǔ)句; /*該部分可以有若干import語(yǔ)句或者沒有,必須放在所有的 類定義之前*/ public classDefinition; //公共類定義部分,至多只有一個(gè)公共類的定義 //java語(yǔ)言規(guī)定該java源程序的文件名必須與該公共類名完全一致 classDefinition; //類定義部分,可以有0個(gè)或者多個(gè)類定義 interfaceDefinition; //接口定義部分,可以有0個(gè)或者多個(gè)接口定義 例如一個(gè)java源程序
49、可以是如下結(jié)構(gòu),該源程序命名為HelloWorldApp.java: package javawork.helloworld; /*把編譯生成的所有.class文件放到包 javawork.helloworld中*/ import java.awt.*; //告訴編譯器本程序中用到系統(tǒng)的AWT包 import javawork.newcentury; /*告訴編譯器本程序中用到用戶自定義 的包javawork.newcentury*/ public class HelloWorldA
50、pp{......} /*公共類HelloWorldApp的定義, 名字與文件名相同*/ class TheFirstClass{......} //第一個(gè)普通類TheFirstClass的定義 class TheSecondClass{......} //第二個(gè)普通類TheSecondClass的定義 ...... //其它普通類的定義 interface TheFirstInterface{......} /*第一個(gè)接口 TheFirstInte
51、rface的定義*/ ...... //其它接口定義 package語(yǔ)句:由于java編譯器為每個(gè)類生成一個(gè)字節(jié)碼文件,且文件名與類名相同,因此同名的類有可能發(fā)生沖突。為了解決這一問題,java提供包來(lái)管理類名空間,包實(shí)際提供了一種命名機(jī)制和可見性限制機(jī)制。而在java的系統(tǒng)類庫(kù)中,把功能相似的類放到一個(gè)包(package)中,例如所有的圖形界面的類都放在java.awt這個(gè)包中,與網(wǎng)絡(luò)功能有關(guān)的類都放到這個(gè)包中。用戶自己編寫的類(指.class文件)也應(yīng)該按照功能放在由程序員自己命名的相應(yīng)的包中,例如上例中的javawork.helloworld
52、就是一個(gè)包。包在實(shí)際的實(shí)現(xiàn)過程中是與文件系統(tǒng)相對(duì)應(yīng)的,例如javawork.helloworld所對(duì)應(yīng)的目錄是path\javawork\helloworld,而path是在編譯該源程序時(shí)指定的。比如在命令行中編譯上述HelloWorldApp.java文件時(shí),可以在命令行中敲入"javac -d f:\javaproject HelloWorldApp.java",則編譯生成的HelloWorldApp.class文件將放在目錄f:\javaproject\javawork\helloworld\目錄下面,此時(shí)f:\javaprojcet相當(dāng)于path。但是如果在編譯時(shí)不指定path,則生成
53、的.class文件將放在編譯時(shí)命令行所在的當(dāng)前目錄下面。比如在命令行目錄f:\javaproject下敲入編譯命令"javac HelloWorldApp.java",則生成的HelloWorldApp.class文件將放在目錄f:\javaproject下面,此時(shí)的package語(yǔ)句相當(dāng)于沒起作用。 但是,如果程序中包含了package語(yǔ)句,則在運(yùn)行時(shí)就必須包含包名。例如,HelloWorldApp.java程序的第一行語(yǔ)句是:package p1.p2;編譯的時(shí)候在命令行下輸入"javac -d path HelloWorldApp.java",則HelloWorldApp.cl
54、ass將放在目錄path\p1\p2的下面,這時(shí)候運(yùn)行該程序時(shí)有兩種方式: 第一種:在命令行下的path目錄下輸入字符"java p1.p2.HelloWorldApp"。 第二種:在環(huán)境變量classpath中加入目錄path,則運(yùn)行時(shí)在任何目錄下輸入"java p1.p2.HelloWorldApp"即可。 import語(yǔ)句:如果在源程序中用到了除java.lang這個(gè)包以外的類,無(wú)論是系統(tǒng)的類還是自己定義的包中的類,都必須用import語(yǔ)句標(biāo)識(shí),以通知編譯器在編譯時(shí)找到相應(yīng)的類文件。例如上例中的java.awt是系統(tǒng)的包,而javawork.newcentury是用
55、戶自定義的包。比如程序中用到了類Button,而Button是屬于包java.awt的,在編譯時(shí)編譯器將從目錄classpath\java\awt中去尋找類Button,classpath是事先設(shè)定的環(huán)境變量,比如可以設(shè)為:classpath=.;d:\jdk1.3\lib\。 classpath也可以稱為類路徑,需要提醒大家注意的是,在classpath中往往包含多個(gè)路徑,用分號(hào)隔開。例如classpath=.;d:\jdk1.3\lib\中的第一個(gè)分號(hào)之前的路徑是一個(gè)點(diǎn),表示當(dāng)前目錄,分號(hào)后面的路徑是d:\jdk1.3\lib\,表示系統(tǒng)的標(biāo)準(zhǔn)類庫(kù)目錄。在編譯過程中尋找類時(shí),先從環(huán)境變量c
56、lasspath的第一個(gè)目錄開始往下找,比如先從當(dāng)前目錄往下找java.awt中的類Button時(shí),編譯器找不著,然后從環(huán)境變量classpath的第二個(gè)目錄開始往下找,就是從系統(tǒng)的標(biāo)準(zhǔn)類庫(kù)目錄d:\jdk1.3\lib開始往下找java.awt的Button這個(gè)類,最后就找到了。如果要從一個(gè)包中引入多個(gè)類則在包名后加上".*"表示。 如果程序中用到了用戶自己定義的包中的類,假如在上面程序中要用到j(luò)avawork.newcentury包中的類HelloWorldApp,而包javawork.newcentury所對(duì)應(yīng)的目錄是f:\javaproject\javawork\newcentu
57、ry,classpath仍舊是classpath=.;d:\jdk1.3\lib\,則編譯器在編譯時(shí)將首先從當(dāng)前目錄尋找包javawork.newcentury,結(jié)果是沒有找到;然后又從環(huán)境變量classpath的第二個(gè)目錄d:\jdk1.3\lib\開始往下找,但是仍然沒有找到。原因在于包javawork.newcentury是放在目錄f:\javaproject下面。因此,需要重新設(shè)定環(huán)境變量classpath,設(shè)為classpath=.;d:\jdk1.3\lib\;f:\javaproject\ 。所以編譯器從f:\javaproject開始找包javawork.newcentury就
58、可以找到。 源文件的命名規(guī)則:如果在源程序中包含有公共類的定義,則該源文件名必須與該公共類的名字完全一致,字母的大小寫都必須一樣。這是java語(yǔ)言的一個(gè)嚴(yán)格的規(guī)定,如果不遵守,在編譯時(shí)就會(huì)出錯(cuò)。因此,在一個(gè)java源程序中至多只能有一個(gè)公共類的定義。如果源程序中不包含公共類的定義,則該文件名可以任意取名。如果在一個(gè)源程序中有多個(gè)類定義,則在編譯時(shí)將為每個(gè)類生成一個(gè).class文件。 1.5.2 java編程規(guī)范 軟件開發(fā)是一個(gè)集體協(xié)作的過程,程序員之間的代碼是經(jīng)常要進(jìn)行交換閱讀的,因此,java源程序有一些約定成俗的命名規(guī)定,主要目的是為了提高java程序的可讀性。 包名:包名
59、是全小寫的名詞,中間可以由點(diǎn)分隔開,例如:java.awt.event; 類名:首字母大寫,通常由多個(gè)單詞合成一個(gè)類名,要求每個(gè)單詞的首字母也要大寫,例如class HelloWorldApp; 接口名:命名規(guī)則與類名相同,例如interface Collection; 方法名:往往由多個(gè)單詞合成,第一個(gè)單詞通常為動(dòng)詞,首字母小寫,中間的每個(gè)單詞的首字母都要大寫,例如:balanceAccount, isButtonPressed; 變量名:全小寫,一般為名詞,例如:length; 常量名:基本數(shù)據(jù)類型的常量名為全大寫,如果是由多個(gè)單詞構(gòu)成,可以用下劃線隔開,例如:int YEAR,
60、 int WEEK_OF_MONTH;如果是對(duì)象類型的常量,則是大小寫混合,由大寫字母把單詞隔開。 1.5.3 java幫助文檔 java中所有類庫(kù)的介紹都保存在java幫助文檔中,程序員在編程過程中,必須查閱該幫助文檔,了解系統(tǒng)提供的類的功能、成員方法、成員變量等等信息以后,才能夠更好的編程。同時(shí),java開發(fā)工具包(JDK)提供了 "java"、"javac"、"javadoc"、 "appletviewer"等命令,在java幫助文檔中也對(duì)此進(jìn)行了詳細(xì)的介紹。java幫助文檔是以HTML文件的形式組織,通常是安裝在JDK目錄下的docs子目錄中的index.html文件,所以
61、用瀏覽器就可以進(jìn)行查閱。例如JDK是安裝在D:\jdk1.3目錄下面,則用瀏覽器打開D:\jdk1.3\docs\index.html文件,就可以看到圖1_5_1所示的幫助文檔。 如果希望查閱JDK的命令,則可以選擇"Tool Documentation",如圖1_5_2紅字所示。 此時(shí)瀏覽器就會(huì)把java、javac、javadoc、appletviewer等命令列出來(lái),如圖1_5_3。 但是大多時(shí)時(shí)候,我們需要查閱的是類庫(kù)的文檔,因此需要在"D:\jdk1.3\docs\index.html"文件中選擇"Java 2 Platform API Specification"
62、,如圖1_5_4中紅字所示。 然后就進(jìn)入了詳細(xì)的類庫(kù)介紹,如圖1_5_5所示。 圖中左上部分列出了java標(biāo)準(zhǔn)類庫(kù)中的各個(gè)包,例如第一個(gè)是java.applet包,與java applet有關(guān)的類都放在這個(gè)包中,第二個(gè)是java.awt包,有關(guān)圖形界面的類都放在這個(gè)包中。如果選擇了包java.awt,則圖中左下部分就會(huì)列出java.awt包所包含的所有的類(class)、接口(interface)、例外(Exception)和錯(cuò)誤(Error)。如果選擇了類Button,則在圖中右邊空間內(nèi)將顯示該類的詳細(xì)介紹,包括:該類的父類、實(shí)現(xiàn)的接口、功能介紹、構(gòu)造方法、成員方
63、法、成員變量、從父類繼承的成員方法、從父類和接口繼承的成員變量、每個(gè)成員方法的具體介紹。 如果程序員知道某個(gè)成員方法或者成員變量的名字,但是并不知道它屬于哪個(gè)類,則可以通過選擇圖中右上的"Index",就會(huì)按照字母表順序列出所有的成員方法、成員變量、類和接口。"Index"旁邊的"Tree"可以把所有的類按照繼承關(guān)系列出來(lái)。 1.5.4 java注釋 單行注釋:從"http://"開始到本行結(jié)束的內(nèi)容都是注釋,例如: //這是一行單行注釋 //則是另一行單行注釋 多行注釋:在"/*"和"*/"之間的所有內(nèi)容都是注釋,例如: /*這是
64、一段注釋分布在多行之中*/ 文檔注釋:在注釋方面java提供一種C/C++所不具有的文檔注釋方式。其核心思想是當(dāng)程序員編完程序以后,可以通過JDK提供的javadoc命令,生成所編程序的API文檔,而該文檔中的內(nèi)容主要就是從文檔注釋中提取的。該API文檔以HTML文件的形式出現(xiàn),與java幫助文檔的風(fēng)格與形式完全一致。凡是在"/**"和"*/"之間的內(nèi)容都是文檔注釋。例如下面的DocTest.java文件: /** 這是一個(gè)文檔注釋的例子,主要介紹下面這個(gè)類 */ public class DocTest{ /** 變量注釋,下面這個(gè)變量
65、主要是充當(dāng)整數(shù)計(jì)數(shù) */ public int i; /** 方法注釋,下面這個(gè)方法的主要功能是計(jì)數(shù) */ public void count( ) {} } 1.6 建立java開發(fā)環(huán)境 1.6.1 安裝Java Develop Kit(JDK) Sun公司為所有的java程序員提供了一套免費(fèi)的java開發(fā)和運(yùn)行環(huán)境,取名為Java2 SDK,可以從上進(jìn)行下載,也可以從同方教育網(wǎng)站上下載。但是最新的消息和版本必須從Sun的網(wǎng)站上才能夠得到。安裝的時(shí)候可以選擇安裝到任意的硬盤驅(qū)動(dòng)器上,例如安裝到D:\jd
66、k1.3目錄下。通常在JDK目錄下有bin、demo、lib、jre等子目錄,其中bin目錄保存了javac、java、appletviewer等命令文件,demo目錄保存了許多java的例子,lib目錄保存了java的類庫(kù)文件,jre保存的是java的運(yùn)行時(shí)環(huán)境。 1.6.2 安裝java幫助文檔 由于JDK的安裝程序中并不包含幫助文檔,因此也必須從Sun的網(wǎng)站上下載進(jìn)行安裝。通常安裝在JDK所在目錄的docs子目錄下面。用瀏覽器打開docs子目錄下的index.html文件就可以閱讀所有的幫助文檔。 1.6.3 配置類路徑 在安裝完JDK之后,必須配置類路徑classpath和環(huán)境變量path,JDK才能夠正常運(yùn)行。如果是在windows98中運(yùn)行,則在 C:\autoexec.bat文件的末尾添加下列語(yǔ)句: classpath= .;d:\jdk1.3\lib; path=%path%;d:\jdk1.3\bin; 如果是在windows2000中,則需要用右鍵單擊桌面上"我的電腦",選擇
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版地理七年級(jí)下冊(cè)--極地地區(qū)課件
- 備選方案與f課件
- 行程問題 順流逆流
- 班集體特色創(chuàng)建
- 發(fā)電廠的控制系統(tǒng)綜述
- 英語(yǔ)專業(yè)四級(jí)考試閱讀技巧新
- 小說(shuō)中的環(huán)境描寫
- 典案二PPT教學(xué)案例SectionA2
- 血液透析患者動(dòng)靜脈內(nèi)瘺閉塞的原因及防護(hù)課件
- 運(yùn)動(dòng)快慢與方向的描述——速度課件
- 新概念第一冊(cè)lesson78ppt課件
- 原電池公開課修改課件
- 檢量具使用方法和注意事項(xiàng)課件
- 中考賓語(yǔ)從句復(fù)習(xí)PPT課件2
- 不用文字的書和信