Java程序設(shè)計(jì)教程與實(shí)驗(yàn)課件_第1頁(yè)
Java程序設(shè)計(jì)教程與實(shí)驗(yàn)課件_第2頁(yè)
Java程序設(shè)計(jì)教程與實(shí)驗(yàn)課件_第3頁(yè)
Java程序設(shè)計(jì)教程與實(shí)驗(yàn)課件_第4頁(yè)
Java程序設(shè)計(jì)教程與實(shí)驗(yàn)課件_第5頁(yè)
已閱讀5頁(yè),還剩470頁(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)介

第1章Java概述Java概述21.1.1Java的誕生前身:OAK(JamesGosling1990)Java大事記90年,Sun公司開(kāi)始Green工程93年,WWW席卷全球94年,開(kāi)始定位于Internet95.1,Java命名Hotjava,第一個(gè)支持Java的瀏覽器

Netscape2.0Java概述31.1.2Java的發(fā)展發(fā)展:面向網(wǎng)絡(luò)應(yīng)用,類(lèi)庫(kù)不斷豐富,性能不斷提高,應(yīng)用領(lǐng)域不斷拓展。1995.5.23Java誕生(Java1.0.2API)1997.2.18JDK1.1VJ++6.0、cafe、JBuilder….支持1998.12JDK1.2 (Java2SDKv1.2StandardEdition)網(wǎng)址(查詢(xún)新動(dòng)向)Java概述4Java的發(fā)展Java版本與Java開(kāi)發(fā)環(huán)境的關(guān)系Java1.2開(kāi)始,JDK更名為SDKJDK1.2開(kāi)發(fā)Java1.2,JDK1.3開(kāi)發(fā)Java1.3,JDK1.4開(kāi)發(fā)Java1.4Java1.x統(tǒng)稱(chēng)為Java2程序JDK1.5Java概述5Java2.0開(kāi)始,JDK分為三個(gè)版本J2EE(企業(yè)級(jí)版本)J2SE(標(biāo)準(zhǔn)版本)J2ME(微型版本)1.1.3Java的現(xiàn)狀與應(yīng)用J2MEJava概述61.2.1Java是什么Asimple,object-oriented,distributed,interpreted,robust,secure,architecture-neutral,portable,high-

performance,multi-threaded,dynamiclanguage.一種OOP語(yǔ)言一個(gè)平臺(tái)(JVM和JavaAPI)Java概述71.2.2Java的特點(diǎn)Java=“C++”–“復(fù)雜性和奇異性”+“安全性和可移植性”Java概述8Java的特點(diǎn)面向?qū)ο笸耆陬?lèi)、對(duì)象:OOA,OOD,OOP以類(lèi)的形式組織代碼,數(shù)據(jù)類(lèi)型封裝、繼承、多態(tài)Java概述9Java的特點(diǎn)簡(jiǎn)單:Java最初是為家用電器進(jìn)行集成控制而設(shè)計(jì)的一種語(yǔ)言,因此它必須簡(jiǎn)單明了。其簡(jiǎn)單性主要體現(xiàn)在三個(gè)方面。C++like摒棄了C++中容易引發(fā)程序錯(cuò)誤的一些特性,如指針、結(jié)構(gòu)、枚舉等,并能進(jìn)行自動(dòng)內(nèi)存管理。提供了豐富的類(lèi)庫(kù)Java概述10Java的特點(diǎn)分布式健壯性(魯棒性)檢查數(shù)據(jù)類(lèi)型的匹配,數(shù)組下標(biāo)越界不支持指針,保護(hù)內(nèi)存數(shù)據(jù)、程序自動(dòng)內(nèi)存管理,碎片收集(垃圾回收機(jī)制)例外控制機(jī)制,正確處理運(yùn)行時(shí)錯(cuò)誤安全性刪除指針和釋放內(nèi)存等C++功能Java的安全體系架構(gòu)Java概述11Java的特點(diǎn)解釋執(zhí)行結(jié)構(gòu)中立:字節(jié)碼與計(jì)算機(jī)結(jié)構(gòu)無(wú)關(guān)可移植語(yǔ)言規(guī)范避免了與具體實(shí)現(xiàn)有關(guān)的描述多線程:支持多任務(wù)高效:JIT(Just-In-Time)及時(shí)編譯器動(dòng)態(tài):可動(dòng)態(tài)增加和修改類(lèi)庫(kù)內(nèi)容Java概述121.3Java與C/C++的區(qū)別1.全局變量2.條件轉(zhuǎn)移指令3.指針4.內(nèi)存管理5.?dāng)?shù)據(jù)類(lèi)型的一致性6.類(lèi)型轉(zhuǎn)換7.頭文件8.編譯預(yù)處理Java概述139.結(jié)構(gòu)體和共用體10.常量11.多重繼承12.異常處理13.面向?qū)ο蟪绦蛟O(shè)計(jì)Java概述141.4.1Java的工作原理Java平臺(tái)的兩個(gè)組件JavaVM是Java平臺(tái)的基礎(chǔ)JavaAPI是預(yù)先建立的軟件組件的集合,提供豐富的功能,如GUI部件。JavaAPI被分為相關(guān)類(lèi)和接口的庫(kù),這些庫(kù)稱(chēng)為包(package)Java概述15JavaAPI和JavaVM將程序與硬件分離從而實(shí)現(xiàn)跨平臺(tái)功能JavaJava概述16Java虛擬機(jī)Java虛擬機(jī)(JVM)Java處理器“芯片”,一般由軟件實(shí)現(xiàn)Java虛擬機(jī)類(lèi)裝入器字節(jié)碼驗(yàn)證器解釋器字節(jié)碼執(zhí)行Java概述17問(wèn):JVM是不是跨平臺(tái)的?不是,不同的平臺(tái)分別設(shè)計(jì)不同的JVM。Java字節(jié)碼沒(méi)有保存特定平臺(tái)的信息。Java概述18Java的工作方式文件類(lèi)型.java Java源文件.class 二進(jìn)制字節(jié)碼文件運(yùn)行機(jī)制對(duì)于大多數(shù)語(yǔ)言,要運(yùn)行程序,要么編譯程序要么解釋程序;而Java語(yǔ)言的程序則既要被編譯又要被解釋。Java概述19Java的工作方式

編譯程序?qū)ava源程序翻譯為字節(jié)碼(bytecode)程序;解釋程序Java虛擬機(jī)分析并運(yùn)行字節(jié)碼程序。一次編寫(xiě),處處運(yùn)行Writeonce,runanywhere!Java概述20用Java源程序先被編譯、后被解釋Java概述211.4.2Java的運(yùn)行系統(tǒng)Java的運(yùn)行系統(tǒng)是各平臺(tái)廠商對(duì)JVM的具體實(shí)現(xiàn)。對(duì)于Java中的兩類(lèi)程序:JavaApplication(Java應(yīng)用程序)和JavaApplet(Java小應(yīng)用程序),存在兩種不同類(lèi)型的運(yùn)行系統(tǒng);對(duì)于JavaApplication,運(yùn)行系統(tǒng)是Java解釋器;而對(duì)于JavaApplet,運(yùn)行系統(tǒng)是指Java兼容的Web瀏覽器,該瀏覽器中包含了支持Applet運(yùn)行的環(huán)境。Java概述221.5.1JAVA開(kāi)發(fā)工具JDK系列(Sun)命令行JavaWorkShop(Sun)

SymanteeCAFéJCreatorJBuilder(Borland)VisualJ++(MicroSoft)JavaStudio(Sun)VisualAgeforJava(IBM)OPTIONALJava概述231.5.2JDK下載與安裝 為了鼓勵(lì)使用Java語(yǔ)言開(kāi)發(fā)軟件,SunMicrosystems公司提供了免費(fèi)的軟件開(kāi)發(fā)工具包(SDK),其中包括編譯器、虛擬機(jī)、調(diào)試器等開(kāi)發(fā)工具,稱(chēng)為Java開(kāi)發(fā)工具包或JDK。

JDK(可從下載)jdk-1_5_0_08-windows-i586-pjdk-1_5_2-doc.zipJava概述24Java2SDKJava概述25安裝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)行類(lèi)庫(kù)等…Java概述26JDK實(shí)用程序javacJava編譯器,將Java源程序編譯成字節(jié)碼javaJava解釋器,直接從類(lèi)文件執(zhí)行Java應(yīng)用程序,即applicationappletviewer小程序?yàn)g覽器,執(zhí)行html文件上的Java小程序,即AppletJava概述27設(shè)置環(huán)境變量:

PATH=e:\jdk1.5.0_08\bin;CLASSPATH=.;Java概述281.6簡(jiǎn)單的Java程序Java程序分兩種:

Java應(yīng)用程序(JavaApplication)1.普通桌面應(yīng)用2.服務(wù)器端應(yīng)用

