基于J2SE 7.0進(jìn)行GUI編程_第1頁(yè)
基于J2SE 7.0進(jìn)行GUI編程_第2頁(yè)
基于J2SE 7.0進(jìn)行GUI編程_第3頁(yè)
基于J2SE 7.0進(jìn)行GUI編程_第4頁(yè)
基于J2SE 7.0進(jìn)行GUI編程_第5頁(yè)
已閱讀5頁(yè),還剩267頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Java教程目錄第一章Java入門(mén)第二章面向?qū)ο缶幊痰谌聵?biāo)識(shí)符、關(guān)鍵字和數(shù)據(jù)類(lèi)型第四章表達(dá)式和流程控制基于J2SE7.0進(jìn)行GUI編程第五章數(shù)組第六章類(lèi)設(shè)計(jì)第七章高級(jí)類(lèi)特性第八章異常和斷言第十章建立JavaGUI第十一章GUI事件處理第十二章基于GUI的應(yīng)用程序第十三章線(xiàn)程第十四章高級(jí)I/O流第十五章網(wǎng)絡(luò)連接第十六章注解與反射第十七章JDBC簡(jiǎn)介第十八章使用JDBC高級(jí)特性第九章基于文本的應(yīng)用程序基于J2SE7.0進(jìn)行GUI編程----引言一、Java發(fā)展歷史

1990年12月,Sun的工程師Patrick(帕特里克)和JamesGosling(詹姆斯.加索林)為嵌入式設(shè)備開(kāi)發(fā)一種新的基礎(chǔ)平臺(tái)技術(shù),項(xiàng)目名為"Green",JamesGosling在使用C++做開(kāi)發(fā)時(shí),碰了一頭包,所以決定開(kāi)發(fā)一種新的編程語(yǔ)言來(lái)實(shí)現(xiàn)這個(gè)項(xiàng)目,這個(gè)小語(yǔ)言隨后被命名為Oak(橡樹(shù))。

1992年9月,Oak語(yǔ)言連同GreenOS(操作系統(tǒng))和一些應(yīng)用程序被用于投標(biāo)時(shí)代華納公司的機(jī)頂盒項(xiàng)目,但因?yàn)楣δ芴珡?qiáng)大給客戶(hù)太多權(quán)利遭遇失敗。

1993年的美國(guó),互聯(lián)網(wǎng)發(fā)展迅猛,1994年,Sun定位互聯(lián)網(wǎng),與此同時(shí)Sun將Oak命名為Java(爪哇,一種咖啡的名稱(chēng)),并用此針對(duì)互聯(lián)網(wǎng)開(kāi)發(fā),誕生了Applet(瀏覽器java小應(yīng)用程序),在瀏覽器端炫目的表現(xiàn)征服了互聯(lián)網(wǎng)開(kāi)發(fā)者,并一發(fā)不可收拾。

1995年,Sun正式對(duì)外公布了Java,并且發(fā)布了JDK1.0,即JavaDevelopmentKit,Java開(kāi)發(fā)人員工具包。這種外形酷似C++,卻包含一顆Smalltalk般純潔的面向?qū)ο笾牡娜鲁绦蛟O(shè)計(jì)語(yǔ)言及其平臺(tái),幾乎在一夜之間就成為軟件產(chǎn)業(yè)的新寵兒。

1996年,Sun正式發(fā)布Java1.0,同時(shí)召開(kāi)第一屆"JavaOne"大會(huì)。引起了當(dāng)時(shí)眾多知名廠(chǎng)商追隨,包括NetScape(網(wǎng)景)、惠普、IBM、Oracle、Sybase等公司。

1997年,Sun發(fā)布JDK1.1,微軟VJ++6.0加入支持、JBuilder加入支持?;贘2SE7.0進(jìn)行GUI編程----引言1998-1999年,Sun發(fā)布JDK1.2(Java2SDKv1.2StandardEdition),將Java版本更名為2.0。同時(shí)將Java定位三個(gè)方向,即Java2StandardEdition(J2SE),Java2EnterpriseEdition(J2EE),Java2MicroEdition(J2ME)。J2SE定位于基于桌面應(yīng)用開(kāi)發(fā),J2EE定位于基于企業(yè)級(jí)服務(wù)器端應(yīng)用開(kāi)發(fā),J2ME定位于嵌入式設(shè)備(包括手機(jī))應(yīng)用開(kāi)發(fā)。其中J2EE后來(lái)得到了飛速發(fā)展,同時(shí)J2ME也在嵌入式開(kāi)發(fā),猶其手機(jī)開(kāi)發(fā)中得到了廣泛應(yīng)用,但J2SE中的AWT(抽象窗口工具包)/Swing(圖象處理包)卻使終被人們所詬病。

2000-2001年,Sun發(fā)布J2SE(Java2StandardEdition)1.32001年,Sun發(fā)布J2EE(Java2EnterpriseEdition)1.32002年,Sun發(fā)布J2SE1.4,自此Java的計(jì)算能力有了大幅提升。2002年,Sun發(fā)布J2EE1.42004年,Sun發(fā)布J2SE1.5,并同時(shí)更名為J2SE5.0

2005年,JavaOne大會(huì)召開(kāi),SUN公司公開(kāi)JavaSE6.0,并同時(shí)將Java的各種版本名稱(chēng)中的數(shù)字"2"取消:J2EE更名為JavaEE,J2SE更名為JavaSE,J2ME更名為JavaME。

2006年,SUN公司宣布Java全線(xiàn)采納GNUGeneralPublicLicenseVersion2(GNU通用公共許可證),從而公開(kāi)了Java的源代碼。到現(xiàn)在為此,Java最成熟的應(yīng)用仍然J2EE,在嵌入式設(shè)備中J2ME發(fā)展的也相當(dāng)不錯(cuò),J2ME需要它自己的JDK,而J2EE需要以J2SE做為基礎(chǔ)。目前J2EE用的最多的還是J2EE1.4版本,JavaEE是J2EE的最新版本,引入了JDK5.0及6.0新的特性與技術(shù)。

Sun是java的發(fā)明者,但是卻幾乎沒(méi)有從java身上掙到一分錢(qián),java的最大受益者是IBM,其次是Bea、oracle等。基于J2SE7.0進(jìn)行GUI編程----引言

二、Java的三個(gè)版本:Java2.0(JDK1.2)開(kāi)始,JDK分為三個(gè)版本J2EE(企業(yè)級(jí)版本)J2SE(標(biāo)準(zhǔn)版本)J2ME(微型版本)J2ME基于J2SE7.0進(jìn)行GUI編程----第一章Java入門(mén)本章主要介紹了Java的特性、Java核心技術(shù)的實(shí)現(xiàn)及功能,并通過(guò)一個(gè)簡(jiǎn)單的Java應(yīng)用程序介紹了如何對(duì)Java程序進(jìn)行編寫(xiě)、編譯及運(yùn)行,同時(shí)對(duì)編譯及運(yùn)行時(shí)錯(cuò)誤進(jìn)行處理。1.1什么是JavaTM技術(shù)?首先,Java是一種編程語(yǔ)言;其次,Java還是一種開(kāi)發(fā)環(huán)境;再次,Java還是一種應(yīng)用程序環(huán)境;最后,Java是一種部署環(huán)境。

