Java程序設計教程與實驗課件_第1頁
Java程序設計教程與實驗課件_第2頁
Java程序設計教程與實驗課件_第3頁
Java程序設計教程與實驗課件_第4頁
Java程序設計教程與實驗課件_第5頁
已閱讀5頁,還剩470頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

編譯程序?qū)ava根源程式翻譯為位元組碼(bytecode)程式;解釋程式Java虛擬機分析並運行位元組碼程式。一次編寫,處處運行Writeonce,runanywhere!Java概述20用Java根源程式先被編譯、後被解釋Java概述211.4.2Java的運行系統(tǒng)Java的運行系統(tǒng)是各平臺廠商對JVM的具體實現(xiàn)。對於Java中的兩類程式:JavaApplication(Java應用程式)和JavaApplet(Java小應用程式),存在兩種不同類型的運行系統(tǒng);對於JavaApplication,運行系統(tǒng)是Java解釋器;而對於JavaApplet,運行系統(tǒng)是指Java相容的Web流覽器,該流覽器中包含了支持Applet運行的環(huán)境。Java概述221.5.1JAVA開發(fā)工具JDK系列(Sun)命令行JavaWorkShop(Sun)

SymanteeCAFéJCreatorJBuilder(Borland)VisualJ++(MicroSoft)JavaStudio(Sun)VisualAgeforJava(IBM)OPTIONALJava概述231.5.2JDK下載與安裝 為了鼓勵使用Java語言開發(fā)軟體,SunMicrosystems公司提供了免費的軟體開發(fā)工具包(SDK),其中包括編譯器、虛擬機、調(diào)試器等開發(fā)工具,稱為Java開發(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開發(fā)工具,包括Java編譯器、解釋器等\demo目錄:一些實例程式\lib目錄:Java開發(fā)類庫\jre目錄:Java運行環(huán)境,包括Java虛擬機、運行類庫等…Java概述26JDK實用程式javacJava編譯器,將Java根源程式編譯成位元組碼javaJava解釋器,直接從類檔執(zhí)行Java應用程式,即applicationappletviewer小程式流覽器,執(zhí)行html檔上的Java小程式,即AppletJava概述27設置環(huán)境變數(shù):

PATH=e:\jdk1.5.0_08\bin;CLASSPATH=.;Java概述281.6簡單的Java程式Java程式分兩種:

Java應用程式(JavaApplication)1.普通桌面應用2.伺服器端應用

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

方法輸出資訊。Java概述35根源程式importjavax.swing.JOptionPane;public

classWelcomeInMessageDialogBox{ public

static

voidmain(String[]args){ //使用對話框輸出資訊JOptionPane.showMessageDialog(null,"WelcometoJava!","DisplayMessage",JOptionPane.INFORMATION_MESSAGE);}}Java應用基礎362.1識別字、關(guān)鍵字Java語言使用國際字元集(Unicode)。Unicode字元集定義了一套國際標準字元集。通常的ASCII碼是8位的,而Unicode字元集中的每個字元占16位,即2個位元組,整個字元集共包括65336個字元,相容ASCII,排在Unicode字元集最前面的256個字元就是ASCII碼。Unicode除了可以表示256個ASCII碼外,還可以表示漢字、拉丁語、希臘字母、朝鮮語等。Java應用基礎372.1.1識別字識別字是賦予變數(shù)、類、方法、數(shù)組、檔等的名稱。Java語言規(guī)定識別字是以字母、下劃線“_”或美元符號“$”開始,隨後可跟數(shù)字、字母、下劃線或美元符號的字元序列。Java識別字大小寫敏感,沒有長度限制,可以為識別字取任意長度的名字,但關(guān)鍵字不能作為識別字。Java應用基礎38關(guān)於識別字為增強程式可讀性,Java作如下的約定:類、介面:通常使用名詞,且每個單詞的首字母要大寫方法:通常使用動詞,首字母小寫,其後用大寫字母分隔每個單詞常量:全部大寫,單詞之間用下劃線分隔變數(shù):通常使用名詞,首字母小寫,其後大寫字母分隔每個單詞,避免使用$符號。例:下麵是合法的識別字:identifier thisone UserName User_name _system_varl $max下麵是不合法的識別字:8_value (不能以數(shù)字打頭)$book*c (不能包含非法字元*)Java應用基礎392.1.2關(guān)鍵字關(guān)鍵字是指對編譯器有特殊意義,在程式中不能用作其他目的的字元序列,關(guān)鍵字都是由小寫字母組成的。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應用基礎40關(guān)於關(guān)鍵字true和false不是關(guān)鍵字,類似地,對象值null也沒有列入關(guān)鍵字。但是不能把它們派作其他用途。還有些關(guān)鍵字,如cast、future、goto、generic、inner、operator、outer、rest、var等都是Java保留的沒有意義的關(guān)鍵字。Java應用基礎412.2基本數(shù)據(jù)類型數(shù)據(jù)類型規(guī)定一類數(shù)據(jù)的數(shù)據(jù)位長度,取值範圍,以及對該類數(shù)據(jù)所能進行的操作。Java數(shù)據(jù)類型分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型(引用類型又稱為組合類型)。Java語言定義了8種基本數(shù)據(jù)類型,其分類及關(guān)鍵字如下:整型:byte、short、int、long浮點型:float、double字元型:char布爾型:booleanJava應用基礎42表2.1Java中的基本數(shù)據(jù)類型Java應用基礎432.3常量、變數(shù)Java語言中存在著兩種表徵數(shù)據(jù)的形式:常量與變數(shù)。常量:程式運行過程中保持不變,並且不可進行修改的量。變數(shù):用來存放數(shù)據(jù)且其值可以改變的量稱為變數(shù)。Java應用基礎442.3.1常量Java語言中常量有兩種類型:一種稱為直接常量也稱為值常量,如12、-33、15.6;有多種類型:1、2、3、4、5另一種稱為符號常量,符號常量需要明確定義。Java語言中使用關(guān)鍵字final來定義符號常量,如下所示:finaldoublePI=3.1415926;其中PI即符號常量。double是該符號常量的類型。注意:符號常量實質(zhì)上是一種特殊的變數(shù),也是佔用記憶體空間的,不同於C語言編譯預處理定義的宏。Java應用基礎451.整型常量(byte、short、int、long)整型常量可以用來給整型變數(shù)賦值,可以用十進位、八進制和十六進制來表示。(1)十進位整型常量由0至9的數(shù)字組成,沒有首碼,不能以0開始,沒有小數(shù)部分。例如:124,-36等。(2)八進制整型常量,以0為首碼,其後由0到7的數(shù)字組成,沒有小數(shù)部分。例如:0332,-0122等。(3)十六進制整型常量,以0x或0X為首碼,其後由0到9的數(shù)字和A到F(大小寫均可)字母組成,沒有小數(shù)部分。例如:0x3A,-0X43f等。Java應用基礎462.浮點型常量(float、double)浮點型常量有兩種表示方式:(1)十進位小數(shù)表示法,它是由整數(shù)部分和小數(shù)部分組成的。如:4.0,33.32等。小數(shù)點兩邊的數(shù)字不能同時省略且小數(shù)點不能省略。(2)科學計數(shù)法表示,它常用來表示很大或很小的數(shù),如1.2×1026在Java中表示為1.2E26。表示方法是在小數(shù)表示法後加e(或E)及指數(shù)部分。但要注意,e(或E)前面必須有數(shù)字,指數(shù)部分可正可負,但都是整數(shù)(正號可省略)。例如,4.2E-5,3e6等。Java應用基礎473.布爾型常量boolean布爾型常量值只有true和false,true和false必須要小寫。true表示“邏輯真”,false表示“邏輯假”。注意,和C/C++語言不同,在Java語言中不能認為“非0值或1”是true,“0值”是false。Java應用基礎484.字元型常量Java中的字元採用Unicode字元集的編碼方案,是16位的無符號整數(shù),占2個位元組,表示的字元從0~65535。Unicode字元集可以支持各類文字的字元。字元型常量分為一般字元常量和轉(zhuǎn)義字元常量。對於可輸入字元,用單引號將字元括起來,如‘a(chǎn)’,‘A’,‘我’等。對於不可輸入字元,採用轉(zhuǎn)義字元表示。Java應用基礎49表2.2轉(zhuǎn)義字元Java應用基礎505.字串常量字串並不是Java的基本數(shù)據(jù)類型,它是Java提供的位於java.lang包中的String類,字串常量就是字串類java.lang.String類的一個對象,故它可以使用類String中的方法,所有字串常量值都用雙引號括起來。需要注意的是null可以簡單視為一個引用類型的常量值,表示不引用任何對象。在Java編碼規(guī)範中,規(guī)定null是所謂null類型的唯一值,且規(guī)定null可轉(zhuǎn)換到任何引用類型。Java應用基礎512.3.2變數(shù)每個變數(shù)都要有個名字,變數(shù)名必須是合法的識別字,並且最好具有一定的意義,有意義的變數(shù)名可以提高程式的可讀性。比如,要定義一個表示學生數(shù)量的變數(shù),用student_num做變數(shù)名要比用k更合適。所有變數(shù)在使用之前必須被定義,格式如下:數(shù)據(jù)類型關(guān)鍵字變數(shù)名[=初始值];Java應用基礎52例://x為基本整型intx;//y為浮點數(shù)(單精確度),並且賦給初始值3.14floaty=3.14;//可以在一個語句中聲明多個同一類型的變數(shù)longarea,width,length;Java應用基礎532.4運算符與運算式對各種類型的數(shù)據(jù)進行加工的過程稱為運算,表示各種不同運算的符號稱為運算符,參與運算的數(shù)據(jù)稱為運算元。運算符的優(yōu)先順序與結(jié)合性如表所示。一個Java運算式是由運算元和運算符按一定的語法規(guī)則組成的符號序列。Java應用基礎54Java應用基礎552.4.1賦值運算符和賦值運算式1.賦值運算符Java中,“=”被稱為賦值運算符,它的作用是設置變數(shù)的值,即將一個數(shù)據(jù)賦給一個變數(shù),實際上是將特定的值寫到變數(shù)所對應的記憶體單元中。賦值運算符是雙目運算符,因為“=”兩邊都要有運算元。“=”左邊是待賦值的變數(shù),右邊是要賦的值。除了“=”基本賦值運算符外,另外還有幾個複合賦值運算符:+=、-=、*=、/=和%=;五個由位運算符和賦值運算符組成的複合賦值運算符:<<=、>>=、&=、|=、和^=。Java應用基礎562.賦值運算式我們可以用常量對變數(shù)賦值,也可以用變數(shù)對變數(shù)賦值,還可以用任何運算式對變數(shù)賦值。用賦值運算符連接起來的式子稱為賦值運算式。賦值運算式的值就是被賦值的變數(shù)的值。賦值運算式加上分號就構(gòu)成了賦值語句,是極為常用的Java語句。示例:參看例2.3Java應用基礎572.4.2算術(shù)運算符和算術(shù)運算式1.算術(shù)運算符Java提供的算術(shù)運算符包括:加(+)、減(-)、乘(*)、除(/)和取餘(%)。算術(shù)運算符是雙目運算符。利用算術(shù)運算符連接起來的式子稱為算術(shù)運算式。2.自增、自減運算符++、--Java中還另外提供了兩個用於算術(shù)運算的單目運算符:自增運算符++和自減運算符--。其功能是使變數(shù)的值增1或減1。使用這兩個運算符,可以讓程式更為簡化、更容易閱讀。++和--運算符有一個特點,就是它們既可以位於變數(shù)名的左邊(稱為前自增、前自減),又可以位於變數(shù)名的右邊(後自增、後自減),但結(jié)果卻是不一樣的。++和—運算有以下四種情況:Java應用基礎58(1)i++:使用i之後,i的值加1,即先取值,後自加。等價於i=i+1。(2)++i:先使i加1,然後再使用i,即先自加,後取值。等價於i=i+1。(3)i--:使用i之後,i的值減1,即先取值,後自減。等價於i=i-1。(4)--i:先使i減1,然後再使用i,即先自減,後取值。等價於i=i-1。注意:++和--運算符只能用於變數(shù),不能用於常量和運算式。因為++和--蘊含著賦值操作。++和--運算符經(jīng)常用於迴圈程式設計中。Java應用基礎592.4.3關(guān)係運算符和關(guān)係運算式1.關(guān)係運算符關(guān)係運算符又稱比較運算符,因為關(guān)係運算實際上是比較大小的運算。Java提供了6種關(guān)係運算符:>、>=、<、<=、==、!=。前4種優(yōu)先順序相同,且高於後面的兩種。2.關(guān)係運算式用關(guān)係運算符連接的式子稱為關(guān)係運算式。一般格式為:運算式1關(guān)係運算符運算式2關(guān)係運算式的值代表著某種關(guān)係的真假。比如,如果x的值是10,那麼,x>5的值是“真”,而x<1的值是“假”。Java應用基礎602.4.4邏輯運算符和邏輯運算式1.邏輯運算符Java提供了3種邏輯運算符,&&(與)、||(或)、!(非)。a&&b:只有a與b都為true,結(jié)果才為true,否則為false。a||b:只有a與b都為false,結(jié)果才為false,否則為true。!a:與a的值相反。2.邏輯運算式用邏輯運算符連接起來的式子稱為邏輯運算式,用於表示複雜的運算條件。Java應用基礎61有一點需要指出,在邏輯運算式求值的過程中,並不是所有的邏輯運算都被執(zhí)行,即在Java中要進行所謂的短路計算。例如:(1)在求解a&&b&&c的值時,只有a的值是真時,才會計算b的值;只有a和b均為真時,才會計算c的值。如果a為假,則不會繼續(xù)計算b和c的值,因為整個運算式的值已經(jīng)確定了。(2)在求解a||b||c的值時,只有a是假時,才會計算b的值;只有a和b均為假時,才會計算c的值。如果a是真,就不會計算b和c的值,因為整個運算式的值已經(jīng)確定了。Java編譯程序按照“短路”計算方式來生成目標代碼。Java應用基礎622.4.5條件運算符和條件運算式條件運算符是Java提供的唯一一個三目運算符。用條件運算符連接起來的式子稱為條件運算式。條件運算式的格式是:運算式1?運算式2:運算式3條件運算式的運算規(guī)則如下:如果運算式1的值為真,那麼整個條件運算式的值就是運算式2的值,否則整個條件運算式的值是運算式3的值。例:

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

語句(組);}其執(zhí)行過程是:首先計算布爾運算式的值,若為真true,則執(zhí)行塊內(nèi)語句,否則,if語句終止執(zhí)行,即不執(zhí)行塊內(nèi)語句而執(zhí)行if語句後面的其他語句,如圖2.2(a)所示。示例:參看例2.5Java應用基礎70(2)if-else語句if(布爾運算式){

語句(組)A;}else{

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

switch語句的一般形式如下:switch(運算式){case常量運算式1:

語句組1;break;case常量運算式2:

語句組2;break;

…case常量運算式n:

語句組n;break;default: 語句組n+1;

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

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

1.系統(tǒng)定義的類,即Java類庫?;悾核蠮AVA的類都派生自ObjectJava的類可組織在包(package)中Java提供的標準類庫分佈在一系列的包中,如java.lang,java.awt,等,jdk1.1後加入javax.swing等2.用戶自己定義的類。編程的過程就是繼承基類或標準類而創(chuàng)建、定義特殊子類的過程類和對象893.2.1類的定義Java中類包括成員變數(shù)和成員方法兩部分。類的成員變數(shù)可以是基本數(shù)據(jù)類型的數(shù)據(jù)或數(shù)組,也可以是一個類的實例;類的方法用於處理該類的數(shù)據(jù)。

1.類的定義格式:[類的修飾字]class類名稱[extends

父類名稱][implements

介面名稱列表]{變數(shù)定義及初始化;方法定義及方法體;}類體類和對象90類的修飾字:

[public|default(可缺省,非公開類)][abstract|final]public:允許其他類(沒有限制)訪問本類,一個原始檔案僅可以有一個public類,且與檔同名。default(缺?。嚎杀划斍鞍械钠渌愒L問;如果定義時沒有public,則所有的類都是friendly;abstract:沒有實例的抽象概念類final:不能再被擴展,不包含子類的類;易於安全性的實現(xiàn),或用於創(chuàng)建固定功能的類每個類都擁有自己的名字空間,即指類及其方法和變數(shù)可以在一定的範圍內(nèi)知道彼此的存在,可以使用。父類繼承聲明:extends

父類名(見繼承)實現(xiàn)介面(interface):implements

介面名關(guān)於類定義的說明類和對象91例:定義圓類//Circle.javapublicclassCircle{privatedoubleradius=1;//圓的半徑

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

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

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

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

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

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

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

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

circleOne,circleTwo;類和對象992.建立對象使用new運算符和類的構(gòu)造方法為聲明的對象分配記憶體空間,如果類中沒有構(gòu)造方法,系統(tǒng)會調(diào)用默認的無參構(gòu)造方法。格式:對象名=new構(gòu)造方法(形參列表);

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

this.day=day;}}

類和對象1043.5包包(package)是Java提供的檔(即公共類)的組織方式。一個包對應一個檔夾,一個包中可以包括許多類檔。包中還可以再有子包,稱為包等級。包的作用有四個:(1)定位類:具有相似功能的類可以放置在同一個包中,這樣可以很容易地查找定位類。(2)避免命名衝突:在開發(fā)由其他程式員共用的可複用類時,會發(fā)生命名衝突,可以把類放在不同包中,通過包名引用類可以避免命名衝突。(3)可以方便地分發(fā)軟體。(4)控制類之間的訪問(參見第4章訪問控制)。注意:包是一個類名空間,同一個包中的類和介面(參見第4章)不能重名,不同包中的類可以重名。類和對象1053.5.1創(chuàng)建包包的創(chuàng)建就是將根源程式檔中的介面和類納入指定的包。一般情況下,Java根源程式由四部分組成:(1)一個包(package)定義語句(可選項)。其作用是將本源檔中的介面和類納入指定包。原始檔案中若有包說明語句,必須是第一個語句;(2)若干個(import)語句(可選項)。其作用是引入本源檔中所需要使用的包;(3)一個public的類聲明。在一個原始檔案中只能有一個public類;(4)若干個屬於本包的類聲明(可選)。包的定義語句格式:package

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

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

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

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

同一個類中同一個包中不同包中的子類不同包中的非子類

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

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

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

溫馨提示

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

評論

0/150

提交評論