Java小程序(JavaApplet)(由瀏覽器解釋執(zhí)行)Java程序Java概述291.6.1Java應(yīng)用程序Java程序//ThisprogramprintsWelcometoJava!publicclassWelcome{ publicstaticvoidmain(String[]args){System.out.println("WelcometoJava!");}}例1:Java概述30程序解析:1.java注釋分為以下三種:(1)單行注釋?zhuān)簭?http://"開(kāi)始到本行結(jié)束的內(nèi)容都是注釋。(2)多行注釋?zhuān)涸?/*"和"*/"之間的所有內(nèi)容都是注釋。(3)文檔注釋?zhuān)涸谧⑨尫矫鎗ava提供了一種C/C++所不具有的文檔注釋方式。在“/**”和“*/”之間的文本,將自動(dòng)包含在用javadoc命令生成的HTML格式的文檔中。javadoc是JDK中API文檔生成器。該工具解析一組Java源文件中的聲明與文檔注釋?zhuān)梢唤MHTML頁(yè)面描述這些源程序中定義的類(lèi)、內(nèi)部類(lèi)、接口、構(gòu)造方法、方法、屬性等。JDK的API文檔就是用javadoc工具生成的。2.Java語(yǔ)言區(qū)分大小寫(xiě),包括文件名。Java概述313.關(guān)鍵字class用來(lái)聲明一個(gè)類(lèi),關(guān)鍵字public表示它是一個(gè)公共類(lèi),一個(gè)Java源程序最多只能有一個(gè)公共類(lèi)。類(lèi)定義體由一對(duì){}括起來(lái)。4.Java語(yǔ)言語(yǔ)句均以半角的分號(hào);結(jié)尾。5.類(lèi)體內(nèi)包含變量和函數(shù)的定義,變量稱(chēng)為類(lèi)的“成員變量”,函數(shù)在Java語(yǔ)言中稱(chēng)為“方法”。6.在該類(lèi)中定義了一個(gè)main()方法,其中public表示訪問(wèn)權(quán)限,指明所有的類(lèi)都可以使用這一方法。static指明該方法是一個(gè)類(lèi)方法(又稱(chēng)為靜態(tài)方法),它可以通過(guò)類(lèi)名直接調(diào)用;void則指明main()方法不返回任何值。對(duì)于一個(gè)應(yīng)用程序來(lái)說(shuō),main()方法是必需的,而且必須按照上述格式來(lái)定義。Java解釋器在沒(méi)有生成任何實(shí)例的情況下,以main()方法作為入口來(lái)執(zhí)行程序。Java概述327.Java程序中可以定義多個(gè)類(lèi),每個(gè)類(lèi)中可以定義多個(gè)方法,但是最多只能有一個(gè)公共類(lèi),main()方法也只能有一個(gè)。main()方法定義中,String[]args是傳遞給main()方法的參數(shù),參數(shù)名為args,它是String類(lèi)的一個(gè)實(shí)例,參數(shù)可以為一個(gè)或多個(gè),多個(gè)參數(shù)間用逗號(hào)分隔。8.語(yǔ)句System.out.println(“WelcometoJava”);的作用是調(diào)用系統(tǒng)類(lèi)庫(kù)中的System類(lèi)的成員out的println()方法實(shí)現(xiàn)字符串的輸出。與println()不同的是:print()方法在當(dāng)前行輸出,而println()方法在新的一行輸出。Java概述339.java源程序結(jié)構(gòu)10.源文件的命名規(guī)則:如果在源程序中包含有公共類(lèi)的定義,則該源文件名必須與該公共類(lèi)的名字完全一致,字母的大小寫(xiě)都必須一樣。這是java語(yǔ)言的一個(gè)嚴(yán)格的規(guī)定,如果不遵守,在編譯時(shí)就會(huì)出錯(cuò)。因此,在一個(gè)java源程序中至多只能有一個(gè)公共類(lèi)的定義。如果源程序中不包含公共類(lèi)的定義,則該文件名可以任意取名。如果在一個(gè)源程序中有多個(gè)類(lèi)定義和接口定義,則在編譯時(shí)將為每個(gè)類(lèi)生成一個(gè).class文件。(每個(gè)接口編譯后也生成.class文件)Java概述34附:使用對(duì)話框輸出信息也可使用JOptionPane的靜態(tài)方法進(jìn)行人機(jī)交互。如showMessageDialog

方法輸出信息。Java概述35源程序importjavax.swing.JOptionPane;public