Java編程語(yǔ)言的語(yǔ)法與C++(包括C#)的語(yǔ)法相似。任何傳統(tǒng)編程語(yǔ)言所能創(chuàng)建的應(yīng)用程序,都可以用Java編程來(lái)創(chuàng)建。作為開(kāi)發(fā)環(huán)境,Java提供了一系列的工具來(lái)實(shí)現(xiàn)軟件開(kāi)發(fā)。包括:Java編譯器、解釋器、產(chǎn)品文檔生成器、類(lèi)文件打包工具等。

Java提供了對(duì)多種環(huán)境的支持,包括萬(wàn)維網(wǎng)(Web)及瀏覽器環(huán)境,在萬(wàn)維網(wǎng)(Web)服務(wù)器端Java提供了J2EE技術(shù)以開(kāi)發(fā)基于互聯(lián)網(wǎng)的企業(yè)級(jí)應(yīng)用開(kāi)發(fā)環(huán)境。在瀏覽器環(huán)境,Java提供了Java應(yīng)用小程序(Applet)來(lái)實(shí)現(xiàn)瀏覽器端特殊效果及功能的開(kāi)發(fā),Applet駐留在Web服務(wù)器中,但在瀏覽器端被下載并于瀏覽器中執(zhí)行,而且它可以與HTML進(jìn)行交互。

Java應(yīng)用程序是獨(dú)立的應(yīng)用程序,并可以跨平臺(tái)在多種環(huán)境中被執(zhí)行。只要在相應(yīng)的平臺(tái)中安裝了該平臺(tái)的Java運(yùn)行時(shí)環(huán)境(JRE,JavaRuntimeEnvironment)。Sun公司、IBM、Bea、Oracle等都開(kāi)發(fā)了相應(yīng)版本的JRE,可用于不同的操作系統(tǒng)及平臺(tái)。Java遵循"一次編寫(xiě),到處運(yùn)行"的跨平臺(tái)理論,這使得Java風(fēng)靡全球?;贘2SE7.0進(jìn)行GUI編程----第一章Java入門(mén)

Java有兩個(gè)主要的部署環(huán)境,第一個(gè)是Java2SDK(Java2軟件開(kāi)發(fā)工具包)中的JRE,它提供了標(biāo)準(zhǔn)的Java開(kāi)發(fā)、編譯及運(yùn)行環(huán)境,是最主要的部署環(huán)境;第二個(gè)是適用于Web瀏覽器的JRE,大多數(shù)瀏覽器廠(chǎng)商都提供了瀏覽器環(huán)境的解釋器和運(yùn)行環(huán)境JRE。1.2Java技術(shù)的主要目標(biāo)

Java語(yǔ)言由C++發(fā)展而來(lái),但Java語(yǔ)言是簡(jiǎn)單的易于使用的編程語(yǔ)言。從歷史角度來(lái)說(shuō):

Java語(yǔ)言="C++語(yǔ)言"–"C++中的復(fù)雜性和奇異性"+"安全性和可移植性"1、易于編程的語(yǔ)言

1)摒棄了C++中容易引發(fā)程序錯(cuò)誤的一些特性及復(fù)雜特性,如指針及內(nèi)存管理,并能進(jìn)行自動(dòng)內(nèi)存管理,不用象C++一樣需要自己管理內(nèi)存的分配與釋放。

2)完全面向?qū)ο笞詈诵牡臇|西是類(lèi)與對(duì)象OO語(yǔ)言以類(lèi)的形式組織代碼并具有封裝、繼承、多態(tài)特性

3)、提供了豐富的類(lèi)庫(kù),即SDK(SoftwareDevelopmentKit,軟件開(kāi)發(fā)包),使用這些類(lèi)庫(kù)有助于你簡(jiǎn)化代碼

2、解釋環(huán)境的特性:

1)、開(kāi)發(fā)速度大大提高:縮短編譯—鏈接—加載時(shí)間,縮短測(cè)試周期

2)、代碼可移植性:解釋環(huán)境執(zhí)行的是非常接近于機(jī)器語(yǔ)言代碼的Java二進(jìn)制代碼,所以?xún)H與JVM(JavaVirtualMachine)有關(guān),與操作系統(tǒng)無(wú)關(guān),這導(dǎo)致代碼可以容易在多個(gè)操作系統(tǒng)中運(yùn)行。五月花NIIT軟件開(kāi)發(fā)基于J2SE7.0進(jìn)行GUI編程----第一章Java入門(mén)

3、支持多線(xiàn)程編程,提高應(yīng)用程序性能

4、允許程序下載代碼模塊,使得在程序運(yùn)行時(shí)周期內(nèi)可動(dòng)態(tài)改變程序的方法

5、通過(guò)檢查加載的代碼模塊來(lái)確定代碼安全性(類(lèi)加載器)

為了實(shí)現(xiàn)上述Java目標(biāo)與特性,Java使用了自己獨(dú)立的核心技術(shù):

1、JVM:JavaVirtualMachine虛擬機(jī),這是Java技術(shù)得以實(shí)現(xiàn)的最重要的技術(shù)和核心技術(shù),不同的操作系統(tǒng)甚至手機(jī)操作系統(tǒng)都有不同的JVM版本,只要安裝了相應(yīng)版本的JVM,你的系統(tǒng)就支持Java程序。JVM通常是集成中JRE中。2、垃圾回收(GC):

Java使用垃圾回收技術(shù)實(shí)現(xiàn)自動(dòng)內(nèi)存管理、碎片收集,防止了內(nèi)存分配問(wèn)題,提高了開(kāi)發(fā)效率。3、Java運(yùn)行時(shí)環(huán)境JRE:通過(guò)JRE對(duì)程序進(jìn)行解釋、實(shí)時(shí)編譯從而執(zhí)行Java代碼。

4、JVM應(yīng)用程序接口(API):即Java核心類(lèi)庫(kù)1.2.1Java虛擬機(jī)JVM

JVM指的是在真實(shí)的計(jì)算機(jī)中使用用軟件模擬實(shí)現(xiàn)的一種虛擬機(jī)器。JVM只能運(yùn)行非常接近本地硬件及操作系統(tǒng)的二進(jìn)制代碼(字節(jié)碼,bytecode),這些代碼必須存儲(chǔ)在.class文件中,每個(gè).class文件最多包含一個(gè)public類(lèi),這個(gè)類(lèi)我們稱(chēng)之為主類(lèi)。

JVM提供了編譯所有Java技術(shù)代碼的硬件平臺(tái)規(guī)范,這個(gè)規(guī)范與任何一個(gè)具體的操作系統(tǒng)及硬件都沒(méi)有任何關(guān)系,所以JVM是使用Java軟件技術(shù)規(guī)范實(shí)現(xiàn)的通用機(jī)?;贘2SE7.0進(jìn)行GUI編程----第一章Java入門(mén)通過(guò)使用Java編譯器(javac程序)可以將Java源程序文件(.java文件)編譯為Java字節(jié)碼文件(.class文件)。字節(jié)碼是JVM的這個(gè)虛擬機(jī)器的機(jī)器語(yǔ)言指令代碼,但它并不是當(dāng)前操作系統(tǒng)及硬件能夠直接執(zhí)行的機(jī)器語(yǔ)言代碼。

Java應(yīng)用程序主要包括兩大類(lèi):JavaApplication應(yīng)用程序和JavaApplet小應(yīng)用程序。分別運(yùn)行于標(biāo)準(zhǔn)平臺(tái)和瀏覽器環(huán)境。無(wú)論哪種應(yīng)用程序,都需要一個(gè)JVM的實(shí)現(xiàn)。

JVM規(guī)范定義為:一套指令系統(tǒng)(類(lèi)似于CPU指令系統(tǒng))、一組寄存器、類(lèi)文件格式、運(yùn)行時(shí)堆棧、垃圾回收堆、一個(gè)內(nèi)存區(qū)、致命錯(cuò)誤報(bào)告機(jī)制和高精度計(jì)時(shí)支持。

JVM的代碼格式由簡(jiǎn)潔、高效的字節(jié)碼構(gòu)成。Java仍然是一個(gè)嚴(yán)格的面向?qū)ο蟮木幊陶Z(yǔ)言,所以絕大部份錯(cuò)誤都將在編譯時(shí)被檢查出來(lái)。這保證了字節(jié)碼的健壯與安全特性。不同的操作系統(tǒng)平臺(tái)有不同的JVM。而且不同的公司有不同JVM,IBM公司有IBM公司的JVM,Bea公司有Bea的JVM(JRockit),Sun公司有Sun的JVM(Hotspot)。無(wú)論在linux/unix或Windows平臺(tái)上,Bea的JRockit與IBM的JVM性能表現(xiàn)不相上下,Bea稍快。而Sun的JVM(Hotspot)性能都要慢很多,Sun的Hotspot在Linux/unix下的表現(xiàn)要比在Windows下的表現(xiàn)差。所以Sun的JVM比較適合做開(kāi)發(fā),而客戶(hù)目標(biāo)平臺(tái)上常常使用Bea或者IBM的JVM。