classWelcomeInMessageDialogBox{ public

static

voidmain(String[]args){ //使用對(duì)話框輸出信息JOptionPane.showMessageDialog(null,"WelcometoJava!","DisplayMessage",JOptionPane.INFORMATION_MESSAGE);}}Java應(yīng)用基礎(chǔ)362.1標(biāo)識(shí)符、關(guān)鍵字Java語(yǔ)言使用國(guó)際字符集(Unicode)。Unicode字符集定義了一套國(guó)際標(biāo)準(zhǔn)字符集。通常的ASCII碼是8位的,而Unicode字符集中的每個(gè)字符占16位,即2個(gè)字節(jié),整個(gè)字符集共包括65336個(gè)字符,兼容ASCII,排在Unicode字符集最前面的256個(gè)字符就是ASCII碼。Unicode除了可以表示256個(gè)ASCII碼外,還可以表示漢字、拉丁語(yǔ)、希臘字母、朝鮮語(yǔ)等。Java應(yīng)用基礎(chǔ)372.1.1標(biāo)識(shí)符標(biāo)識(shí)符是賦予變量、類(lèi)、方法、數(shù)組、文件等的名稱(chēng)。Java語(yǔ)言規(guī)定標(biāo)識(shí)符是以字母、下劃線“_”或美元符號(hào)“$”開(kāi)始,隨后可跟數(shù)字、字母、下劃線或美元符號(hào)的字符序列。Java標(biāo)識(shí)符大小寫(xiě)敏感,沒(méi)有長(zhǎng)度限制,可以為標(biāo)識(shí)符取任意長(zhǎng)度的名字,但關(guān)鍵字不能作為標(biāo)識(shí)符。Java應(yīng)用基礎(chǔ)38關(guān)于標(biāo)識(shí)符為增強(qiáng)程序可讀性,Java作如下的約定:類(lèi)、接口:通常使用名詞,且每個(gè)單詞的首字母要大寫(xiě)方法:通常使用動(dòng)詞,首字母小寫(xiě),其后用大寫(xiě)字母分隔每個(gè)單詞常量:全部大寫(xiě),單詞之間用下劃線分隔變量:通常使用名詞,首字母小寫(xiě),其后大寫(xiě)字母分隔每個(gè)單詞,避免使用$符號(hào)。例:下面是合法的標(biāo)識(shí)符:identifier thisone UserName User_name _system_varl $max下面是不合法的標(biāo)識(shí)符:8_value (不能以數(shù)字打頭)$book*c (不能包含非法字符*)Java應(yīng)用基礎(chǔ)392.1.2關(guān)鍵字關(guān)鍵字是指對(duì)編譯器有特殊意義,在程序中不能用作其它目的的字符序列,關(guān)鍵字都是由小寫(xiě)字母組成的。Java中的關(guān)鍵字:abstract boolean break byte

case

catch char class continue default do double else extends final finally float for if implements import instanceof int interface long native new null package private protected public return short static super switch synchronized this throw throws transient try void volatile whileJava應(yīng)用基礎(chǔ)40關(guān)于關(guān)鍵字true和false不是關(guān)鍵字,類(lèi)似地,對(duì)象值null也沒(méi)有列入關(guān)鍵字。但是不能把它們派作其它用途。還有些關(guān)鍵字,如cast、future、goto、generic、inner、operator、outer、rest、var等都是Java保留的沒(méi)有意義的關(guān)鍵字。Java應(yīng)用基礎(chǔ)412.2基本數(shù)據(jù)類(lèi)型數(shù)據(jù)類(lèi)型規(guī)定一類(lèi)數(shù)據(jù)的數(shù)據(jù)位長(zhǎng)度,取值范圍,以及對(duì)該類(lèi)數(shù)據(jù)所能進(jìn)行的操作。Java數(shù)據(jù)類(lèi)型分為基本數(shù)據(jù)類(lèi)型和引用數(shù)據(jù)類(lèi)型(引用類(lèi)型又稱(chēng)為組合類(lèi)型)。Java語(yǔ)言定義了8種基本數(shù)據(jù)類(lèi)型,其分類(lèi)及關(guān)鍵字如下:整型:byte、short、int、long浮點(diǎn)型:float、double字符型:char布爾型:booleanJava應(yīng)用基礎(chǔ)42表2.1Java中的基本數(shù)據(jù)類(lèi)型Java應(yīng)用基礎(chǔ)432.3常量、變量Java語(yǔ)言中存在著兩種表征數(shù)據(jù)的形式:常量與變量。常量:程序運(yùn)行過(guò)程中保持不變,并且不可進(jìn)行修改的量。變量:用來(lái)存放數(shù)據(jù)且其值可以改變的量稱(chēng)為變量。Java應(yīng)用基礎(chǔ)442.3.1常量Java語(yǔ)言中常量有兩種類(lèi)型:一種稱(chēng)為直接常量也稱(chēng)為值常量,如12、-33、15.6;有多種類(lèi)型:1、2、3、4、5另一種稱(chēng)為符號(hào)常量,符號(hào)常量需要明確定義。Java語(yǔ)言中使用關(guān)鍵字final來(lái)定義符號(hào)常量,如下所示:finaldoublePI=3.1415926;其中PI即符號(hào)常量。double是該符號(hào)常量的類(lèi)型。注意:符號(hào)常量實(shí)質(zhì)上是一種特殊的變量,也是占用內(nèi)存空間的,不同于C語(yǔ)言編譯預(yù)處理定義的宏。Java應(yīng)用基礎(chǔ)451.整型常量(byte、short、int、long)整型常量可以用來(lái)給整型變量賦值,可以用十進(jìn)制、八進(jìn)制和十六進(jìn)制來(lái)表示。(1)十進(jìn)制整型常量由0至9的數(shù)字組成,沒(méi)有前綴,不能以0開(kāi)始,沒(méi)有小數(shù)部分。例如:124,-36等。(2)八進(jìn)制整型常量,以0為前綴,其后由0到7的數(shù)字組成,沒(méi)有小數(shù)部分。例如:0332,-0122等。(3)十六進(jìn)制整型常量,以0x或0X為前綴,其后由0到9的數(shù)字和A到F(大小寫(xiě)均可)字母組成,沒(méi)有小數(shù)部分。例如:0x3A,-0X43f等。Java應(yīng)用基礎(chǔ)462.浮點(diǎn)型常量(float、double)浮點(diǎn)型常量有兩種表示方式:(1)十進(jìn)制小數(shù)表示法,它是由整數(shù)部分和小數(shù)部分組成的。如:4.0,33.32等。小數(shù)點(diǎn)兩邊的數(shù)字不能同時(shí)省略且小數(shù)點(diǎn)不能省略。(2)科學(xué)計(jì)數(shù)法表示,它常用來(lái)表示很大或很小的數(shù),如1.2×1026在Java中表示為1.2E26。表示方法是在小數(shù)表示法后加e(或E)及指數(shù)部分。但要注意,e(或E)前面必須有數(shù)字,指數(shù)部分可正可負(fù),但都是整數(shù)(正號(hào)可省略)。例如,4.2E-5,3e6等。Java應(yīng)用基礎(chǔ)473.布爾型常量boolean布爾型常量值只有true和false,true和false必須要小寫(xiě)。true表示“邏輯真”,false表示“邏輯假”。注意,和C/C++語(yǔ)言不同,在Java語(yǔ)言中不能認(rèn)為“非0值或1”是true,“0值”是false。Java應(yīng)用基礎(chǔ)484.字符型常量Java中的字符采用Unicode字符集的編碼方案,是16位的無(wú)符號(hào)整數(shù),占2個(gè)字節(jié),表示的字符從0~65535。Unicode字符集可以支持各類(lèi)文字的字符。字符型常量分為一般字符常量和轉(zhuǎn)義字符常量。對(duì)于可輸入字符,用單引號(hào)將字符括起來(lái),如‘a(chǎn)’,‘A’,‘我’等。對(duì)于不可輸入字符,采用轉(zhuǎn)義字符表示。Java應(yīng)用基礎(chǔ)49表2.2轉(zhuǎn)義字符Java應(yīng)用基礎(chǔ)505.字符串常量字符串并不是Java的基本數(shù)據(jù)類(lèi)型,它是Java提供的位于java.lang包中的String類(lèi),字符串常量就是字符串類(lèi)java.lang.String類(lèi)的一個(gè)對(duì)象,故它可以使用類(lèi)String中的方法,所有字符串常量值都用雙引號(hào)括起來(lái)。需要注意的是null可以簡(jiǎn)單視為一個(gè)引用類(lèi)型的常量值,表示不引用任何對(duì)象。在Java編碼規(guī)范中,規(guī)定null是所謂null類(lèi)型的唯一值,且規(guī)定null可轉(zhuǎn)換到任何引用類(lèi)型。Java應(yīng)用基礎(chǔ)512.3.2變量每個(gè)變量都要有個(gè)名字,變量名必須是合法的標(biāo)識(shí)符,并且最好具有一定的意義,有意義的變量名可以提高程序的可讀性。比如,要定義一個(gè)表示學(xué)生數(shù)量的變量,用student_num做變量名要比用k更合適。所有變量在使用之前必須被定義,格式如下:數(shù)據(jù)類(lèi)型關(guān)鍵字變量名[=初始值];Java應(yīng)用基礎(chǔ)52例://x為基本整型intx;//y為浮點(diǎn)數(shù)(單精度),并且賦給初始值3.14floaty=3.14;//可以在一個(gè)語(yǔ)句中聲明多個(gè)同一類(lèi)型的變量longarea,width,length;Java應(yīng)用基礎(chǔ)532.4運(yùn)算符與表達(dá)式對(duì)各種類(lèi)型的數(shù)據(jù)進(jìn)行加工的過(guò)程稱(chēng)為運(yùn)算,表示各種不同運(yùn)算的符號(hào)稱(chēng)為運(yùn)算符,參與運(yùn)算的數(shù)據(jù)稱(chēng)為操作數(shù)。運(yùn)算符的優(yōu)先級(jí)與結(jié)合性如表所示。一個(gè)Java表達(dá)式是由操作數(shù)和運(yùn)算符按一定的語(yǔ)法規(guī)則組成的符號(hào)序列。Java應(yīng)用基礎(chǔ)54Java應(yīng)用基礎(chǔ)552.4.1賦值運(yùn)算符和賦值表達(dá)式1.賦值運(yùn)算符Java中,“=”被稱(chēng)為賦值運(yùn)算符,它的作用是設(shè)置變量的值,即將一個(gè)數(shù)據(jù)賦給一個(gè)變量,實(shí)際上是將特定的值寫(xiě)到變量所對(duì)應(yīng)的內(nèi)存單元中。賦值運(yùn)算符是雙目運(yùn)算符,因?yàn)椤?”兩邊都要有操作數(shù)。“=”左邊是待賦值的變量,右邊是要賦的值。除了“=”基本賦值運(yùn)算符外,另外還有幾個(gè)復(fù)合賦值運(yùn)算符:+=、-=、*=、/=和%=;五個(gè)由位運(yùn)算符和賦值運(yùn)算符組成的復(fù)合賦值運(yùn)算符:<<=、>>=、&=、|=、和^=。Java應(yīng)用基礎(chǔ)562.賦值表達(dá)式我們可以用常量對(duì)變量賦值,也可以用變量對(duì)變量賦值,還可以用任何表達(dá)式對(duì)變量賦值。用賦值運(yùn)算符連接起來(lái)的式子稱(chēng)為賦值表達(dá)式。賦值表達(dá)式的值就是被賦值的變量的值。賦值表達(dá)式加上分號(hào)就構(gòu)成了賦值語(yǔ)句,是極為常用的Java語(yǔ)句。示例:參看例2.3Java應(yīng)用基礎(chǔ)572.4.2算術(shù)運(yùn)算符和算術(shù)表達(dá)式1.算術(shù)運(yùn)算符Java提供的算術(shù)運(yùn)算符包括:加(+)、減(-)、乘(*)、除(/)和取余(%)。算術(shù)運(yùn)算符是雙目運(yùn)算符。利用算術(shù)運(yùn)算符連接起來(lái)的式子稱(chēng)為算術(shù)表達(dá)式。2.自增、自減運(yùn)算符++、--Java中還另外提供了兩個(gè)用于算術(shù)運(yùn)算的單目運(yùn)算符:自增運(yùn)算符++和自減運(yùn)算符--。其功能是使變量的值增1或減1。使用這兩個(gè)運(yùn)算符,可以讓程序更為簡(jiǎn)化、更容易閱讀。++和--運(yùn)算符有一個(gè)特點(diǎn),就是它們既可以位于變量名的左邊(稱(chēng)為前自增、前自減),又可以位于變量名的右邊(后自增、后自減),但結(jié)果卻是不一樣的。++和—運(yùn)算有以下四種情況:Java應(yīng)用基礎(chǔ)58(1)i++:使用i之后,i的值加1,即先取值,后自加。等價(jià)于i=i+1。(2)++i:先使i加1,然后再使用i,即先自加,后取值。等價(jià)于i=i+1。(3)i--:使用i之后,i的值減1,即先取值,后自減。等價(jià)于i=i-1。(4)--i:先使i減1,然后再使用i,即先自減,后取值。等價(jià)于i=i-1。注意:++和--運(yùn)算符只能用于變量,不能用于常量和表達(dá)式。因?yàn)?+和--蘊(yùn)含著賦值操作。++和--運(yùn)算符經(jīng)常用于循環(huán)程序設(shè)計(jì)中。Java應(yīng)用基礎(chǔ)592.4.3關(guān)系運(yùn)算符和關(guān)系表達(dá)式1.關(guān)系運(yùn)算符關(guān)系運(yùn)算符又稱(chēng)比較運(yùn)算符,因?yàn)殛P(guān)系運(yùn)算實(shí)際上是比較大小的運(yùn)算。Java提供了6種關(guān)系運(yùn)算符:>、>=、<、<=、==、!=。前4種優(yōu)先級(jí)相同,且高于后面的兩種。2.關(guān)系表達(dá)式用關(guān)系運(yùn)算符連接的式子稱(chēng)為關(guān)系表達(dá)式。一般格式為:表達(dá)式1關(guān)系運(yùn)算符表達(dá)式2關(guān)系表達(dá)式的值代表著某種關(guān)系的真假。比如,如果x的值是10,那么,x>5的值是“真”,而x<1的值是“假”。Java應(yīng)用基礎(chǔ)602.4.4邏輯運(yùn)算符和邏輯表達(dá)式1.邏輯運(yùn)算符Java提供了3種邏輯運(yùn)算符,&&(與)、||(或)、!(非)。a&&b:只有a與b都為true,結(jié)果才為true,否則為false。a||b:只有a與b都為false,結(jié)果才為false,否則為true。!a:與a的值相反。2.邏輯表達(dá)式用邏輯運(yùn)算符連接起來(lái)的式子稱(chēng)為邏輯表達(dá)式,用于表示復(fù)雜的運(yùn)算條件。Java應(yīng)用基礎(chǔ)61有一點(diǎn)需要指出,在邏輯表達(dá)式求值的過(guò)程中,并不是所有的邏輯運(yùn)算都被執(zhí)行,即在Java中要進(jìn)行所謂的短路計(jì)算。例如:(1)在求解a&&b&&c的值時(shí),只有a的值是真時(shí),才會(huì)計(jì)算b的值;只有a和b均為真時(shí),才會(huì)計(jì)算c的值。如果a為假,則不會(huì)繼續(xù)計(jì)算b和c的值,因?yàn)檎麄€(gè)表達(dá)式的值已經(jīng)確定了。(2)在求解a||b||c的值時(shí),只有a是假時(shí),才會(huì)計(jì)算b的值;只有a和b均為假時(shí),才會(huì)計(jì)算c的值。如果a是真,就不會(huì)計(jì)算b和c的值,因?yàn)檎麄€(gè)表達(dá)式的值已經(jīng)確定了。Java編譯程序按照“短路”計(jì)算方式來(lái)生成目標(biāo)代碼。Java應(yīng)用基礎(chǔ)622.4.5條件運(yùn)算符和條件表達(dá)式條件運(yùn)算符是Java提供的唯一一個(gè)三目運(yùn)算符。用條件運(yùn)算符連接起來(lái)的式子稱(chēng)為條件表達(dá)式。條件表達(dá)式的格式是:表達(dá)式1?表達(dá)式2:表達(dá)式3條件表達(dá)式的運(yùn)算規(guī)則如下:如果表達(dá)式1的值為真,那么整個(gè)條件表達(dá)式的值就是表達(dá)式2的值,否則整個(gè)條件表達(dá)式的值是表達(dá)式3的值。例:

4>6?3:9//整個(gè)表達(dá)式的值為9Java應(yīng)用基礎(chǔ)632.4.6位運(yùn)算符和位表達(dá)式位運(yùn)算符的作用在于對(duì)整數(shù)數(shù)值的二進(jìn)制表示進(jìn)行運(yùn)算,像二進(jìn)制的AND與OR等運(yùn)算。(1)按位求反運(yùn)算符~對(duì)操作數(shù)的二進(jìn)制數(shù)據(jù)的每一個(gè)二進(jìn)制位都取反,即1變成0,而0變成1。如~8的結(jié)果為-9。(2)位與運(yùn)算符&參與運(yùn)算的兩個(gè)操作數(shù),相應(yīng)的二進(jìn)制數(shù)位進(jìn)行位與運(yùn)算。如5&11結(jié)果為1。(3)位或運(yùn)算符|參與運(yùn)算的兩個(gè)操作數(shù),相應(yīng)的二進(jìn)制數(shù)位進(jìn)行位或運(yùn)算。如5|11結(jié)果為15。(4)位異或運(yùn)算符^參與運(yùn)算的兩個(gè)操作數(shù),相應(yīng)的二進(jìn)制數(shù)位進(jìn)行位異或運(yùn)算。如5^11結(jié)果為14。Java應(yīng)用基礎(chǔ)64(5)保留符號(hào)位的右移運(yùn)算符>>將一個(gè)操作數(shù)的各個(gè)二進(jìn)制位全部向右移若干位,這個(gè)位數(shù)由右操作數(shù)來(lái)決定,移到右端的低位被舍棄,左邊空出的位全部用最高位的符號(hào)位來(lái)填充。如5>>1結(jié)果為2。-9>>1,結(jié)果為-5。(6)不保留符號(hào)位的右移運(yùn)算符>>>與>>不同的是,>>>右移后左邊空出的位用0填充。如5>>>1結(jié)果為2。-9>>>1,結(jié)果為2147483643。(7)左移運(yùn)算符<<將一個(gè)操作數(shù)的所有二進(jìn)制位向左移若干位,右邊空出的位填0。若高位左移后溢出,則舍棄溢出的數(shù)。如5<<1結(jié)果為10。Java應(yīng)用基礎(chǔ)652.5流程控制語(yǔ)句程序控制可以定義為對(duì)程序語(yǔ)句的執(zhí)行順序進(jìn)行的規(guī)定。有三種結(jié)構(gòu):順序結(jié)構(gòu)分支結(jié)構(gòu)循環(huán)結(jié)構(gòu)為了實(shí)現(xiàn)程序執(zhí)行點(diǎn)的流程控制,Java提供了如下的分支、循環(huán)語(yǔ)句:分支控制語(yǔ)句包括:if-else、switch-case。循環(huán)控制語(yǔ)句包括:while、do-while和for。跳轉(zhuǎn)語(yǔ)句:break、return和continue。Java應(yīng)用基礎(chǔ)66除了上面的流程控制語(yǔ)句,還有兩類(lèi)特殊的語(yǔ)句:(1)異常處理語(yǔ)句:如try-catch-finally、throw等。參見(jiàn)第6章。(2)注釋語(yǔ)句。Java與C/C++之間的差別很細(xì)微,可歸納為兩點(diǎn):(1)在C語(yǔ)言中,條件表達(dá)式可以是數(shù)值型,而在Java條件語(yǔ)句中,條件表達(dá)式必須是布爾型,不能是數(shù)值。(2)Java取消了對(duì)goto語(yǔ)句的支持。goto語(yǔ)句的使用一直是程序設(shè)計(jì)者爭(zhēng)論的話題,這是因?yàn)間oto語(yǔ)句的使用不僅降低了程序的可讀性,而且往往會(huì)帶來(lái)一些不可預(yù)測(cè)的錯(cuò)誤。Java應(yīng)用基礎(chǔ)672.5.1順序結(jié)構(gòu)順序結(jié)構(gòu)是最簡(jiǎn)單、最基本的結(jié)構(gòu),在順序結(jié)構(gòu)內(nèi),順序執(zhí)行各個(gè)語(yǔ)句。圖2.1表示了一個(gè)順序結(jié)構(gòu)形式,從圖中可以看出它有一個(gè)入口a點(diǎn),一個(gè)出口b點(diǎn),在結(jié)構(gòu)內(nèi)A框和B框都是順序執(zhí)行的處理框。Java應(yīng)用基礎(chǔ)68空語(yǔ)句、表達(dá)式語(yǔ)句、復(fù)合語(yǔ)句是Java程序依次順序執(zhí)行的語(yǔ)句,故又稱(chēng)為順序結(jié)構(gòu)。空語(yǔ)句是僅由分號(hào)構(gòu)成的語(yǔ)句,表示什么動(dòng)作都不做。一個(gè)表達(dá)式加上一個(gè)分號(hào)就是一個(gè)表達(dá)式語(yǔ)句,只有少量的幾種表達(dá)式才能構(gòu)成表達(dá)式語(yǔ)句。它們是:由賦值運(yùn)算符構(gòu)成的表達(dá)式、由++或--構(gòu)成的表達(dá)式、方法調(diào)用、new表達(dá)式。標(biāo)號(hào)語(yǔ)句的格式為:標(biāo)識(shí)符:<語(yǔ)句>其中:<語(yǔ)句>可為任何合法的Java語(yǔ)句。復(fù)合語(yǔ)句是指由一對(duì)花括號(hào){}括起來(lái)的任意數(shù)量的語(yǔ)句,有時(shí)又稱(chēng)為塊語(yǔ)句或組語(yǔ)句。示例:參看例2.4Java應(yīng)用基礎(chǔ)692.5.2選擇結(jié)構(gòu)1.if語(yǔ)句(1)簡(jiǎn)單if語(yǔ)句if(布爾表達(dá)式){

語(yǔ)句(組);}其執(zhí)行過(guò)程是:首先計(jì)算布爾表達(dá)式的值,若為真true,則執(zhí)行塊內(nèi)語(yǔ)句,否則,if語(yǔ)句終止執(zhí)行,即不執(zhí)行塊內(nèi)語(yǔ)句而執(zhí)行if語(yǔ)句后面的其它語(yǔ)句,如圖2.2(a)所示。示例:參看例2.5Java應(yīng)用基礎(chǔ)70(2)if-else語(yǔ)句if(布爾表達(dá)式){

語(yǔ)句(組)A;}else{

語(yǔ)句(組)B;}其執(zhí)行過(guò)程是:首先計(jì)算布爾表達(dá)式的值,若為真,則執(zhí)行語(yǔ)句(組)A,否則執(zhí)行語(yǔ)句(組)B,如圖2.2(b)所示。示例:參看例2.6Java應(yīng)用基礎(chǔ)71(3)if語(yǔ)句的嵌套if語(yǔ)句中的任何一個(gè)子句可以是任意可執(zhí)行語(yǔ)句,當(dāng)然也可以是一條if語(yǔ)句,這種情況稱(chēng)為if語(yǔ)句的嵌套。當(dāng)出現(xiàn)if語(yǔ)句嵌套時(shí),不管書(shū)寫(xiě)格式如何,else都將與它前面最靠近的未曾配對(duì)的if語(yǔ)句相配對(duì),構(gòu)成一條完整的if語(yǔ)句。嵌套的深度沒(méi)有限制,if語(yǔ)句的嵌套可以實(shí)現(xiàn)多重選擇。示例:參看例2.7Java應(yīng)用基礎(chǔ)722.switch語(yǔ)句switch語(yǔ)句是多分支選擇語(yǔ)句,又稱(chēng)開(kāi)關(guān)語(yǔ)句。

switch語(yǔ)句的一般形式如下:switch(表達(dá)式){case常量表達(dá)式1:

語(yǔ)句組1;break;case常量表達(dá)式2:

語(yǔ)句組2;break;

…case常量表達(dá)式n:

語(yǔ)句組n;break;default: 語(yǔ)句組n+1;

}Java應(yīng)用基礎(chǔ)732.5.3循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)是指在一定條件下反復(fù)執(zhí)行一個(gè)程序塊的結(jié)構(gòu)。循環(huán)結(jié)構(gòu)也是只有一個(gè)入口,一個(gè)出口。根據(jù)循環(huán)條件的不同,循環(huán)結(jié)構(gòu)分為當(dāng)型循環(huán)結(jié)構(gòu)和直到型循環(huán)結(jié)構(gòu)兩種。Java應(yīng)用基礎(chǔ)74當(dāng)型循環(huán)的結(jié)構(gòu)如圖2.5,其功能是:當(dāng)給定的條件p成立時(shí),執(zhí)行A框操作,執(zhí)行完A操作后,再判斷p條件是否成立,如果成立,再次執(zhí)行A操作,如此重復(fù)執(zhí)行A操作,直到判斷p條件不成立才停止循環(huán)。此時(shí)不執(zhí)行A操作,而從出口b跳出循環(huán)結(jié)構(gòu)。Java應(yīng)用基礎(chǔ)75直到型循環(huán)的結(jié)構(gòu)如圖2.6,其功能是,先執(zhí)行A框操作,然后判斷給定條件p是否成立,如果成立,再次執(zhí)行A操作;然后再對(duì)p進(jìn)行判斷,如此反復(fù),直到給定的p條件不成立為止。此時(shí)不再執(zhí)行A框,從出口b跳出循環(huán)。Java應(yīng)用基礎(chǔ)76Java語(yǔ)言中,實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的控制語(yǔ)句有while、do~while、for語(yǔ)句。1.while循環(huán)while語(yǔ)句用來(lái)實(shí)現(xiàn)“當(dāng)型”循環(huán)結(jié)構(gòu),即先判斷表達(dá)式,后執(zhí)行語(yǔ)句。其一般形式如下:while(循環(huán)條件){語(yǔ)句;//循環(huán)體}示例:參看例2.10Java應(yīng)用基礎(chǔ)772.do-while循環(huán)do-while語(yǔ)句用來(lái)實(shí)現(xiàn)“直到型”循環(huán)結(jié)構(gòu),即先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。其一般形式如下:do{

語(yǔ)句;//循環(huán)體}while(循環(huán)條件);示例:參看例2.11Java應(yīng)用基礎(chǔ)783.for循環(huán)for語(yǔ)句是java語(yǔ)言中使用靈活方便的一種循環(huán)語(yǔ)句,它不僅用于循環(huán)次數(shù)已知的情況,還能用于循環(huán)次數(shù)預(yù)先不能確定只給出循環(huán)結(jié)束條件的情況。for語(yǔ)句的一般形式為:for(表達(dá)式1;表達(dá)式2;表達(dá)式3){語(yǔ)句;//循環(huán)體}示例:參看例2.12Java應(yīng)用基礎(chǔ)794.break、continue、標(biāo)號(hào)、return語(yǔ)句、System.exit()方法Java中可以用break和continue兩個(gè)循環(huán)跳轉(zhuǎn)語(yǔ)句進(jìn)一步控制循環(huán)。這兩個(gè)語(yǔ)句的一般格式如下:break[label];//從所在的switch語(yǔ)句、循環(huán)語(yǔ)句中跳出。continue[label];//跳過(guò)循環(huán)體的剩余語(yǔ)句,開(kāi)始執(zhí)行下一次循環(huán)。break和continue可以用在三種循環(huán)語(yǔ)句中的任意一種。這兩個(gè)語(yǔ)句都可以帶標(biāo)號(hào)使用,也可以不帶標(biāo)號(hào)使用。標(biāo)號(hào)是出現(xiàn)在一個(gè)語(yǔ)句之前的標(biāo)識(shí)符,標(biāo)號(hào)后面要加一個(gè)冒號(hào),定義如下:label:statement;示例:參看例2.13與2.14Java應(yīng)用基礎(chǔ)80return語(yǔ)句和System.exit()方法return語(yǔ)句用來(lái)從當(dāng)前方法中退出,返回到調(diào)用該方法的語(yǔ)句處,并從緊跟該語(yǔ)句的下一條語(yǔ)句繼續(xù)執(zhí)行。如果在main()方法中執(zhí)行return語(yǔ)句,則使程序執(zhí)行返回到Java運(yùn)行系統(tǒng),因?yàn)镴ava運(yùn)行系統(tǒng)調(diào)用了main()方法。要想從程序的任意地方直接一步到位地退出程序,而不是返回到調(diào)用該方法的語(yǔ)句處,可以使用System.exit()方法。Java應(yīng)用基礎(chǔ)815.循環(huán)的嵌套一個(gè)循環(huán)體內(nèi)包含另一個(gè)完整的循環(huán)結(jié)構(gòu)稱(chēng)為循環(huán)的嵌套,內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多重循環(huán)。示例:參看例2.15與2.16(a)(b)(c)Java應(yīng)用基礎(chǔ)822.6Java開(kāi)發(fā)類(lèi)庫(kù)組成Java提供了豐富的標(biāo)準(zhǔn)類(lèi)來(lái)幫助程序設(shè)計(jì)者更方便快捷地編寫(xiě)程序,這些標(biāo)準(zhǔn)類(lèi)組成了類(lèi)包,主要有:java.langjava.awtjava.appletjava.awt.imagejava.awt.peerjava.iojava.util除了java.lang之外,其余類(lèi)包都不是java語(yǔ)言所必須的。Java應(yīng)用基礎(chǔ)831.java.lang本類(lèi)包中包含了各種定義Java語(yǔ)言時(shí)必須的類(lèi),這些類(lèi)能夠以其它類(lèi)不能使用的方式訪問(wèn)java的內(nèi)部。任何java程序都將自動(dòng)引入這個(gè)包。其中的類(lèi)包括:Object類(lèi):java中最原始、最重要的類(lèi),每個(gè)java類(lèi)都是它的子類(lèi),它實(shí)現(xiàn)了每個(gè)類(lèi)都必須具有的基本方法?;绢?lèi)型包裝器:Boolean,Character,Number,Double,Float,Integer,Long。String類(lèi):字符串類(lèi)。Math類(lèi):數(shù)學(xué)函數(shù)的集合。執(zhí)行線程:類(lèi)Thread,ThreadGroup,接口Runable。System類(lèi)和Runtime類(lèi):可以通過(guò)類(lèi)Runtime和System訪問(wèn)外部系統(tǒng)環(huán)境。System類(lèi)的兩個(gè)常用功能就是訪問(wèn)標(biāo)準(zhǔn)輸入/輸出流和錯(cuò)誤流、退出程序。異常和錯(cuò)誤:類(lèi)Exception,Error,接口Throwable。其它類(lèi):接口Cloneable、運(yùn)行時(shí)的類(lèi)等。Java應(yīng)用基礎(chǔ)842.java.appletJavaApplet是Java編程的一個(gè)主要魅力,java.applet類(lèi)包提供了Applet的運(yùn)行機(jī)制以及一些編寫(xiě)Applet非常有用的方法。3.java.awt本類(lèi)包是各種窗口環(huán)境的統(tǒng)一界面(AWT代表AbstractWindowsToolkit,即抽象窗口工具包),其中的類(lèi)使得創(chuàng)建諸如窗口、菜單、滾動(dòng)條、文本區(qū)、按鈕以及復(fù)選框等圖形用戶(hù)界面(GUI)的元素變得非常容易。4.java.awt.image本類(lèi)包能夠以獨(dú)立于設(shè)備的方式加載并過(guò)濾位圖圖像。5.java.awt.peerjava.awt.peer是全部awt組件的對(duì)等對(duì)象接口的集合,每個(gè)接口都提供了機(jī)器相關(guān)的基本方法,awt使用這些方法來(lái)實(shí)現(xiàn)GUI,而不必關(guān)心是何種機(jī)器或操作系統(tǒng)。Java應(yīng)用基礎(chǔ)856.java.ioJava的輸入/輸出模式是完全建立在流的基礎(chǔ)之上的。流是一種字節(jié)從一個(gè)地方到另一個(gè)地方的單向流動(dòng),可以把流附加于文件、管道和通信鏈路等。java.io類(lèi)包中定義的許多種流類(lèi)通過(guò)繼承的方式進(jìn)行組織,其中也包括一些用來(lái)訪問(wèn)本地文件系統(tǒng)上的文件流類(lèi)。7.類(lèi)包用來(lái)完成與網(wǎng)絡(luò)相關(guān)的功能:URL、WWW連接以及更為通用的Socket網(wǎng)絡(luò)通信。8.java.utiljava.util類(lèi)包包含了一些實(shí)用類(lèi)和有用的數(shù)據(jù)結(jié)構(gòu),如字典(Dictionary)、散列表(Hashtable)、堆棧(Stack)、向量(Vector)以及枚舉類(lèi)(Enumeration)等,使用它們開(kāi)發(fā)者可以更方便快捷地編程。Java應(yīng)用基礎(chǔ)869.java.rmi包、java.rmi.registry包和java.rmi.server包這三個(gè)包用來(lái)實(shí)現(xiàn)RMl(remotemethodinvocation,遠(yuǎn)程方法調(diào)用)功能。利用RMI功能,用戶(hù)程序可以在遠(yuǎn)程計(jì)算機(jī)(服務(wù)器)上創(chuàng)建對(duì)象,并在本地計(jì)算機(jī)(客戶(hù)機(jī))上使用這個(gè)對(duì)象。10.java.sql包java.sql包是實(shí)現(xiàn)JDBC(Javadatabaseconnection)的類(lèi)庫(kù)。利用這個(gè)包可以使Java程序具有訪問(wèn)不同種類(lèi)的數(shù)據(jù)庫(kù)(如Oracle,Sybase,DB2,SQLServer等)的功能,只要安裝了合適的驅(qū)動(dòng)程序,同一個(gè)Java程序不需修改就可以存取、修改這些不同的數(shù)據(jù)庫(kù)中的數(shù)據(jù)。JDBC的這種功能,再加上Java程序本身具有的平臺(tái)無(wú)關(guān)性,大大拓寬了Java程序的應(yīng)用范圍,尤其是商業(yè)應(yīng)用的適用領(lǐng)域。類(lèi)和對(duì)象873.1概述3.1.1對(duì)象(object)3.1.2類(lèi)(class)3.1.3消息(message)3.1.4面向?qū)ο笙到y(tǒng)的特性1.抽象性(abstract) 2.封裝性(encapsulation)3.繼承性(inheritance)4.多態(tài)性(polymorphism)類(lèi)和對(duì)象883.2類(lèi)和對(duì)象的定義及使用進(jìn)行Java程序設(shè)計(jì),實(shí)際上就是定義類(lèi)的過(guò)程。一個(gè)Java源程序文件往往是由許多個(gè)類(lèi)組成的。從用戶(hù)的角度看,Java源程序中的類(lèi)分為兩種:

1.系統(tǒng)定義的類(lèi),即Java類(lèi)庫(kù)?;?lèi):所有JAVA的類(lèi)都派生自O(shè)bjectJava的類(lèi)可組織在包(package)中Java提供的標(biāo)準(zhǔn)類(lèi)庫(kù)分布在一系列的包中,如java.lang,java.awt,等,jdk1.1后加入javax.swing等2.用戶(hù)自己定義的類(lèi)。編程的過(guò)程就是繼承基類(lèi)或標(biāo)準(zhǔn)類(lèi)而創(chuàng)建、定義特殊子類(lèi)的過(guò)程類(lèi)和對(duì)象893.2.1類(lèi)的定義Java中類(lèi)包括成員變量和成員方法兩部分。類(lèi)的成員變量可以是基本數(shù)據(jù)類(lèi)型的數(shù)據(jù)或數(shù)組,也可以是一個(gè)類(lèi)的實(shí)例;類(lèi)的方法用于處理該類(lèi)的數(shù)據(jù)。

1.類(lèi)的定義格式:[類(lèi)的修飾字]class類(lèi)名稱(chēng)[extends

父類(lèi)名稱(chēng)][implements

接口名稱(chēng)列表]{變量定義及初始化;方法定義及方法體;}類(lèi)體類(lèi)和對(duì)象90類(lèi)的修飾字:

[public|default(可缺省,非公開(kāi)類(lèi))][abstract|final]public:允許其他類(lèi)(沒(méi)有限制)訪問(wèn)本類(lèi),一個(gè)源文件僅可以有一個(gè)public類(lèi),且與文件同名。default(缺?。嚎杀划?dāng)前包中的其他類(lèi)訪問(wèn);如果定義時(shí)沒(méi)有public,則所有的類(lèi)都是friendly;abstract:沒(méi)有實(shí)例的抽象概念類(lèi)final:不能再被擴(kuò)展,不包含子類(lèi)的類(lèi);易于安全性的實(shí)現(xiàn),或用于創(chuàng)建固定功能的類(lèi)每個(gè)類(lèi)都擁有自己的名字空間,即指類(lèi)及其方法和變量可以在一定的范圍內(nèi)知道彼此的存在,可以使用。父類(lèi)繼承聲明:extends

父類(lèi)名(見(jiàn)繼承)實(shí)現(xiàn)接口(interface):implements