Java字節(jié)碼沒(méi)有保存特定平臺(tái)的信息,具體與特定平臺(tái)交互由JVM實(shí)現(xiàn)?;贘2SE7.0進(jìn)行GUI編程----第一章Java入門(mén)注:SPARC,全稱(chēng)為"可擴(kuò)充處理器架構(gòu)"(ScalableProcessorARChitecture),是RISC微處理器架構(gòu)之一。是Sun公司推出的,最多支持1000個(gè)處理器CPU。SPARC處理器是Sun的命脈,以UltraSPARC為基礎(chǔ)的Unix服務(wù)器為Sun帶進(jìn)大量營(yíng)收收入,包括在這個(gè)平臺(tái)上Sun實(shí)現(xiàn)的SolarisOS操作系統(tǒng)。MIPSPPC是嵌入式設(shè)備處理器,RTOS為嵌入式設(shè)備操作系統(tǒng),即實(shí)時(shí)操作系統(tǒng)。基于J2SE7.0進(jìn)行GUI編程----第一章Java入門(mén)1.2.2垃圾回收在C、C++等語(yǔ)言中,程序員往往在編寫(xiě)程序時(shí),常常需要使用內(nèi)存、分配內(nèi)存,并且程序員還需要手工釋放所用的內(nèi)存,否則可能帶來(lái)系統(tǒng)崩潰和內(nèi)存泄露等嚴(yán)格安全及穩(wěn)定問(wèn)題。而java支持垃圾回收,程序員現(xiàn)在可以不用再為手工釋放程序占用的內(nèi)存而煩惱了,這將由垃圾回收器(GC)幫助我們自動(dòng)完成,垃圾回收器自動(dòng)檢查對(duì)象是否被引用,如果對(duì)象沒(méi)有被任何其它對(duì)象引用,垃圾回收器將回收此對(duì)象。垃圾回收在JavaVM的整個(gè)生命周期中自動(dòng)進(jìn)行,它消除了手工釋放內(nèi)存的問(wèn)題并避免了內(nèi)存泄露,大大提高了軟件的開(kāi)發(fā)周期。不同的JVM對(duì)垃圾回收的實(shí)現(xiàn)可能不同。1.2.3Java運(yùn)行時(shí)環(huán)境JRE一、JDK技術(shù):JDK(JavaSoftwareDevelopmentKit,Java軟件開(kāi)發(fā)包)

JDK(JavaSoftwareDevelopmentKit)是SunMicrosystems針對(duì)Java開(kāi)發(fā)員的產(chǎn)品。自從Java推出以來(lái),JDK已經(jīng)成為使用最廣泛的JavaSDK(SoftwareDevelopmentkit)。JDK是整個(gè)Java的核心,包括了Java運(yùn)行環(huán)境(JavaRuntimeEnvironment,即JRE),一堆Java工具和Java基礎(chǔ)的類(lèi)庫(kù)(例如rt.jar)。不論什么Java應(yīng)用服務(wù)器實(shí)質(zhì)都是內(nèi)置了某個(gè)版本的JDK。因此掌握J(rèn)DK是學(xué)好Java的第一步。最主流的JDK是Sun公司發(fā)布的JDK,除了Sun之外,還有很多公司和組織都開(kāi)發(fā)了自己的JDK,例如IBM、BEA等。JDK的主要目的是利用JDK所提供的工具將Java源程序(.java文件)基于J2SE7.0進(jìn)行GUI編程----第一章Java入門(mén)編譯為Java字節(jié)碼文件(.class文件),同時(shí)JDK也提供了我們開(kāi)發(fā)人員所必須的Java基礎(chǔ)類(lèi)庫(kù)。JDK從1.0到現(xiàn)在的1.6,經(jīng)歷了多個(gè)版本,JDK從1.5版本開(kāi)始不再稱(chēng)之為1.5了而是稱(chēng)之為5.0,例如JDK1.6已經(jīng)改名為JDK6.0,雖然有很多人仍然沿用習(xí)慣,但Sun官方版本命名已改變。在JDK5.0中,Java引入了枚舉、泛型、注解等很多新特性。每個(gè)JDK版本安裝后,都會(huì)自動(dòng)安裝相應(yīng)版本的JRE。二、JRE技術(shù)(JavaRuntimeEnvironment,Java運(yùn)行環(huán)境)JRE為JavaRunTimeEnvirment的簡(jiǎn)稱(chēng),它是指運(yùn)行JAVA程序所必須的環(huán)境的集合,包含JVM標(biāo)準(zhǔn)實(shí)現(xiàn)及Java核心類(lèi)庫(kù)。JRE又分為兩類(lèi):

1)、JavaApplication(Java應(yīng)用程序)依賴(lài)的JRE(JavaRuntimeEnvironment):

JavaRuntimeEnvironment(JRE)是可以在其上運(yùn)行、測(cè)試和傳輸應(yīng)用程序的Java平臺(tái)。它包括Java虛擬機(jī)、Java平臺(tái)核心類(lèi)庫(kù)和支持文件(JavaAPI)。它不包含開(kāi)發(fā)工具--編譯器、調(diào)試器和其它工具,僅包含運(yùn)行環(huán)境。

JavaApplication包括Java開(kāi)發(fā)的桌面應(yīng)用程序,服務(wù)器端組件,Web應(yīng)用程序、手機(jī)應(yīng)用程序、嵌入式應(yīng)用程序等。

2)、JavaApplet(Java小應(yīng)用程序)依賴(lài)的JRE(JavaPlug-in瀏覽器插件):JavaPlug-in瀏覽器插件主要目的是為了便于在瀏覽器中運(yùn)行JavaApplet。JavaPlug-in軟件允許JavaApplet和JavaBean組件在相應(yīng)瀏覽器中運(yùn)行。JavaPlug-in插件可用于Netscape

Navigator、FireFox和MicrosoftInternetExplorer等支持Java的所有瀏覽器?;贘2SE7.0進(jìn)行GUI編程----第一章Java入門(mén)JavaApplet(Java小應(yīng)用程序)是指只能在客戶(hù)端瀏覽器中運(yùn)行的Java小程序。如果你要自行開(kāi)發(fā)Java軟件,請(qǐng)下載JDK。在JDK中附帶有JRE。注意由于Microsoft對(duì)Java的支持不完全,請(qǐng)不要使用IE自帶的Java虛擬機(jī)來(lái)運(yùn)行Applet,務(wù)必安裝一個(gè)相應(yīng)瀏覽器版本的JRE或JDK。

在客戶(hù)目標(biāo)計(jì)算機(jī)上,我們只需要安裝相應(yīng)版本的JRE就可以讓Java程序或者Applet運(yùn)行起來(lái)。JRE的版本一般與JDK版本相對(duì)應(yīng),例如JDK1.6與JRE1.6等。下圖展示了JRE以及JRE是如何增強(qiáng)代碼安全的。編譯javac從硬盤(pán)、網(wǎng)絡(luò)或其它資源加載類(lèi)加載器字節(jié)碼校驗(yàn)器解釋器運(yùn)行時(shí)底層硬件java運(yùn)行時(shí)編譯得到字節(jié)碼文件字節(jié)碼文件被加載解釋執(zhí)行在運(yùn)行時(shí),Java字節(jié)碼被加載、檢驗(yàn)并在解釋器中運(yùn)行。如果執(zhí)行Applet,則瀏覽器下載字節(jié)碼文件,在瀏覽器內(nèi)存的JVM中解釋執(zhí)行。解釋器需要實(shí)現(xiàn)兩大代能:執(zhí)行字節(jié)碼以及正確調(diào)用底層硬件資源?;贘2SE7.0進(jìn)行GUI編程----第一章Java入門(mén)

在Java運(yùn)行時(shí)環(huán)境(JRE)中,需要將Java字節(jié)碼解釋然后再執(zhí)行,然而這降低了代碼的執(zhí)行速度。因此,Java將字節(jié)碼在運(yùn)行時(shí)編譯成本地機(jī)器語(yǔ)言代碼,并直接在硬件平臺(tái)上執(zhí)行,從而提高代碼執(zhí)行速度,這樣代碼的運(yùn)行速度將非常接近于C以及C++,但因?yàn)橐谶\(yùn)行時(shí)進(jìn)行編譯,這會(huì)帶來(lái)少許加載時(shí)間的延遲,以使得代碼能夠編譯為本機(jī)代碼。這需要使用Java的JIT(JustInTime)即時(shí)編譯器來(lái)完成。編譯javac從硬盤(pán)、網(wǎng)絡(luò)或其它資源加載類(lèi)加載器字節(jié)碼校驗(yàn)器解釋器運(yùn)行時(shí)底層硬件java運(yùn)行時(shí)編譯得到字節(jié)碼文件字節(jié)碼文件被加載解釋執(zhí)行帶有即時(shí)編譯器(JIT)的JRE代碼編譯及執(zhí)行過(guò)程JIT代碼生成器基于J2SE7.0進(jìn)行GUI編程----第一章Java入門(mén)1.2.4JVM任務(wù)