接口名關(guān)于類(lèi)定義的說(shuō)明類(lèi)和對(duì)象91例:定義圓類(lèi)//Circle.javapublicclassCircle{privatedoubleradius=1;//圓的半徑

privatestaticintnumberOfObjects=0;//創(chuàng)建的圓的個(gè)數(shù)

//以半徑1創(chuàng)建一個(gè)圓,圓的個(gè)數(shù)加1

publicCircle(){numberOfObjects++;}//以半徑newRadius創(chuàng)建一個(gè)圓,圓的個(gè)數(shù)加1

publicCircle(doublenewRadius){radius=newRadius;numberOfObjects++;}類(lèi)和對(duì)象92//獲取圓的半徑

publicdoublegetRadius(){returnradius;}//設(shè)置圓的半徑

publicvoidsetRadius(doublenewRadius){radius=(newRadius>=0)?newRadius:0;}//獲取圓的個(gè)數(shù)

publicstaticintgetNumberOfObjects(){returnnumberOfObjects;}//返回圓的面積

publicdoublefindArea(){returnradius*radius*3.14159;}}類(lèi)和對(duì)象932.類(lèi)定義中成員變量的聲明修飾符訪問(wèn)控制符(訪問(wèn)權(quán)限)public:可被所有其他類(lèi)引用protected:該類(lèi)自身、子類(lèi)、同一包中的其他類(lèi)private:僅可被該類(lèi)自身引用和修改,不能被其他任何類(lèi)(包括子類(lèi))引用default(缺省):本包中的類(lèi)[變量修飾字]變量數(shù)據(jù)類(lèi)型變量名1,變量名2[=變量初值]…;[public|protected|private][static][final][transient][volatile]類(lèi)和對(duì)象94static:類(lèi)變量或類(lèi)字段,對(duì)所有的實(shí)例一致,引用時(shí)前綴可使用類(lèi)名或?qū)ο竺?,屬于?lèi)。final:數(shù)值不變常量,定義同時(shí)應(yīng)對(duì)其進(jìn)行初始化volatile:異步控制修飾符,表示多個(gè)并發(fā)線程共享的變量,這使得各線程對(duì)該變量的訪問(wèn)保持一致。transient:與對(duì)象序列化有關(guān)類(lèi)和對(duì)象953.類(lèi)定義中方法的聲明訪問(wèn)控制符(權(quán)限):public、private、protected、default(缺?。方法修飾字]返回類(lèi)型方法名稱(chēng)(參數(shù)1,參數(shù)2,…)[throwsexceptionList]{…(statements;)//方法體:方法的內(nèi)容}[public|protected|private][static][final|abstract][native][synchronized]類(lèi)和對(duì)象96修飾符(Modifier):static:靜態(tài)方法,又稱(chēng)類(lèi)方法使用類(lèi)名或?qū)ο竺鳛榍熬Y,建議使用類(lèi)名在方法體中只能使用static變量和static方法或訪問(wèn)自己的局部變量abstract:只有接口沒(méi)有語(yǔ)句,要在子類(lèi)中通過(guò)重新定義(override)來(lái)實(shí)現(xiàn)final:不能被重新定義(override)類(lèi)和對(duì)象97throws:通告本方法中會(huì)產(chǎn)生的例外(異常)類(lèi)型,提醒調(diào)用者要對(duì)相應(yīng)的可能例外進(jìn)行處理。當(dāng)執(zhí)行此方法并發(fā)生了例外時(shí),程序會(huì)轉(zhuǎn)入調(diào)用者編制的例外處理程序段。類(lèi)和對(duì)象983.2.2創(chuàng)建對(duì)象創(chuàng)建一個(gè)類(lèi),就創(chuàng)建了一種新的數(shù)據(jù)類(lèi)型;聲明一個(gè)類(lèi)的變量,就是聲明了該類(lèi)的一個(gè)實(shí)例,即對(duì)象。創(chuàng)建對(duì)象包括聲明對(duì)象、實(shí)例化對(duì)象即為對(duì)象分配存儲(chǔ)空間兩步。1.聲明對(duì)象類(lèi)名對(duì)象名表;例:Circle

circleOne,circleTwo;類(lèi)和對(duì)象992.建立對(duì)象使用new運(yùn)算符和類(lèi)的構(gòu)造方法為聲明的對(duì)象分配內(nèi)存空間,如果類(lèi)中沒(méi)有構(gòu)造方法,系統(tǒng)會(huì)調(diào)用默認(rèn)的無(wú)參構(gòu)造方法。格式:對(duì)象名=new構(gòu)造方法(形參列表);

例如:circleOne=newCircle();//此時(shí)circleOne引用被分配內(nèi)存空間的其實(shí)地址circleTwo=newCircle(2.0);類(lèi)和對(duì)象1003.2.3對(duì)象的使用在程序中創(chuàng)建對(duì)象的目的是使用對(duì)象。創(chuàng)建一個(gè)對(duì)象就要為對(duì)象的各個(gè)成員變量分配存儲(chǔ)空間??梢酝ㄟ^(guò)引用對(duì)象的成員來(lái)使用對(duì)象:對(duì)象數(shù)據(jù)成員的引用方式如下:對(duì)象名.數(shù)據(jù)成員名對(duì)象的成員方法的引用方式如下:對(duì)象名.成員方法名(實(shí)際參數(shù)表)示例:參看例3.1類(lèi)和對(duì)象1013.2.4對(duì)象的清除。Java運(yùn)行時(shí)系統(tǒng)通過(guò)垃圾自動(dòng)回收機(jī)制周期性地釋放無(wú)用對(duì)象所使用的內(nèi)存,完成垃圾的自動(dòng)回收。當(dāng)一個(gè)對(duì)象的引用為空時(shí),該對(duì)象稱(chēng)為一個(gè)無(wú)用對(duì)象。垃圾收集器以較低優(yōu)先級(jí)在系統(tǒng)空閑周期中執(zhí)行,一次垃圾的收集速度比較慢,在某些情況下,我們也可以通過(guò)調(diào)用System類(lèi)的gc()方法,即調(diào)用System.gc()顯示執(zhí)行垃圾收集。類(lèi)和對(duì)象1023.3實(shí)例變量、實(shí)例方法和類(lèi)變量、類(lèi)方法在類(lèi)的數(shù)據(jù)成員和方法成員前用static關(guān)鍵字修飾的分別稱(chēng)為類(lèi)變量和類(lèi)方法,也稱(chēng)為靜態(tài)變量和靜態(tài)方法,非靜態(tài)的又分別稱(chēng)為實(shí)例變量和實(shí)例方法。在生成每個(gè)類(lèi)的實(shí)例對(duì)象時(shí),Java運(yùn)行時(shí)系統(tǒng)為每個(gè)對(duì)象分配一塊內(nèi)存,然后可以通過(guò)對(duì)象引用變量來(lái)訪問(wèn)這些對(duì)象的實(shí)例變量。不同對(duì)象的實(shí)例變量是不同的。類(lèi)和對(duì)象1033.4this關(guān)鍵字關(guān)鍵字this用來(lái)指向當(dāng)前對(duì)象或類(lèi)的實(shí)例變量。如果局部變量與實(shí)例變量重名,則局部變量?jī)?yōu)先,同名的實(shí)例變量或類(lèi)變量被隱藏。例: classTestThis{intday=1;voidsetDay(intday){

this.day=day;}}

類(lèi)和對(duì)象1043.5包包(package)是Java提供的文件(即公共類(lèi))的組織方式。一個(gè)包對(duì)應(yīng)一個(gè)文件夾,一個(gè)包中可以包括許多類(lèi)文件。包中還可以再有子包,稱(chēng)為包等級(jí)。包的作用有四個(gè):(1)定位類(lèi):具有相似功能的類(lèi)可以放置在同一個(gè)包中,這樣可以很容易地查找定位類(lèi)。(2)避免命名沖突:在開(kāi)發(fā)由其他程序員共享的可復(fù)用類(lèi)時(shí),會(huì)發(fā)生命名沖突,可以把類(lèi)放在不同包中,通過(guò)包名引用類(lèi)可以避免命名沖突。(3)可以方便地分發(fā)軟件。(4)控制類(lèi)之間的訪問(wèn)(參見(jiàn)第4章訪問(wèn)控制)。注意:包是一個(gè)類(lèi)名空間,同一個(gè)包中的類(lèi)和接口(參見(jiàn)第4章)不能重名,不同包中的類(lèi)可以重名。類(lèi)和對(duì)象1053.5.1創(chuàng)建包包的創(chuàng)建就是將源程序文件中的接口和類(lèi)納入指定的包。一般情況下,Java源程序由四部分組成:(1)一個(gè)包(package)定義語(yǔ)句(可選項(xiàng))。其作用是將本源文件中的接口和類(lèi)納入指定包。源文件中若有包說(shuō)明語(yǔ)句,必須是第一個(gè)語(yǔ)句;(2)若干個(gè)(import)語(yǔ)句(可選項(xiàng))。其作用是引入本源文件中所需要使用的包;(3)一個(gè)public的類(lèi)聲明。在一個(gè)源文件中只能有一個(gè)public類(lèi);(4)若干個(gè)屬于本包的類(lèi)聲明(可選)。包的定義語(yǔ)句格式:package