JVM主要有三個(gè)任務(wù):加載代碼、校驗(yàn)代碼、執(zhí)行代碼。一、類(lèi)加載器-加載代碼:類(lèi)加載器加載程序執(zhí)行所需的全部類(lèi)。類(lèi)加載器通過(guò)將本地文件系統(tǒng)的類(lèi)命名空間與網(wǎng)絡(luò)源導(dǎo)入的類(lèi)命名空間分隔開(kāi)來(lái),以增加安全性。由于總是首先加載本地類(lèi),因而可以限制任何"特洛依木馬"程序的運(yùn)行。當(dāng)全部類(lèi)被加載后,可執(zhí)行文件的內(nèi)存布局就確定了。這時(shí),符號(hào)引用被賦值為具體的內(nèi)存地址,并創(chuàng)建了內(nèi)存變量的查詢(xún)表。由于內(nèi)存布局在運(yùn)行時(shí)產(chǎn)生,Java技術(shù)解釋器增加了保護(hù),以防止對(duì)受限代碼區(qū)的未授權(quán)訪(fǎng)問(wèn),從而提高了程序的安全。二、字節(jié)碼校驗(yàn)器:

Java軟件代碼在計(jì)算機(jī)上實(shí)際運(yùn)行之前要經(jīng)過(guò)幾次測(cè)試。JVM通過(guò)字節(jié)碼校驗(yàn)器對(duì)代碼進(jìn)行測(cè)試,以檢查非法代碼段,以防止非法偽造指針、違反對(duì)象訪(fǎng)問(wèn)權(quán)限或試圖改變對(duì)象類(lèi)型的代碼。所有網(wǎng)絡(luò)導(dǎo)入的類(lèi)文件都要經(jīng)過(guò)字節(jié)碼校驗(yàn)器的驗(yàn)證,以提高安全。校驗(yàn)過(guò)程:字節(jié)碼校器對(duì)程序?qū)⑦M(jìn)行四次校驗(yàn),以確保代碼符合JVM規(guī)范并且不違反系統(tǒng)的完整性。如果校驗(yàn)器在完成四次校驗(yàn)后未返回錯(cuò)誤消息,則說(shuō)明:

1、類(lèi)符合JVM規(guī)范指定的類(lèi)文件格式

2、沒(méi)有訪(fǎng)問(wèn)權(quán)限違例

3、代碼未引起操作數(shù)堆棧上溢或下溢

4、所有操作代碼的參數(shù)類(lèi)型是正確的

5、無(wú)非法數(shù)據(jù)轉(zhuǎn)換發(fā)生,如將整數(shù)轉(zhuǎn)換為對(duì)象引用然后,JVM開(kāi)始解釋執(zhí)行代碼?;贘2SE7.0進(jìn)行GUI編程----第一章Java入門(mén)1.3Java的工作方式

1、文件類(lèi)型.java Java源代碼文件.class 二進(jìn)制字節(jié)碼文件

2、運(yùn)行機(jī)制對(duì)于大多數(shù)語(yǔ)言,要運(yùn)行程序,要么編譯程序要么解釋程序;而Java語(yǔ)言的程序則既要被編譯又要被解釋。3、其工作方式為:

1)、編譯程序?qū)ava源程序編譯為字節(jié)碼(bytecode)程序;

2)、解釋程序(Java虛擬機(jī)中的解釋程序)分析并運(yùn)行字節(jié)碼程序。

基于J2SE7.0進(jìn)行GUI編程----第一章Java入門(mén)1.4Java開(kāi)發(fā)工具:1、記事本+JDK:適合初學(xué)者,并能了解Java程序執(zhí)行邏輯

2、JCreator:適合初學(xué)者,一個(gè)簡(jiǎn)單免費(fèi)的IDE(集成開(kāi)發(fā)環(huán)境)

3、JBuilder:Bland公司非常強(qiáng)大的IDE(商業(yè)的集成開(kāi)發(fā)環(huán)境),已走下坡路

4、NetBeans:Sun公司開(kāi)源免費(fèi)IDE,速度比較慢,適合做桌面開(kāi)發(fā)

5、Eclipse:IBM資助的開(kāi)源免費(fèi)IDE,是目前企業(yè)主流開(kāi)發(fā)平臺(tái),最新版3.5及JavaEEforEclipse。

1.5、JDK的下載與安裝:為了鼓勵(lì)使用Java語(yǔ)言開(kāi)發(fā)軟件,SunMicrosystems公司提供了免費(fèi)開(kāi)源的軟件開(kāi)發(fā)工具包(SDK),其中包括編譯器、虛擬機(jī)、調(diào)試器等開(kāi)發(fā)工具,稱(chēng)為Java開(kāi)發(fā)工具包或JDK。JDK(可從下載最新版本)jdk6.0

基于J2SE7.0進(jìn)行GUI編程----第一章Java入門(mén)1.6安裝JDK后產(chǎn)生如下目錄結(jié)構(gòu):\bin目錄:Java開(kāi)發(fā)工具,包括Java編譯器、解釋器等\demo目錄:一些實(shí)例程序\lib目錄:Java開(kāi)發(fā)類(lèi)庫(kù)\jre目錄:Java運(yùn)行環(huán)境,包括Java虛擬機(jī)、運(yùn)行時(shí)類(lèi)庫(kù)等1.7JDK實(shí)用程序:1、javacJava編譯器,將Java源程序編譯成字節(jié)碼2、javaJava解釋器,直接從類(lèi)文件執(zhí)行Java應(yīng)用程序,即application3、appletviewer小程序?yàn)g覽器,執(zhí)行html文件上的Java小程序,即Applet1.8設(shè)置環(huán)境變量:

1、JAVA_HOME:JAVA_HOME環(huán)境變量主要設(shè)置JDK的安裝目錄這個(gè)環(huán)境變量主要為其它java環(huán)境變量服務(wù),使用:%JAVA_HOME%2、PATH:…;%JAVA_HOME%/bin;%JAVA_HOME%/jre/bin;

使得在Windows命令窗口下能直接使用bin中的實(shí)用程序。在Windows操作系統(tǒng)"運(yùn)行"中輸入cmd進(jìn)入命令窗口,在提示符下輸入:

c:\>java-version如果能夠看到j(luò)ava版本提示信息,表示環(huán)境變量配置成功?;贘2SE7.0進(jìn)行GUI編程----第一章Java入門(mén)

3、CLASSPATH:為java加載類(lèi)(classorlib)路徑,只有類(lèi)在CLASSPATH中,java命令才能識(shí)別。設(shè)為:.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar1.9一個(gè)簡(jiǎn)單的Java應(yīng)用程序HelloWorld一、程序示例:保存到c:\java\TestGreeting.java,代碼如下:publicclassTestGreeting{publicstaticvoidmain(String[]args){Greetinghello=newGreeting();hello.greet();}}保存到c:\java\Greeting.java,代碼如下:publicclassGreeting{publicvoidgreet(){System.out.println("Java,你好");}}基于J2SE7.0進(jìn)行GUI編程----第一章Java入門(mén)二、TestGreeting應(yīng)用程序:publicclassTestGreeting{publicstaticvoidmain(String[]args){Greetinghello=newGreeting();hello.greet();}}三、Greeting類(lèi)publicclassGreeting{publicvoidgreet(){System.out.println("Java,你好");}}四、編譯和運(yùn)行TestGreeting應(yīng)用程序確保操作系統(tǒng)的Path環(huán)境變量增加了JDK安裝文件夾下的bin文件夾路徑。c:\java>javacTestGreeting.javac:\java>javaTestGreeting基于J2SE7.0進(jìn)行GUI編程----第一章Java入門(mén)五、診斷編譯錯(cuò)誤

1、編譯時(shí)錯(cuò)誤

1)、javac:Commandnotfound環(huán)境變量Path沒(méi)有配置好,請(qǐng)?jiān)赑ath中增加jdk安裝文件夾下的bin文件夾的路徑

2)、語(yǔ)法錯(cuò)誤:

如:System.out.printl("Java,你好");3)、類(lèi)和文件命名錯(cuò)誤:如果一個(gè).java文件中包含一個(gè)public類(lèi),則該文件的主文件名必須與這個(gè)類(lèi)名完全相同,包括大小寫(xiě)。示例:

4)、類(lèi)的個(gè)數(shù)每一個(gè).java文件中只能聲明一個(gè)頂級(jí)非靜態(tài)的public類(lèi),且這個(gè)類(lèi)的名稱(chēng)必須與.java文件主文件名完全相同。如果在一個(gè)源文件.java中聲明了多個(gè)public類(lèi),將發(fā)生錯(cuò)誤。每個(gè).java文件中允許非public的類(lèi)多個(gè)。2、運(yùn)行時(shí)錯(cuò)誤

1)、Can’tfindclassTestGreeting

java是嚴(yán)格區(qū)分大小寫(xiě)的,這個(gè)運(yùn)行時(shí)錯(cuò)誤說(shuō)明TestGreeting類(lèi)沒(méi)有找到

2)、Exceptioninthread"main"java.lang.NoSuchMethodError:main這表示,解釋器要執(zhí)行的類(lèi)沒(méi)有一個(gè)靜態(tài)的main方法,可能只有一個(gè)非靜態(tài)的main方法,你需要為這個(gè)main方法加上static關(guān)鍵字。或者是main方法的參數(shù)格式錯(cuò)誤?;贘2SE7.0進(jìn)行GUI編程----第一章Java入門(mén)六、在上面HelloWorld示例中,下圖演示了如何進(jìn)行編譯及運(yùn)行TestGreeting.javaGreeting.javaTestGreeting.classGreeting.classjavac也編譯JVMjava也加載UNIXJVMDOSJVMJavaOS可運(yùn)行于多個(gè)平臺(tái)編譯運(yùn)行時(shí)基于J2SE7.0進(jìn)行GUI編程----第二章面向?qū)ο缶幊瘫菊轮饕榻B了Java的類(lèi)的層次結(jié)構(gòu)、java中類(lèi)的實(shí)現(xiàn)、類(lèi)中成員、屬性、方法、構(gòu)造器、包、使用JavaAPI在線(xiàn)文檔等相關(guān)知識(shí),以及面向?qū)ο缶幊探?、軟件工程等概念?.1軟件工程2.1.1軟件工程發(fā)展歷史軟件工程是一門(mén)異常困難且難以駕馭的學(xué)科。軟件工程的目的旨在通過(guò)讓代碼復(fù)用來(lái)使軟件系統(tǒng)的開(kāi)發(fā)、維護(hù)與擴(kuò)展更容易。軟件工程自從軟件誕生以來(lái)一直在發(fā)展,歷史如下:一、機(jī)器代碼(二十世紀(jì)四十年代末--現(xiàn)在)

二、高級(jí)語(yǔ)言(二十世紀(jì)五十年代--現(xiàn)在)操作系統(tǒng)(二十世紀(jì)六十年代--現(xiàn)在)

FortranLISPCCOBOLOS/360UNIXMacOSWindows

三、庫(kù)/函數(shù)API(二十世紀(jì)六十年代--二十世紀(jì)八十年代初)

NASTRANTCP/IPISAMX-WindowsOpenLook

四、面向?qū)ο蟮恼Z(yǔ)言(二十世紀(jì)八十年代--現(xiàn)在)

SELFSmalltalkCommonLispObjectSystemEiffelC++Java

五、工具包/框架/對(duì)象API(二十世紀(jì)九十年代--現(xiàn)在)

Java2SDKAWT/J.F.C./SwingJiniJavaBeansJDBC從最早期的機(jī)器代碼,到后面的高級(jí)語(yǔ)言,到面向?qū)ο蟮木幊陶Z(yǔ)言及框架的誕生,目的都是使對(duì)軟件的開(kāi)發(fā)更容易,對(duì)代碼的組織與維護(hù)、代碼的復(fù)用更方便。Java從1995年誕生后,發(fā)展至今有許多軟件技術(shù)和框架,并且現(xiàn)在還在不斷增加?;贘2SE7.0進(jìn)行GUI編程----第二章面向?qū)ο缶幊?.1.2分析和設(shè)計(jì)階段軟件開(kāi)發(fā)項(xiàng)目分為五個(gè)主要工作流程:需求捕獲、分析、設(shè)計(jì)、實(shí)現(xiàn)和測(cè)試。每一個(gè)階段都非常重要,但往往分析與設(shè)計(jì)階段對(duì)后續(xù)的實(shí)現(xiàn)與測(cè)試影響很大,因?yàn)樵诜治龊驮O(shè)計(jì)階段確定了軟件開(kāi)發(fā)的方向。在分析階段需要定義系統(tǒng)的功能任務(wù),分析階段必須明確要操作的目標(biāo)系統(tǒng)所涉及的對(duì)象以及對(duì)象間的行為和關(guān)系。設(shè)計(jì)階段需要定義系統(tǒng)并如何實(shí)現(xiàn)目標(biāo)及功能任務(wù),在該階段需要?jiǎng)?chuàng)建目標(biāo)系統(tǒng)中的角色、活動(dòng)、對(duì)象和行為模型,這可以使用統(tǒng)一建模語(yǔ)言(UML)來(lái)實(shí)現(xiàn)建模。

UML是一種大型且復(fù)雜的建模語(yǔ)言,主要用于設(shè)計(jì)階段,通過(guò)相應(yīng)的UML建模軟件例如IBM的Rose建模軟件,可以方便實(shí)現(xiàn)軟件建模,并支持生成代碼。2.1.3分析和設(shè)計(jì)舉例:略2.1.4抽象軟件設(shè)計(jì)一直在從低級(jí)的構(gòu)造向更高級(jí)發(fā)展。可以簡(jiǎn)化和抽象來(lái)實(shí)現(xiàn)這個(gè)發(fā)展。簡(jiǎn)化就是在早期語(yǔ)言設(shè)計(jì)都構(gòu)建高級(jí)語(yǔ)言或技術(shù)時(shí),不使用原始的復(fù)雜的東西,而采用簡(jiǎn)單的技術(shù)。抽象是指強(qiáng)制在公有接口后面隱藏私有實(shí)現(xiàn)的細(xì)節(jié)。抽象的要領(lǐng)導(dǎo)致了高級(jí)語(yǔ)言中子程序(函數(shù))的出現(xiàn),以及對(duì)象中函數(shù)與數(shù)據(jù)的配對(duì)。在更高級(jí)別上,抽象導(dǎo)致了框架和API的誕生與發(fā)展?;贘2SE7.0進(jìn)行GUI編程----第二章面向?qū)ο缶幊?.1.5作為對(duì)象藍(lán)圖的類(lèi)類(lèi)是一種軟件藍(lán)圖,可以實(shí)例化到得對(duì)象,從而被使用。類(lèi)與對(duì)象中允許包括屬性及方法,這稱(chēng)之為類(lèi)與對(duì)象中成員。類(lèi)具有三大特性:封裝、繼承和多態(tài)特性。2.2聲明Java技術(shù)類(lèi):格式:

[訪(fǎng)問(wèn)修飾符]class類(lèi)名{//屬性定義部分

//構(gòu)成器定義部分

//方法定義部分}

注:類(lèi)名遵循變量的名稱(chēng)規(guī)則,訪(fǎng)問(wèn)修飾符只能使用public或<缺省>,public說(shuō)明類(lèi)可以被任意訪(fǎng)問(wèn)。示例:

publicclassVehicle{privatedoublemaxLoad;publicvoidsetMaxLoad(doublevalue){maxLoad=value;}}基于J2SE7.0進(jìn)行GUI編程----第二章面向?qū)ο缶幊?.3聲明屬性:在類(lèi)中聲明格式:

[訪(fǎng)問(wèn)修飾符]數(shù)據(jù)類(lèi)型屬性名稱(chēng)[=表達(dá)式|值];示例:

publicclassVehicle{ privateintx; privatefloaty=10000.0F; privateStringname="BatesMotel";}

注:private聲明為私有的屬性,只能供類(lèi)本身使用?;贘2SE7.0進(jìn)行GUI編程----第二章面向?qū)ο缶幊?.4聲明方法:在類(lèi)中聲明格式:

[訪(fǎng)問(wèn)修飾符]返回值數(shù)據(jù)類(lèi)型方法名稱(chēng)(類(lèi)型1參數(shù)變量1,…,類(lèi)型n參數(shù)變量n){//方法體

//允許使用return中止函數(shù)執(zhí)行,并返回值,格式:return;或return表達(dá)式;}

說(shuō)明:返回值類(lèi)型可以為void,表示返回?zé)o值。示例:

publicclassDog{ privateintweight; publicintgetWeight(){returnweight;} publicvoidsetWeight(intnewWeight){ if(newWeight>0){ weight=newWeight; }}}基于J2SE7.0進(jìn)行GUI編程----第二章面向?qū)ο缶幊?.5訪(fǎng)問(wèn)對(duì)象成員:格式:類(lèi)名對(duì)象名=new類(lèi)名();