包名;類(lèi)和對(duì)象106例:packagepack1.pack2;創(chuàng)建包就是在當(dāng)前文件夾下創(chuàng)建一個(gè)子文件夾,存放這個(gè)包中包含的所有類(lèi)和接口的.class文件。packagepack1.pack2;語(yǔ)句中的符號(hào)“.”代表了目錄分隔符,說(shuō)明這個(gè)語(yǔ)句創(chuàng)建了兩個(gè)文件夾。第一個(gè)是當(dāng)前文件夾下的子文件夾pack1;第二個(gè)是pack1下的子文件夾pack2,當(dāng)前包中的所有類(lèi)就存放在這個(gè)文件夾里。類(lèi)和對(duì)象1073.5.2設(shè)置類(lèi)路徑包是一種組織代碼的有效手段,包名指出了程序中需要使用的.class文件的所在之處。另一個(gè)能指明.class文件所在的位置是環(huán)境變量CLASSPATH。在WindowsXP或Windows2000中可以通過(guò)設(shè)置“我的電腦”屬性來(lái)設(shè)置系統(tǒng)的環(huán)境變量。對(duì)于JavaApplication程序,還可以通過(guò)為Java解釋器設(shè)置參數(shù)來(lái)指定類(lèi)文件路徑。例如,對(duì)于JDK中的Java解釋器java.exe,有開(kāi)關(guān)參數(shù)-classpath;假設(shè)當(dāng)需要解釋執(zhí)行的test.class文件不在當(dāng)前目錄而在e盤(pán)的TEMP目錄下時(shí),可以使用如下的命令行語(yǔ)句:java-classpathe:\tempTest來(lái)運(yùn)行這個(gè)程序。類(lèi)和對(duì)象1083.5.3包的使用Java提供了豐富的標(biāo)準(zhǔn)類(lèi)來(lái)幫助程序設(shè)計(jì)者更方便快捷地編寫(xiě)程序,這些標(biāo)準(zhǔn)類(lèi)組成了類(lèi)包,主要有:java.langjava.awtjava.appletjava.awt.imagejava.awt.peerjava.iojava.util使用Swing組件進(jìn)行GUI設(shè)計(jì),使用javax.swing包中的類(lèi)除了java.lang之外,其余類(lèi)包都不是java語(yǔ)言所必須的。若要使用,必須進(jìn)行包的導(dǎo)入。類(lèi)和對(duì)象109將類(lèi)組織成包的目的是為了更好地利用包中的類(lèi)。通常一個(gè)類(lèi)只能引用與它在同一個(gè)包中的類(lèi)。如果需要使用其它包中的public類(lèi),則可以使用如下的幾種方法。(1)在引入的類(lèi)前加包名例如:pack1.pack2.Format.format(23.4533,2);

(2)用import關(guān)鍵字加載需要使用的類(lèi)例如上面的語(yǔ)句在程序開(kāi)始處增加了:

importpack1.pack2.Format;語(yǔ)句之后,就可以直接寫(xiě)成:Format.format(23.4533,2);(3)用import關(guān)鍵字加載整個(gè)包importpack1.pack2.*;

類(lèi)和對(duì)象1103.6內(nèi)部類(lèi)和匿名類(lèi)3.6.1內(nèi)部類(lèi)一個(gè)類(lèi)被嵌套定義于另一個(gè)類(lèi)中,稱(chēng)為內(nèi)部類(lèi)(InnerClasses)或內(nèi)隱類(lèi),包含內(nèi)部類(lèi)的類(lèi)稱(chēng)為外部類(lèi)。示例:參看例3.5類(lèi)和對(duì)象1113.6.2匿名類(lèi)有時(shí)在定義事件處理代碼時(shí),由于代碼短小,不必再明確定義一個(gè)類(lèi),可使用匿名內(nèi)部類(lèi)。匿名內(nèi)部類(lèi)是final(最終)類(lèi),非static類(lèi),匿名內(nèi)部類(lèi)將類(lèi)的聲明和創(chuàng)建類(lèi)的實(shí)例一步完成。主要應(yīng)用在事件處理的代碼編寫(xiě)中。類(lèi)和對(duì)象1123.7訪問(wèn)控制和類(lèi)的封裝性3.7.1訪問(wèn)控制對(duì)類(lèi)的成員變量和成員方法而言,其應(yīng)用范圍可以通過(guò)施以一定的訪問(wèn)權(quán)限來(lái)限定。

同一個(gè)類(lèi)中同一個(gè)包中不同包中的子類(lèi)不同包中的非子類(lèi)

private ★ default ★ ★ protected ★ ★ ★ public ★ ★ ★ ★ 繼承性和多態(tài)性1134.1繼承性類(lèi)具有繼承性,子類(lèi)對(duì)父類(lèi)的繼承關(guān)系體現(xiàn)了現(xiàn)實(shí)世界中特殊和一般的關(guān)系。通過(guò)繼承可以更有效地組織程序結(jié)構(gòu),明確類(lèi)間關(guān)系,并充分利用已有的類(lèi)來(lái)完成更復(fù)雜、深入的開(kāi)發(fā)。4.1.1派生類(lèi)的定義Java中的所有類(lèi)都是java.lang.Object類(lèi)的子類(lèi)。Java語(yǔ)言中派生類(lèi)的定義格式如下:示例:參看例4.1class<子類(lèi)>extends<唯一的父類(lèi)名>{<類(lèi)定義體>}繼承性和多態(tài)性1144.1.2super關(guān)鍵字1.數(shù)據(jù)成員的隱藏?cái)?shù)據(jù)成員的隱藏是指在子類(lèi)中重新定義一個(gè)與父類(lèi)中已定義的數(shù)據(jù)成員名完全相同的數(shù)據(jù)成員,即子類(lèi)擁有了兩個(gè)相同名字的數(shù)據(jù)成員,一個(gè)是繼承父類(lèi)的,另一個(gè)是自己定義的。當(dāng)子類(lèi)要操作繼承自父類(lèi)的同名數(shù)據(jù)成員時(shí),可使用關(guān)鍵字super引導(dǎo)。2.成員方法的覆蓋子類(lèi)可以重新定義與父類(lèi)格式完全相同(包括方法名、方法形參的個(gè)數(shù)和類(lèi)型、方法返回值的類(lèi)型)的成員方法,實(shí)現(xiàn)對(duì)父類(lèi)方法的覆蓋。繼承性和多態(tài)性115關(guān)于方法覆蓋只有當(dāng)實(shí)例方法能被訪問(wèn)時(shí),才能進(jìn)行方法覆蓋。私有方法不能被覆蓋.靜態(tài)方法(類(lèi)方法)能被繼承,但不能被覆蓋。子類(lèi)在重新定義父類(lèi)已有的方法時(shí),應(yīng)保持與父類(lèi)完全相同的方法名、返回值類(lèi)型和參數(shù)列表,否則就不是方法的覆蓋,而是子類(lèi)定義自己特有的方法,與父類(lèi)的方法無(wú)關(guān)。繼承性和多態(tài)性1163.super關(guān)鍵字super表示的是當(dāng)前對(duì)象的直接父類(lèi)對(duì)象,是當(dāng)前對(duì)象的直接父類(lèi)對(duì)象的引用。super的使用方法有三種:(1)訪問(wèn)直接父類(lèi)隱藏的數(shù)據(jù)成員,其使用形式如下:super.數(shù)據(jù)成員(2)調(diào)用直接父類(lèi)中被覆蓋的成員方法,其使用形式如下:super.成員方法(參數(shù))(3)調(diào)用直接父類(lèi)的構(gòu)造方法,其使用形式如下:super(參數(shù))示例:參看例4.2繼承性和多態(tài)性1174.1.3protected和final關(guān)鍵字1.protected關(guān)鍵字用protected修飾的成員變量可以被三種類(lèi)所引:該類(lèi)自身、與它在同一個(gè)包中的其它類(lèi)及在其它包中的該類(lèi)的子類(lèi)。2.final關(guān)鍵字使用final關(guān)鍵字可以定義常量。定義類(lèi)時(shí),在class關(guān)鍵字前加關(guān)鍵字final,表示此類(lèi)是最終類(lèi),不能被其它類(lèi)繼承,不能做父類(lèi)。用final修飾成員方法,表示此方法不能被它的子類(lèi)覆蓋。繼承性和多態(tài)性1183.native關(guān)鍵字native修飾的方法稱(chēng)為本地方法,此方法使用的目的是為了將其它語(yǔ)言(例如,C、C++、FORTRAN、匯編等)嵌入到Java語(yǔ)言中。這樣可以充分利用已經(jīng)存在的其它語(yǔ)言的程序功能模塊,避免重復(fù)編程。繼承性和多態(tài)性1194.2多態(tài)性多態(tài)是面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的一個(gè)重要特性,在Java中,可以在同一類(lèi)或不同類(lèi)中定義名稱(chēng)相同但是操作不同的多個(gè)方法,多態(tài)性指的是運(yùn)行時(shí)判斷應(yīng)該執(zhí)行哪個(gè)方法代碼的能力,這種能力也叫動(dòng)態(tài)綁定。在Java語(yǔ)言中,多態(tài)性分為編譯時(shí)多態(tài)性和運(yùn)行時(shí)多態(tài)性。編譯時(shí)的多態(tài)性是通過(guò)方法重載實(shí)現(xiàn)的,Java虛擬機(jī)根據(jù)傳遞給方法的參數(shù)個(gè)數(shù)和類(lèi)型決定調(diào)用哪個(gè)重載方法。繼承性和多態(tài)性120運(yùn)行時(shí)的多態(tài)性是Java多態(tài)性的最重要的體現(xiàn),在Java語(yǔ)言的繼承關(guān)系中,子類(lèi)對(duì)象與父類(lèi)對(duì)象之間有一個(gè)重要特性:在任何需要父類(lèi)對(duì)象的地方,都可以使用子類(lèi)對(duì)象來(lái)代替,即子類(lèi)對(duì)象可以作為父類(lèi)對(duì)象來(lái)使用。一個(gè)對(duì)象可以通過(guò)引用子類(lèi)的實(shí)例來(lái)調(diào)用子類(lèi)的方法,通常,方法在父類(lèi)中定義,在子類(lèi)中覆蓋,子類(lèi)中調(diào)用哪個(gè)方法是在運(yùn)行時(shí)決定的,取決于對(duì)象的類(lèi)型,稱(chēng)為運(yùn)行時(shí)的多態(tài)性。示例:參看例4.3繼承性和多態(tài)性1214.3抽象類(lèi)和接口抽象類(lèi)體現(xiàn)數(shù)據(jù)抽象的思想,是實(shí)現(xiàn)程序多態(tài)性的一種手段。接口則是Java中實(shí)現(xiàn)多重繼承的唯一途徑。4.3.1抽象類(lèi)抽象類(lèi)的作用在于將許多有關(guān)的類(lèi)組織在一起,提供一個(gè)公共的類(lèi),即抽象類(lèi),而那些被它組織在一起的具體的類(lèi)做為它的子類(lèi)由它派生出來(lái)。定義一個(gè)抽象類(lèi)的格式如下:abstractclassabstractClass{/*類(lèi)定義體*/}抽象方法是指在返回值類(lèi)型前加上abstract關(guān)鍵字,且沒(méi)有方法體。格式如下:abstract<返回值類(lèi)型><抽象方法名>([<形式參數(shù)列表>]);示例:參看例4.4繼承性和多態(tài)性122對(duì)于抽象類(lèi)與抽象方法的限制(1)凡是用abstract修飾符修飾的類(lèi)被稱(chēng)為抽象類(lèi)。凡是用abstract修飾符修飾的成員方法被稱(chēng)為抽象方法;(2)抽象類(lèi)中可以有零個(gè)或多個(gè)抽象方法,也可以包含非抽象的方法;(3)抽象類(lèi)中可以沒(méi)有抽象方法,但是,有抽象方法的類(lèi)必須是抽象類(lèi);(4)對(duì)于抽象方法來(lái)說(shuō),在抽象類(lèi)中只指定其方法名及其類(lèi)型,而不書(shū)寫(xiě)其實(shí)現(xiàn)代碼;(5)抽象類(lèi)可以派生子類(lèi),在抽象類(lèi)派生的子類(lèi)中必須實(shí)現(xiàn)抽象類(lèi)中定義的所有抽象方法;繼承性和多態(tài)性123(6)抽象類(lèi)不能使用new運(yùn)算符創(chuàng)建對(duì)象,但仍可在抽象類(lèi)中定義構(gòu)造方法,可由派生類(lèi)的構(gòu)造方法調(diào)用;(7)abstract和final不能同時(shí)修飾一個(gè)類(lèi);(8)abstract不能與private、static、final或native同時(shí)修飾一個(gè)方法;(9)abstract類(lèi)中不能有private的數(shù)據(jù)成員或成員方法;(10)父類(lèi)是非抽象類(lèi)(即具體類(lèi)),則其子類(lèi)仍可是抽象類(lèi);(11)雖然不能創(chuàng)建抽象類(lèi)的對(duì)象,但抽象類(lèi)可以當(dāng)作數(shù)據(jù)類(lèi)型使用,如作為方法形參類(lèi)型、返回值類(lèi)型、數(shù)組元素類(lèi)型等等。