對(duì)象名.成員;

對(duì)象名.成員函數(shù)();

示例:將使用前面的Dog類(lèi)publicclassTestDog{publicstaticvoidmain(String[]args){ Dogd=newDog(); System.out.println("狗的體重為:"+d.getWeight());d.setWeight(42); System.out.println("狗的體重為:"+d.getWeight());d.setWeight(-42); System.out.println("狗的體重為:"+d.getWeight());}}基于J2SE7.0進(jìn)行GUI編程----第二章面向?qū)ο缶幊?.6信息隱藏:技術(shù):使用private、public等訪(fǎng)問(wèn)修飾符。例如:有一個(gè)MyDate類(lèi),包括屬性:day、month和year。在UML(統(tǒng)一建模語(yǔ)言)中,類(lèi)圖如右。實(shí)現(xiàn)如下:

publicclassMyDate{ publicintday; publicintmonth; publicintyear;}

然后如果客戶(hù)端代碼如下,會(huì)導(dǎo)致出現(xiàn)錯(cuò)誤:

MyDated=newMyDate();d.day=32;//非法的日子d.month=2;d.day=30;//2月沒(méi)有30天d.day=d.day+1;//2月更沒(méi)有31天

因此,對(duì)于上述代碼的問(wèn)題,最好是讓客戶(hù)端代碼不能直接訪(fǎng)問(wèn)三個(gè)屬性。而采用setXyz()(在java中通常稱(chēng)之為setter設(shè)置器)來(lái)設(shè)置三個(gè)屬性的值,并做驗(yàn)證;采用getXyz()(在java中通常稱(chēng)之為getter獲取器)來(lái)得到三個(gè)屬性的值。將三個(gè)屬性設(shè)置為私有private。類(lèi)圖如右:d.setDay(32);//非法的日子,檢查后返回falsed.setMonth(2);d.setDay(30);//2月沒(méi)有30天返回falsed.setDay(d.getDay()+1);//2月更沒(méi)有31天返回false+day:int+month:int+year:intMyDate-day:int-month:int-year:intMyDate+getDay()+getMonth()+getYear()+setDay(int):boolean+setMonth(int):boolean+setYear(int):boolean基于J2SE7.0進(jìn)行GUI編程----第二章面向?qū)ο缶幊?.7封裝:對(duì)于客戶(hù)端程序隱藏該隱藏的,開(kāi)放該開(kāi)發(fā)的就是封裝。這些要使用public、private這樣的訪(fǎng)問(wèn)修飾符來(lái)實(shí)現(xiàn)。使用封裝特性,可以使對(duì)類(lèi)的更改讓客戶(hù)端程序沒(méi)有私毫察覺(jué)。例如:對(duì)于上面的MyDate類(lèi)的開(kāi)發(fā)人員決定使用一個(gè)相對(duì)于某一天(紀(jì)元日)的過(guò)去的天數(shù)做為MyDate的日期存儲(chǔ)基礎(chǔ),以實(shí)現(xiàn)日期的比較和日期間隔的輕松計(jì)算。而不再采用原來(lái)的年、月、日做為存儲(chǔ)基礎(chǔ)。則開(kāi)發(fā)人員可以輕松更改,而客戶(hù)端程序不需要任何變動(dòng)。類(lèi)圖如右:-date:longMyDate+getDay():int+getMonth():int+getYear():int+setDay(int):boolean+setMonth(int):boolean+setYear(int):boolean-isDayValid(int):boolean基于J2SE7.0進(jìn)行GUI編程----第二章面向?qū)ο缶幊?.8聲明構(gòu)造器:構(gòu)造器即構(gòu)造函數(shù)。格式:

[訪(fǎng)問(wèn)修飾符]類(lèi)名(參數(shù)變量列表){//函數(shù)體;}

說(shuō)明:訪(fǎng)問(wèn)修飾符只能為public、protected或private。構(gòu)造器不是方法,它們沒(méi)有返回值也不能被繼承。示例:publicclassDog{ privateintweight;publicDog(){ weight=42;} publicintgetWeight(){returnweight;} publicvoidsetWeight(intnewWeight){ if(newWeight>0){ weight=newWeight; }}}基于J2SE7.0進(jìn)行GUI編程----第二章面向?qū)ο缶幊?.9缺省構(gòu)造器:

java中每個(gè)類(lèi)必須至少一個(gè)構(gòu)造器,如果不為類(lèi)編寫(xiě)任何構(gòu)造器,Java將為該類(lèi)自動(dòng)創(chuàng)建一個(gè)缺省的構(gòu)造器,這個(gè)缺省構(gòu)造器沒(méi)有任何參數(shù),且沒(méi)有任何語(yǔ)句。當(dāng)擁有缺省構(gòu)造器之后,對(duì)于類(lèi)被實(shí)例化為對(duì)象可以直接如下格式任何:類(lèi)名對(duì)象名=new類(lèi)名();

注意:當(dāng)手工為一個(gè)類(lèi)編寫(xiě)任何一個(gè)構(gòu)造函數(shù)時(shí),該類(lèi)都將丟失Java為其創(chuàng)建的缺省構(gòu)成函數(shù)。示例:classGreeting{publicGreeting(Strings){System.out.println("Java,你好1"+s);}publicvoidgreet(){System.out.println("Java,你好");}}publicclassTestGreeting{publicstaticvoidmain(String[]args){Greetinghello=newGreeting();hello.greet();}}基于J2SE7.0進(jìn)行GUI編程----第二章面向?qū)ο缶幊?.10源文件布局:任何Java源程序文件均按照下列部份依次組織每一個(gè)Java源代碼文件。

[package名稱(chēng);]//包聲明部份

<import包路徑名;>*//包導(dǎo)入部份,也可使用多行同時(shí)導(dǎo)入多個(gè)包

<類(lèi)聲明部份>+

說(shuō)明:[]括起來(lái)的表示可出現(xiàn)可不出現(xiàn),<>括起來(lái)的表示必須出現(xiàn),*指示前面的部份出現(xiàn)>=0次(即可不出現(xiàn)),+指示前面的部份出現(xiàn)>=1次(即必須出現(xiàn))

必須嚴(yán)格按照這種代碼布局來(lái)編寫(xiě)Java源程序。先聲明包,指定本文件中的所有類(lèi)定義均位于該包空間中,以便于其它地方使用包空間加.對(duì)該文件中的類(lèi)進(jìn)行訪(fǎng)問(wèn),如果不聲明包,則該文件中所有類(lèi)將被Java放入默認(rèn)包空間空間中,不便于訪(fǎng)問(wèn);緊接著,導(dǎo)入本文件下面將要使用的包空間或包空間中的具體類(lèi),可以使用多行導(dǎo)入多個(gè)包空間或類(lèi),需要使用包空間或類(lèi)的完全限定名稱(chēng),也可以使用包空間路徑.*,一次性導(dǎo)入該包空間中的所有類(lèi),當(dāng)導(dǎo)入包空間或類(lèi)后,對(duì)于該包空間下的類(lèi)或直接導(dǎo)入的類(lèi),可以在下面代碼中直接使用類(lèi)名,而不再需要完全限定名對(duì)類(lèi)進(jìn)行訪(fǎng)問(wèn),如果不使用import,則Java將僅僅導(dǎo)入java.lang這個(gè)包中的所有類(lèi)。再下面是類(lèi)聲明部份,在一個(gè)Java源文件中雖然允許同時(shí)聲明多個(gè)類(lèi),但建議還是一個(gè)類(lèi)使用一個(gè)Java源文件來(lái)定義,并且Java源文件的名稱(chēng)與類(lèi)名完全相同。如果一個(gè)Java源文件中有多個(gè)類(lèi)定義,則最多只能有一個(gè)public類(lèi),且該類(lèi)的類(lèi)名必須與該Java源文件名一致?;贘2SE7.0進(jìn)行GUI編程----第二章面向?qū)ο缶幊淌纠篤ehicleCapacityReport.javapackageshipping.reports;importshipping.reports.*;importjava.util.List;importjava.io.*;publicclassVehicleCapacityReport{privateListvehicles;publicvoidgenerateReport(Writeroutput){//方法主體

}}基于J2SE7.0進(jìn)行GUI編程----第二章面向?qū)ο缶幊?.11軟件包:大多數(shù)軟件系統(tǒng)都很龐大,為了管理這些軟件系統(tǒng)的源代碼。常常需要將系統(tǒng)中的類(lèi)分組到不同的包中來(lái)簡(jiǎn)化類(lèi)的管理,并防止類(lèi)命名沖突。在Java中使用包可以包含類(lèi)以及其它包從而構(gòu)成包的層次結(jié)構(gòu),并對(duì)包方便進(jìn)行引用。在UML建模語(yǔ)言中也使用了包的概念。如下圖,UML中的shipping包:shippingGUIreportsdomainCompanyVehicleTruckRiverBarge在上面的shipping包中實(shí)現(xiàn)了航運(yùn)軟件系統(tǒng)的部分功能。在shipping頂層包中包括了兩個(gè)子包GUI和reports,而這兩個(gè)子包要依賴(lài)domain包,在domain包中包括了Company、Vehicle(交通工具)、Truck(卡車(chē))、RiverBarge(駁船)等模型元素即類(lèi)。擁有0..*基于J2SE7.0進(jìn)行GUI編程----第二章面向?qū)ο缶幊?.12package語(yǔ)句:格式:package頂層包空間名[.子包空間名.子包空間名];

包空間聲明部份必須位于,Java源代碼文件的第一行。每個(gè)Java源代碼最多只能進(jìn)行一次包空間聲明,如果沒(méi)有聲明包空間則該Java源代碼中的所有類(lèi)型位于當(dāng)前應(yīng)用程序的默認(rèn)包空間(無(wú)名包空間)中。Java應(yīng)用程序中的包對(duì)應(yīng)源程序中的一個(gè)文件夾,且包空間的名稱(chēng)與該文件夾名稱(chēng)完全相同。Java應(yīng)用程序之所以引入包,主要是為了解決對(duì)Java源程序中的類(lèi)型按包進(jìn)行分類(lèi)管理的問(wèn)題,并且也防止了類(lèi)名發(fā)生沖突的問(wèn)題。這樣后,不同包之間的類(lèi)型允許重名,而不會(huì)出現(xiàn)任何問(wèn)題。在創(chuàng)建Java類(lèi)之前,我們應(yīng)該創(chuàng)建相應(yīng)的包,然后將該類(lèi)放入該包空間中(即將Java類(lèi)文件放入該包空間對(duì)于的文件夾中),包空間中只能包含Java的類(lèi)型定義、接口定義等,不能直接出現(xiàn)執(zhí)行代碼。包空間的結(jié)構(gòu)為一個(gè)層次結(jié)構(gòu),即允許在頂層包空間下創(chuàng)建各種下級(jí),甚至下下級(jí)的包空間,并以此對(duì)類(lèi)型進(jìn)行分層管理,在聲明包空間時(shí),允許使用.做間隔直接聲明頂層包空間的子包空間。示例:

packageshipping.domain;publicclassVehicle{//..類(lèi)定義}

包空間聲明前可以出現(xiàn)空白或注釋?zhuān)臻g名稱(chēng)應(yīng)全部小寫(xiě),類(lèi)名則應(yīng)遵循第一個(gè)字母大小,其它單詞首字母大寫(xiě)的駝峰規(guī)則?;贘2SE7.0進(jìn)行GUI編程----第二章面向?qū)ο缶幊?.13import語(yǔ)句:格式1:import包名[.子包名].類(lèi)名;格式2:import包名[.子包名].*;

格式1用于導(dǎo)入指定包空間中的指定類(lèi),該包空間中其它類(lèi)不導(dǎo)入,這將導(dǎo)致Java編譯器更快速找到該類(lèi)并進(jìn)行編譯。格式2用于導(dǎo)入指定包空間中的所有類(lèi),這將導(dǎo)致編譯器根據(jù)你Java源代碼中類(lèi)的使用情況,由編譯器自動(dòng)決定導(dǎo)入哪些類(lèi),將會(huì)花費(fèi)比較多的時(shí)間從上到下依查找需要用到類(lèi)相應(yīng)的包,并檢查是否有沖突,但不影響運(yùn)行速度,只會(huì)降低編譯速度。

import語(yǔ)句必須出現(xiàn)在所有類(lèi)的聲明代碼之前。當(dāng)導(dǎo)入相應(yīng)的類(lèi)或包中所有類(lèi)后,在下方的代碼中可以直接通過(guò)使用類(lèi)名訪(fǎng)問(wèn)導(dǎo)入的類(lèi),而非類(lèi)的完全限定名。示例:

packageshipping.reports;importshipping.domain.*;importjava.util.List;importjava.io.*;publicclassVehicleCapacityReport{privateCompanycompanyForReport;//…}

基于J2SE7.0進(jìn)行GUI編程----第二章面向?qū)ο缶幊?.14目錄布局和包:一個(gè)包在Java中必須對(duì)應(yīng)一個(gè)目錄(文件夾)(除開(kāi)無(wú)名包)。所以,Java中的包層次管理可以理解為文件夾的層次管理,在相應(yīng)包中聲明類(lèi),可以理解為在相應(yīng)文件夾中創(chuàng)建該類(lèi)的Java源代碼文件。不同的Java源文件中的類(lèi)可以隸屬于同一個(gè)包,并且需要放在相同的包文件夾中。對(duì)于前面的shipping軟件包中的示例目錄結(jié)構(gòu)為:

shipping/|--------------domain/||--------Company.class||--------Vehicle.class||--------RiverBarge.class||--------Truck.class|--------------GUI/|--------------reports/|--------VehicleCapacityReport.class基于J2SE7.0進(jìn)行GUI編程----第二章面向?qū)ο缶幊?.15開(kāi)發(fā):如果要同時(shí)進(jìn)行幾個(gè)項(xiàng)目開(kāi)發(fā),可以采用多種開(kāi)發(fā)方式與手段。例如:對(duì)于前面的shipping軟件包中的示例目錄結(jié)構(gòu)為:

JavaProjects/|------ShippingPrj/|-----src||------shipping/|||---------domain/|||---------GUI/|||---------reports/|-----docs/|-----classes/ |------shipping/ |---------domain/ |---------GUI/|---------reports/|------其它項(xiàng)目/這種對(duì)項(xiàng)目開(kāi)發(fā)進(jìn)行管理的技術(shù)好處在于,可以在src文件夾中管理.java源代碼,而編譯生成的.class文件將位于classes文件夾中,在docs文件夾中可以保存項(xiàng)目的文檔資料?;贘2SE7.0進(jìn)行GUI編程----第二章面向?qū)ο缶幊?.16使用–d編譯選項(xiàng)指定類(lèi)文件(.class文件)的存放路徑:格式:javac-d目錄路徑編譯文件.java對(duì)于上面開(kāi)發(fā)技術(shù)示例中,在命令窗口執(zhí)行:

cdJavaProjects/ShippingPrj/srcjavac-d../classesshipping/domain/*.java2.17部署在客戶(hù)計(jì)算機(jī)上部署并運(yùn)行一個(gè)Java程序可以不用操作客戶(hù)計(jì)算機(jī)上的CLASSPATH環(huán)境變量,也很少這樣做。采用下方法即可:即通過(guò)創(chuàng)建可執(zhí)行的Java存檔(JAR)文件來(lái)實(shí)現(xiàn)部署并運(yùn)行。操作步驟:

1、創(chuàng)建一個(gè)臨時(shí)文件MANIFEST.MF(清單文件):該文件的內(nèi)容為:主要是指定主類(lèi),即啟動(dòng)類(lèi),必須在其后有兩空行

Main-Class:mypackage.MyClass

2、使用如下命令:

jarcmfMANIFEST.MF

MyProgram.jar*.class|文件夾/

說(shuō)明:如果沒(méi)有包空間,則使用*.class將類(lèi)文件打包到.jar中,如果有頂層包空間,則必須先到達(dá)頂層包空間文件夾的上層文件夾,在命令后指定頂層包空間文件夾名稱(chēng)并加一個(gè)/,jar將遞歸把當(dāng)前文件夾下頂層包空間文件夾中所有的.class文件打包到.jar中。3、復(fù)制MyProgram.jar到目標(biāo)計(jì)算機(jī),并運(yùn)行,如果是在Windows操作系統(tǒng),雙擊jar文件就可以執(zhí)行:

java–jar.jar文件的路徑基于J2SE7.0進(jìn)行GUI編程----第二章面向?qū)ο缶幊滩渴饚?kù):在Java中,特殊情況下,jar文件中可能包括許多類(lèi)需要我們?cè)诓煌?xiàng)目程序中使用,這樣的.jar庫(kù)文件,可以直接通過(guò)復(fù)制的方式復(fù)制到JDK安裝文件夾下的jre目錄下的lib目錄的ext子目錄中,但這樣做將導(dǎo)致任何程序都可以執(zhí)行.jar庫(kù)中的類(lèi),擁有完全執(zhí)行權(quán)限。并且,如果jar庫(kù)中的類(lèi)與JDK類(lèi)庫(kù)中的類(lèi)發(fā)生命名沖突將導(dǎo)致運(yùn)行時(shí)錯(cuò)誤。如果只安裝了標(biāo)準(zhǔn)JRE,則應(yīng)當(dāng)復(fù)制到標(biāo)準(zhǔn)JRE目錄下的lib下的ext子目錄中。

示例:創(chuàng)建一個(gè)Test.jar軟件包,包名test,類(lèi)TestClass,有一公共方法,不需要設(shè)置MANIFEST.MF(清單文件)的主類(lèi)。然后復(fù)制到j(luò)dk/jre/lib/ext下(擴(kuò)展庫(kù)文件夾下)。在自己的任意的類(lèi)中調(diào)用該jar包中的TestClass類(lèi)。技術(shù)摘要:

1、類(lèi)--對(duì)象模型

2、對(duì)象--類(lèi)的實(shí)例

3、屬性--對(duì)象的數(shù)據(jù)元素

4、方法--對(duì)象的功能元素,函數(shù)或過(guò)程。

5、構(gòu)造器--用于初始化創(chuàng)建對(duì)象時(shí)被自動(dòng)調(diào)用,構(gòu)造函數(shù)。

6、包--類(lèi)、子包及兩者的集合,用于管理軟件系統(tǒng)。使用Java技術(shù)API文檔:

基于J2SE7.0進(jìn)行GUI編程----第三章標(biāo)識(shí)符、關(guān)鍵字和數(shù)據(jù)類(lèi)型本章主要介紹了Java語(yǔ)法基礎(chǔ),包括Java變量、關(guān)鍵字、基本類(lèi)型和類(lèi)類(lèi)型等相關(guān)知識(shí)。3.1注釋在Java代碼中,允許使用三種格式的注釋?zhuān)?/p>

1、單行注釋?zhuān)?/p>

//2、段落注釋?zhuān)?/p>

/**/3、文檔注釋?zhuān)何臋n注釋可以使用javadoc命令生成HTML幫助文檔。

javadoc-d輸出目錄包|.java

/***文檔注釋*/基于J2SE7.0進(jìn)行GUI編程----第三章標(biāo)識(shí)符、關(guān)鍵字和數(shù)據(jù)類(lèi)型3.2分號(hào)、塊和空白

1、分號(hào):

Java中所有語(yǔ)句必須以;結(jié)束,單獨(dú)的一個(gè)分號(hào)為空語(yǔ)句。

2、語(yǔ)句塊:語(yǔ)句塊必須以{開(kāi)始及}結(jié)束。

{//語(yǔ)句塊中的語(yǔ)句}

語(yǔ)句塊可以嵌套。3、空白:在語(yǔ)句的元素之間可以有空白。并允許任意數(shù)量的空白,包括空格、制表符和換行符,以提高源代碼的清晰度和直觀(guān)效果。

基于J2SE7.0進(jìn)行GUI編程----第三章標(biāo)識(shí)符、關(guān)鍵字和數(shù)據(jù)類(lèi)型3.3標(biāo)識(shí)符

Java中的標(biāo)識(shí)符是為變量、類(lèi)或方法起的一個(gè)名稱(chēng)。標(biāo)識(shí)符以字母、下劃線(xiàn)_或美元符號(hào)$開(kāi)頭,其后可以是字母、數(shù)字和下劃線(xiàn)的組合,沒(méi)有長(zhǎng)度限制。標(biāo)識(shí)符不能使用Java的關(guān)鍵字。

Java源代碼中的字符是16位即雙字節(jié)Unicode字符。雖然Java支持使用Unicode字符做為標(biāo)識(shí)符,但建議變量名、類(lèi)名、方法名等標(biāo)識(shí)符只使用ASCII字符(英文字符)。3.4Java編程語(yǔ)言關(guān)鍵字關(guān)鍵字對(duì)Java編譯器有特殊意義,它們標(biāo)識(shí)數(shù)據(jù)類(lèi)型名稱(chēng)或程序結(jié)構(gòu)名稱(chēng)。

Java編程語(yǔ)言關(guān)鍵字:abstract continue for new switchassert default goto package synchronizedboolean do if private thisbreak double implements protected throwbyte else import public throwscase enum instanceof return transientcatch extends int short trychar final interface static voidclass finally long strictfp volatileconst float native super while基于J2SE7.0進(jìn)行GUI編程----第三章標(biāo)識(shí)符、關(guān)鍵字和數(shù)據(jù)類(lèi)型

對(duì)Java關(guān)鍵字的說(shuō)明:

1、true、false和null都是小寫(xiě),它們不是Java的關(guān)鍵字,也是Java字符(常量)2、沒(méi)有sizeof運(yùn)算符,Java中不能直接訪(fǎng)問(wèn)內(nèi)存,因此sizeof沒(méi)有用。

3、Java編程語(yǔ)言不使用關(guān)鍵字goto和const。3.5基本Java編程語(yǔ)言數(shù)據(jù)類(lèi)型

Java編程語(yǔ)言有許多內(nèi)置的數(shù)據(jù)類(lèi)型,這數(shù)據(jù)類(lèi)型分為兩類(lèi):類(lèi)數(shù)據(jù)類(lèi)型和基本數(shù)據(jù)類(lèi)型?;緮?shù)據(jù)類(lèi)型即簡(jiǎn)單的值,而非對(duì)象。類(lèi)數(shù)據(jù)類(lèi)型用于更為復(fù)雜的數(shù)據(jù)類(lèi)型,包含您自己聲明的所有類(lèi)型。類(lèi)數(shù)據(jù)類(lèi)型習(xí)慣上用來(lái)創(chuàng)建對(duì)象。3.5.1基本數(shù)據(jù)類(lèi)型

1、邏輯類(lèi)型:booleanboolean類(lèi)型的常量值為:true和falsebooleantruth=true;Java中boolean類(lèi)型只能保存true或false,而不能使用數(shù)字表示boolean類(lèi)型的值2、字符類(lèi)型:charJava中單個(gè)字符使用char類(lèi)型表示,char表示雙字節(jié)Unicode字符,必須位于’’之內(nèi)。

‘a(chǎn)’字母a‘\t’制表符

‘\u????’表示特定的Unicode字符,例如,’\u03A6’表示一個(gè)特殊字符基于J2SE7.0進(jìn)行GUI編程----第三章標(biāo)識(shí)符、關(guān)鍵字和數(shù)據(jù)類(lèi)型\\\字符本身\’‘字符本身

\""字符本身\n換行符

charch=‘A’;charch1,ch2;3、字符類(lèi)型:String

可以使用String類(lèi)型(它不是基本類(lèi)型,而是一個(gè)特殊的類(lèi)類(lèi)型)來(lái)表示字符串。String仍然是一個(gè)Unicode字符串,在String類(lèi)型中仍然允許使用轉(zhuǎn)義字符。Java中的String不以\0(空字符)結(jié)束。String是非常特殊的對(duì)象數(shù)據(jù)類(lèi)型,保存其中的值不能被更改。

String類(lèi)型必須以""引起來(lái)。

Stringgreeting="GoodMorning!!\n";

StringerrorMessage="RecordNotFound!";Stringstr1,str2;

空字符串:""或者使用null基于J2SE7.0進(jìn)行GUI編程----第三章標(biāo)識(shí)符、關(guān)鍵字和數(shù)據(jù)類(lèi)型4、整數(shù)類(lèi)型:byte、short、int和longJava編程語(yǔ)言的四種整數(shù)類(lèi)型??梢允褂檬M(jìn)制、八進(jìn)制或十六進(jìn)制形式來(lái)表示整數(shù)類(lèi)型的數(shù)據(jù)。格式:

225 十進(jìn)制

077 八進(jìn)制

0xBAAC0X23f十六進(jìn)制

Java中數(shù)字類(lèi)型都是帶有符號(hào),即可以表示正數(shù)也可以表示負(fù)數(shù)。Java中l(wèi)ong類(lèi)型的常量必須后綴l或L表示,建議使用L。

2L077L0xBAACL1)、byte:字節(jié)類(lèi)型(1byte)-128到127-2^7到2^

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論