繼承性和多態(tài)性1244.3.2

接口與C++不同,Java不支持多重繼承,而是用接口實(shí)現(xiàn)比多重繼承更強(qiáng)的功能。接口則把方法的定義和類(lèi)的層次區(qū)分開(kāi)來(lái),通過(guò)它可以在運(yùn)行時(shí)動(dòng)態(tài)地定位所調(diào)用的方法。同時(shí),接口可以實(shí)現(xiàn)“多重繼承”,且一個(gè)類(lèi)可實(shí)現(xiàn)多個(gè)接口,正是這些機(jī)制使得接口提供了比多重繼承更簡(jiǎn)單,更靈活,而且更強(qiáng)健的功能。接口就是方法定義和常量值的集合。從本質(zhì)上講,接口是一種特殊的抽象類(lèi),這種抽象類(lèi)中只包含常量和方法的定義,而沒(méi)有方法的實(shí)現(xiàn)。繼承性和多態(tài)性1251.聲明接口聲明接口的格式如下:[修飾符]interface接口名[extends父接口名列表]{常量數(shù)據(jù)成員聲明抽象方法聲明}其中:(1)interface是聲明接口的關(guān)鍵字,可以把它看成一個(gè)特殊類(lèi);(2)接口名要求符合Java標(biāo)識(shí)符命名規(guī)則;(3)修飾符有兩種:public和默認(rèn)。public修飾的接口是公共接口,可以被所有的類(lèi)和接口使用;默認(rèn)修飾符的接口只能被同一個(gè)包中的其它類(lèi)和接口使用;繼承性和多態(tài)性126(4)父接口列表:接口也具有繼承性。定義一個(gè)接口時(shí)可以通過(guò)extends關(guān)鍵字聲明該接口是某個(gè)已經(jīng)存在的父接口的派生接口,它將繼承父接口的所有屬性和方法。與類(lèi)的繼承不同的是一個(gè)接口可以有一個(gè)以上的父接口,它們之間用逗號(hào)分隔;(5)常量數(shù)據(jù)成員聲明:常量數(shù)據(jù)成員前可以有也可省略修飾符。修飾符是publicstatic和fina1;接口中的數(shù)據(jù)成員都是用final修飾的常量,寫(xiě)法如下:修飾符數(shù)據(jù)成員類(lèi)型數(shù)據(jù)成員名=常量值或數(shù)據(jù)成員名=常量值例如:publicfinalstaticdoublePI=3.14159;//等價(jià)于doublePI=3.14159;intSUM=100;//等價(jià)于finalstaticintSUM=100;繼承性和多態(tài)性127(6)接口中沒(méi)有自身的構(gòu)造方法,所有成員方法都是抽象方法;在接口中只能給出這些抽象方法的方法名、返回值和參數(shù)列表,而不能定義方法體,即僅僅規(guī)定了一組信息交換、傳輸和處理的“接口”。格式如下:返回值類(lèi)型方法名(參數(shù)列表);繼承性和多態(tài)性1282.接口的實(shí)現(xiàn)接口定義僅僅是實(shí)現(xiàn)某一特定功能的一組功能的對(duì)外接口和規(guī)范,而不能真正地實(shí)現(xiàn)這個(gè)功能,這個(gè)功能的真正實(shí)現(xiàn)是在“繼承”這個(gè)接口的各個(gè)類(lèi)中完成的,要由這些類(lèi)來(lái)具體定義接口中各抽象方法的方法體。一個(gè)類(lèi)只能繼承一個(gè)父類(lèi),但是可實(shí)現(xiàn)多個(gè)接口。類(lèi)定義的完整格式如下:[<修飾符>]class<類(lèi)名>[extends<父類(lèi)名>][implements<接口名1>,<接口名2>,……]{//類(lèi)定義體}示例:參看例4.5繼承性和多態(tài)性129關(guān)于接口的實(shí)現(xiàn)(1)在類(lèi)中,用implements關(guān)鍵字就可以調(diào)用接口。一個(gè)類(lèi)可以調(diào)用多個(gè)接口,這時(shí),在implements后用逗號(hào)隔開(kāi)多個(gè)接口的名字;(2)如果實(shí)現(xiàn)某接口的類(lèi)不是抽象類(lèi),則在類(lèi)的定義體部分必須實(shí)現(xiàn)指定接口的所有抽象方法,即為所有抽象方法定義方法體,而且方法頭部分應(yīng)該與接口中的定義完全一致,即有完全相同的返回值和參數(shù)列表;(3)如果實(shí)現(xiàn)某接口的類(lèi)是抽象類(lèi),則它可以不實(shí)現(xiàn)該接口所有的方法。(4)接口的抽象方法的訪問(wèn)限制符都己指定為public,所以類(lèi)在實(shí)現(xiàn)方法時(shí),必須顯式地使用public修飾符,否則編譯系統(tǒng)警告為縮小了接口中定義的方法的訪問(wèn)控制范圍。繼承性和多態(tài)性1303.接口和抽象類(lèi)的區(qū)別Java中所有的類(lèi)有共同的父類(lèi)java.lang.Object,但接口沒(méi)有共同的根。接口可以當(dāng)作抽象類(lèi)使用。它們的區(qū)別如下:(1)接口中的每個(gè)方法,沒(méi)有實(shí)現(xiàn)部分,都是抽象方法;抽象類(lèi)中可以有具體的方法。(2)接口中的數(shù)據(jù)必須是常量;抽象類(lèi)可以有各種類(lèi)型的數(shù)據(jù)。(3)由于定義在接口中的所有方法都是抽象方法,接口中可以省略abstract修飾符;但是抽象類(lèi)中的抽象方法必須用abstract修飾。繼承性和多態(tài)性1314.類(lèi)型轉(zhuǎn)換和instanceof運(yùn)算符基本數(shù)據(jù)類(lèi)型可以進(jìn)行強(qiáng)制或自動(dòng)類(lèi)型轉(zhuǎn)換,也可以把一個(gè)類(lèi)的對(duì)象轉(zhuǎn)換為繼承鏈中的另一個(gè)對(duì)象。將子類(lèi)的實(shí)例轉(zhuǎn)換為父類(lèi)的實(shí)例總是可行的,因

溫馨提示

  • 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)論