![Java程序設(shè)計(jì)教程與實(shí)驗(yàn)課件_第1頁](http://file4.renrendoc.com/view/2ce237e4ec66f425405e75fff4b71dba/2ce237e4ec66f425405e75fff4b71dba1.gif)
![Java程序設(shè)計(jì)教程與實(shí)驗(yàn)課件_第2頁](http://file4.renrendoc.com/view/2ce237e4ec66f425405e75fff4b71dba/2ce237e4ec66f425405e75fff4b71dba2.gif)
![Java程序設(shè)計(jì)教程與實(shí)驗(yàn)課件_第3頁](http://file4.renrendoc.com/view/2ce237e4ec66f425405e75fff4b71dba/2ce237e4ec66f425405e75fff4b71dba3.gif)
![Java程序設(shè)計(jì)教程與實(shí)驗(yàn)課件_第4頁](http://file4.renrendoc.com/view/2ce237e4ec66f425405e75fff4b71dba/2ce237e4ec66f425405e75fff4b71dba4.gif)
![Java程序設(shè)計(jì)教程與實(shí)驗(yàn)課件_第5頁](http://file4.renrendoc.com/view/2ce237e4ec66f425405e75fff4b71dba/2ce237e4ec66f425405e75fff4b71dba5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第1章Java概述Java概述21.1.1Java的誕生前身:OAK(JamesGosling1990)Java大事記90年,Sun公司開始Green工程93年,WWW席卷全球94年,開始定位于Internet95.1,Java命名Hotjava,第一個(gè)支持Java的瀏覽器
Netscape2.0Java概述31.1.2Java的發(fā)展發(fā)展:面向網(wǎng)絡(luò)應(yīng)用,類庫不斷豐富,性能不斷提高,應(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)址(查詢新動(dò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分為三個(gè)版本J2EE(企業(yè)級版本)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語言一個(gè)平臺(tái)(JVM和JavaAPI)Java概述71.2.2Java的特點(diǎn)Java=“C++”–“復(fù)雜性和奇異性”+“安全性和可移植性”Java概述8Java的特點(diǎn)面向?qū)ο笸耆陬?、對象:OOA,OOD,OOP以類的形式組織代碼,數(shù)據(jù)類型封裝、繼承、多態(tài)Java概述9Java的特點(diǎn)簡單:Java最初是為家用電器進(jìn)行集成控制而設(shè)計(jì)的一種語言,因此它必須簡單明了。其簡單性主要體現(xiàn)在三個(gè)方面。C++like摒棄了C++中容易引發(fā)程序錯(cuò)誤的一些特性,如指針、結(jié)構(gòu)、枚舉等,并能進(jìn)行自動(dòng)內(nèi)存管理。提供了豐富的類庫Java概述10Java的特點(diǎn)分布式健壯性(魯棒性)檢查數(shù)據(jù)類型的匹配,數(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)無關(guān)可移植語言規(guī)范避免了與具體實(shí)現(xiàn)有關(guān)的描述多線程:支持多任務(wù)高效:JIT(Just-In-Time)及時(shí)編譯器動(dòng)態(tài):可動(dòng)態(tài)增加和修改類庫內(nèi)容Java概述121.3Java與C/C++的區(qū)別1.全局變量2.條件轉(zhuǎn)移指令3.指針4.內(nèi)存管理5.?dāng)?shù)據(jù)類型的一致性6.類型轉(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)類和接口的庫,這些庫稱為包(package)Java概述15JavaAPI和JavaVM將程序與硬件分離從而實(shí)現(xiàn)跨平臺(tái)功能JavaJava概述16Java虛擬機(jī)Java虛擬機(jī)(JVM)Java處理器“芯片”,一般由軟件實(shí)現(xiàn)Java虛擬機(jī)類裝入器字節(jié)碼驗(yàn)證器解釋器字節(jié)碼執(zhí)行Java概述17問:JVM是不是跨平臺(tái)的?不是,不同的平臺(tái)分別設(shè)計(jì)不同的JVM。Java字節(jié)碼沒有保存特定平臺(tái)的信息。Java概述18Java的工作方式文件類型.java Java源文件.class 二進(jìn)制字節(jié)碼文件運(yùn)行機(jī)制對于大多數(shù)語言,要運(yùn)行程序,要么編譯程序要么解釋程序;而Java語言的程序則既要被編譯又要被解釋。Java概述19Java的工作方式
編譯程序?qū)ava源程序翻譯為字節(jié)碼(bytecode)程序;解釋程序Java虛擬機(jī)分析并運(yùn)行字節(jié)碼程序。一次編寫,處處運(yùn)行Writeonce,runanywhere!Java概述20用Java源程序先被編譯、后被解釋Java概述211.4.2Java的運(yùn)行系統(tǒng)Java的運(yùn)行系統(tǒng)是各平臺(tái)廠商對JVM的具體實(shí)現(xiàn)。對于Java中的兩類程序:JavaApplication(Java應(yīng)用程序)和JavaApplet(Java小應(yīng)用程序),存在兩種不同類型的運(yùn)行系統(tǒng);對于JavaApplication,運(yùn)行系統(tǒng)是Java解釋器;而對于JavaApplet,運(yùn)行系統(tǒng)是指Java兼容的Web瀏覽器,該瀏覽器中包含了支持Applet運(yùn)行的環(huán)境。Java概述221.5.1JAVA開發(fā)工具JDK系列(Sun)命令行JavaWorkShop(Sun)
SymanteeCAFéJCreatorJBuilder(Borland)VisualJ++(MicroSoft)JavaStudio(Sun)VisualAgeforJava(IBM)OPTIONALJava概述231.5.2JDK下載與安裝 為了鼓勵(lì)使用Java語言開發(fā)軟件,SunMicrosystems公司提供了免費(fèi)的軟件開發(fā)工具包(SDK),其中包括編譯器、虛擬機(jī)、調(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目錄:一些實(shí)例程序\lib目錄:Java開發(fā)類庫\jre目錄:Java運(yùn)行環(huán)境,包括Java虛擬機(jī)、運(yùn)行類庫等…Java概述26JDK實(shí)用程序javacJava編譯器,將Java源程序編譯成字節(jié)碼javaJava解釋器,直接從類文件執(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簡單的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)單行注釋:從"http://"開始到本行結(jié)束的內(nèi)容都是注釋。(2)多行注釋:在"/*"和"*/"之間的所有內(nèi)容都是注釋。(3)文檔注釋:在注釋方面java提供了一種C/C++所不具有的文檔注釋方式。在“/**”和“*/”之間的文本,將自動(dòng)包含在用javadoc命令生成的HTML格式的文檔中。javadoc是JDK中API文檔生成器。該工具解析一組Java源文件中的聲明與文檔注釋,生成一組HTML頁面描述這些源程序中定義的類、內(nèi)部類、接口、構(gòu)造方法、方法、屬性等。JDK的API文檔就是用javadoc工具生成的。2.Java語言區(qū)分大小寫,包括文件名。Java概述313.關(guān)鍵字class用來聲明一個(gè)類,關(guān)鍵字public表示它是一個(gè)公共類,一個(gè)Java源程序最多只能有一個(gè)公共類。類定義體由一對{}括起來。4.Java語言語句均以半角的分號;結(jié)尾。5.類體內(nèi)包含變量和函數(shù)的定義,變量稱為類的“成員變量”,函數(shù)在Java語言中稱為“方法”。6.在該類中定義了一個(gè)main()方法,其中public表示訪問權(quán)限,指明所有的類都可以使用這一方法。static指明該方法是一個(gè)類方法(又稱為靜態(tài)方法),它可以通過類名直接調(diào)用;void則指明main()方法不返回任何值。對于一個(gè)應(yīng)用程序來說,main()方法是必需的,而且必須按照上述格式來定義。Java解釋器在沒有生成任何實(shí)例的情況下,以main()方法作為入口來執(zhí)行程序。Java概述327.Java程序中可以定義多個(gè)類,每個(gè)類中可以定義多個(gè)方法,但是最多只能有一個(gè)公共類,main()方法也只能有一個(gè)。main()方法定義中,String[]args是傳遞給main()方法的參數(shù),參數(shù)名為args,它是String類的一個(gè)實(shí)例,參數(shù)可以為一個(gè)或多個(gè),多個(gè)參數(shù)間用逗號分隔。8.語句System.out.println(“WelcometoJava”);的作用是調(diào)用系統(tǒng)類庫中的System類的成員out的println()方法實(shí)現(xiàn)字符串的輸出。與println()不同的是:print()方法在當(dāng)前行輸出,而println()方法在新的一行輸出。Java概述339.java源程序結(jié)構(gòu)10.源文件的命名規(guī)則:如果在源程序中包含有公共類的定義,則該源文件名必須與該公共類的名字完全一致,字母的大小寫都必須一樣。這是java語言的一個(gè)嚴(yán)格的規(guī)定,如果不遵守,在編譯時(shí)就會(huì)出錯(cuò)。因此,在一個(gè)java源程序中至多只能有一個(gè)公共類的定義。如果源程序中不包含公共類的定義,則該文件名可以任意取名。如果在一個(gè)源程序中有多個(gè)類定義和接口定義,則在編譯時(shí)將為每個(gè)類生成一個(gè).class文件。(每個(gè)接口編譯后也生成.class文件)Java概述34附:使用對話框輸出信息也可使用JOptionPane的靜態(tài)方法進(jìn)行人機(jī)交互。如showMessageDialog
方法輸出信息。Java概述35源程序importjavax.swing.JOptionPane;public
classWelcomeInMessageDialogBox{ public
static
voidmain(String[]args){ //使用對話框輸出信息JOptionPane.showMessageDialog(null,"WelcometoJava!","DisplayMessage",JOptionPane.INFORMATION_MESSAGE);}}Java應(yīng)用基礎(chǔ)362.1標(biāo)識(shí)符、關(guān)鍵字Java語言使用國際字符集(Unicode)。Unicode字符集定義了一套國際標(biāo)準(zhǔn)字符集。通常的ASCII碼是8位的,而Unicode字符集中的每個(gè)字符占16位,即2個(gè)字節(jié),整個(gè)字符集共包括65336個(gè)字符,兼容ASCII,排在Unicode字符集最前面的256個(gè)字符就是ASCII碼。Unicode除了可以表示256個(gè)ASCII碼外,還可以表示漢字、拉丁語、希臘字母、朝鮮語等。Java應(yīng)用基礎(chǔ)372.1.1標(biāo)識(shí)符標(biāo)識(shí)符是賦予變量、類、方法、數(shù)組、文件等的名稱。Java語言規(guī)定標(biāo)識(shí)符是以字母、下劃線“_”或美元符號“$”開始,隨后可跟數(shù)字、字母、下劃線或美元符號的字符序列。Java標(biāo)識(shí)符大小寫敏感,沒有長度限制,可以為標(biāo)識(shí)符取任意長度的名字,但關(guān)鍵字不能作為標(biāo)識(shí)符。Java應(yīng)用基礎(chǔ)38關(guān)于標(biāo)識(shí)符為增強(qiáng)程序可讀性,Java作如下的約定:類、接口:通常使用名詞,且每個(gè)單詞的首字母要大寫方法:通常使用動(dòng)詞,首字母小寫,其后用大寫字母分隔每個(gè)單詞常量:全部大寫,單詞之間用下劃線分隔變量:通常使用名詞,首字母小寫,其后大寫字母分隔每個(gè)單詞,避免使用$符號。例:下面是合法的標(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)鍵字是指對編譯器有特殊意義,在程序中不能用作其它目的的字符序列,關(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應(yīng)用基礎(chǔ)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應(yīng)用基礎(chǔ)412.2基本數(shù)據(jù)類型數(shù)據(jù)類型規(guī)定一類數(shù)據(jù)的數(shù)據(jù)位長度,取值范圍,以及對該類數(shù)據(jù)所能進(jìn)行的操作。Java數(shù)據(jù)類型分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型(引用類型又稱為組合類型)。Java語言定義了8種基本數(shù)據(jù)類型,其分類及關(guān)鍵字如下:整型:byte、short、int、long浮點(diǎn)型:float、double字符型:char布爾型:booleanJava應(yīng)用基礎(chǔ)42表2.1Java中的基本數(shù)據(jù)類型Java應(yīng)用基礎(chǔ)432.3常量、變量Java語言中存在著兩種表征數(shù)據(jù)的形式:常量與變量。常量:程序運(yùn)行過程中保持不變,并且不可進(jìn)行修改的量。變量:用來存放數(shù)據(jù)且其值可以改變的量稱為變量。Java應(yīng)用基礎(chǔ)442.3.1常量Java語言中常量有兩種類型:一種稱為直接常量也稱為值常量,如12、-33、15.6;有多種類型:1、2、3、4、5另一種稱為符號常量,符號常量需要明確定義。Java語言中使用關(guān)鍵字final來定義符號常量,如下所示:finaldoublePI=3.1415926;其中PI即符號常量。double是該符號常量的類型。注意:符號常量實(shí)質(zhì)上是一種特殊的變量,也是占用內(nèi)存空間的,不同于C語言編譯預(yù)處理定義的宏。Java應(yīng)用基礎(chǔ)451.整型常量(byte、short、int、long)整型常量可以用來給整型變量賦值,可以用十進(jìn)制、八進(jìn)制和十六進(jìn)制來表示。(1)十進(jìn)制整型常量由0至9的數(shù)字組成,沒有前綴,不能以0開始,沒有小數(shù)部分。例如:124,-36等。(2)八進(jìn)制整型常量,以0為前綴,其后由0到7的數(shù)字組成,沒有小數(shù)部分。例如:0332,-0122等。(3)十六進(jìn)制整型常量,以0x或0X為前綴,其后由0到9的數(shù)字和A到F(大小寫均可)字母組成,沒有小數(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ù)法表示,它常用來表示很大或很小的數(shù),如1.2×1026在Java中表示為1.2E26。表示方法是在小數(shù)表示法后加e(或E)及指數(shù)部分。但要注意,e(或E)前面必須有數(shù)字,指數(shù)部分可正可負(fù),但都是整數(shù)(正號可省略)。例如,4.2E-5,3e6等。Java應(yīng)用基礎(chǔ)473.布爾型常量boolean布爾型常量值只有true和false,true和false必須要小寫。true表示“邏輯真”,false表示“邏輯假”。注意,和C/C++語言不同,在Java語言中不能認(rèn)為“非0值或1”是true,“0值”是false。Java應(yīng)用基礎(chǔ)484.字符型常量Java中的字符采用Unicode字符集的編碼方案,是16位的無符號整數(shù),占2個(gè)字節(jié),表示的字符從0~65535。Unicode字符集可以支持各類文字的字符。字符型常量分為一般字符常量和轉(zhuǎn)義字符常量。對于可輸入字符,用單引號將字符括起來,如‘a(chǎn)’,‘A’,‘我’等。對于不可輸入字符,采用轉(zhuǎn)義字符表示。Java應(yīng)用基礎(chǔ)49表2.2轉(zhuǎn)義字符Java應(yīng)用基礎(chǔ)505.字符串常量字符串并不是Java的基本數(shù)據(jù)類型,它是Java提供的位于java.lang包中的String類,字符串常量就是字符串類java.lang.String類的一個(gè)對象,故它可以使用類String中的方法,所有字符串常量值都用雙引號括起來。需要注意的是null可以簡單視為一個(gè)引用類型的常量值,表示不引用任何對象。在Java編碼規(guī)范中,規(guī)定null是所謂null類型的唯一值,且規(guī)定null可轉(zhuǎn)換到任何引用類型。Java應(yīng)用基礎(chǔ)512.3.2變量每個(gè)變量都要有個(gè)名字,變量名必須是合法的標(biāo)識(shí)符,并且最好具有一定的意義,有意義的變量名可以提高程序的可讀性。比如,要定義一個(gè)表示學(xué)生數(shù)量的變量,用student_num做變量名要比用k更合適。所有變量在使用之前必須被定義,格式如下:數(shù)據(jù)類型關(guān)鍵字變量名[=初始值];Java應(yīng)用基礎(chǔ)52例://x為基本整型intx;//y為浮點(diǎn)數(shù)(單精度),并且賦給初始值3.14floaty=3.14;//可以在一個(gè)語句中聲明多個(gè)同一類型的變量longarea,width,length;Java應(yīng)用基礎(chǔ)532.4運(yùn)算符與表達(dá)式對各種類型的數(shù)據(jù)進(jìn)行加工的過程稱為運(yùn)算,表示各種不同運(yùn)算的符號稱為運(yùn)算符,參與運(yùn)算的數(shù)據(jù)稱為操作數(shù)。運(yùn)算符的優(yōu)先級與結(jié)合性如表所示。一個(gè)Java表達(dá)式是由操作數(shù)和運(yùn)算符按一定的語法規(guī)則組成的符號序列。Java應(yīng)用基礎(chǔ)54Java應(yīng)用基礎(chǔ)552.4.1賦值運(yùn)算符和賦值表達(dá)式1.賦值運(yùn)算符Java中,“=”被稱為賦值運(yùn)算符,它的作用是設(shè)置變量的值,即將一個(gè)數(shù)據(jù)賦給一個(gè)變量,實(shí)際上是將特定的值寫到變量所對應(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á)式我們可以用常量對變量賦值,也可以用變量對變量賦值,還可以用任何表達(dá)式對變量賦值。用賦值運(yùn)算符連接起來的式子稱為賦值表達(dá)式。賦值表達(dá)式的值就是被賦值的變量的值。賦值表達(dá)式加上分號就構(gòu)成了賦值語句,是極為常用的Java語句。示例:參看例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)算符連接起來的式子稱為算術(shù)表達(dá)式。2.自增、自減運(yùn)算符++、--Java中還另外提供了兩個(gè)用于算術(shù)運(yùn)算的單目運(yùn)算符:自增運(yùn)算符++和自減運(yùn)算符--。其功能是使變量的值增1或減1。使用這兩個(gè)運(yùn)算符,可以讓程序更為簡化、更容易閱讀。++和--運(yùn)算符有一個(gè)特點(diǎn),就是它們既可以位于變量名的左邊(稱為前自增、前自減),又可以位于變量名的右邊(后自增、后自減),但結(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)算符又稱比較運(yùn)算符,因?yàn)殛P(guān)系運(yùn)算實(shí)際上是比較大小的運(yùn)算。Java提供了6種關(guān)系運(yùn)算符:>、>=、<、<=、==、!=。前4種優(yōu)先級相同,且高于后面的兩種。2.關(guān)系表達(dá)式用關(guān)系運(yùn)算符連接的式子稱為關(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)算符連接起來的式子稱為邏輯表達(dá)式,用于表示復(fù)雜的運(yùn)算條件。Java應(yīng)用基礎(chǔ)61有一點(diǎn)需要指出,在邏輯表達(dá)式求值的過程中,并不是所有的邏輯運(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ì)算方式來生成目標(biāo)代碼。Java應(yīng)用基礎(chǔ)622.4.5條件運(yùn)算符和條件表達(dá)式條件運(yùn)算符是Java提供的唯一一個(gè)三目運(yùn)算符。用條件運(yùn)算符連接起來的式子稱為條件表達(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)算符的作用在于對整數(shù)數(shù)值的二進(jìn)制表示進(jìn)行運(yùn)算,像二進(jìn)制的AND與OR等運(yùn)算。(1)按位求反運(yùn)算符~對操作數(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)保留符號位的右移運(yùn)算符>>將一個(gè)操作數(shù)的各個(gè)二進(jìn)制位全部向右移若干位,這個(gè)位數(shù)由右操作數(shù)來決定,移到右端的低位被舍棄,左邊空出的位全部用最高位的符號位來填充。如5>>1結(jié)果為2。-9>>1,結(jié)果為-5。(6)不保留符號位的右移運(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流程控制語句程序控制可以定義為對程序語句的執(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)語句:分支控制語句包括:if-else、switch-case。循環(huán)控制語句包括:while、do-while和for。跳轉(zhuǎn)語句:break、return和continue。Java應(yīng)用基礎(chǔ)66除了上面的流程控制語句,還有兩類特殊的語句:(1)異常處理語句:如try-catch-finally、throw等。參見第6章。(2)注釋語句。Java與C/C++之間的差別很細(xì)微,可歸納為兩點(diǎn):(1)在C語言中,條件表達(dá)式可以是數(shù)值型,而在Java條件語句中,條件表達(dá)式必須是布爾型,不能是數(shù)值。(2)Java取消了對goto語句的支持。goto語句的使用一直是程序設(shè)計(jì)者爭論的話題,這是因?yàn)間oto語句的使用不僅降低了程序的可讀性,而且往往會(huì)帶來一些不可預(yù)測的錯(cuò)誤。Java應(yīng)用基礎(chǔ)672.5.1順序結(jié)構(gòu)順序結(jié)構(gòu)是最簡單、最基本的結(jié)構(gòu),在順序結(jié)構(gòu)內(nèi),順序執(zhí)行各個(gè)語句。圖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空語句、表達(dá)式語句、復(fù)合語句是Java程序依次順序執(zhí)行的語句,故又稱為順序結(jié)構(gòu)??照Z句是僅由分號構(gòu)成的語句,表示什么動(dòng)作都不做。一個(gè)表達(dá)式加上一個(gè)分號就是一個(gè)表達(dá)式語句,只有少量的幾種表達(dá)式才能構(gòu)成表達(dá)式語句。它們是:由賦值運(yùn)算符構(gòu)成的表達(dá)式、由++或--構(gòu)成的表達(dá)式、方法調(diào)用、new表達(dá)式。標(biāo)號語句的格式為:標(biāo)識(shí)符:<語句>其中:<語句>可為任何合法的Java語句。復(fù)合語句是指由一對花括號{}括起來的任意數(shù)量的語句,有時(shí)又稱為塊語句或組語句。示例:參看例2.4Java應(yīng)用基礎(chǔ)692.5.2選擇結(jié)構(gòu)1.if語句(1)簡單if語句if(布爾表達(dá)式){
語句(組);}其執(zhí)行過程是:首先計(jì)算布爾表達(dá)式的值,若為真true,則執(zhí)行塊內(nèi)語句,否則,if語句終止執(zhí)行,即不執(zhí)行塊內(nèi)語句而執(zhí)行if語句后面的其它語句,如圖2.2(a)所示。示例:參看例2.5Java應(yīng)用基礎(chǔ)70(2)if-else語句if(布爾表達(dá)式){
語句(組)A;}else{
語句(組)B;}其執(zhí)行過程是:首先計(jì)算布爾表達(dá)式的值,若為真,則執(zhí)行語句(組)A,否則執(zhí)行語句(組)B,如圖2.2(b)所示。示例:參看例2.6Java應(yīng)用基礎(chǔ)71(3)if語句的嵌套if語句中的任何一個(gè)子句可以是任意可執(zhí)行語句,當(dāng)然也可以是一條if語句,這種情況稱為if語句的嵌套。當(dāng)出現(xiàn)if語句嵌套時(shí),不管書寫格式如何,else都將與它前面最靠近的未曾配對的if語句相配對,構(gòu)成一條完整的if語句。嵌套的深度沒有限制,if語句的嵌套可以實(shí)現(xiàn)多重選擇。示例:參看例2.7Java應(yīng)用基礎(chǔ)722.switch語句switch語句是多分支選擇語句,又稱開關(guān)語句。
switch語句的一般形式如下:switch(表達(dá)式){case常量表達(dá)式1:
語句組1;break;case常量表達(dá)式2:
語句組2;break;
…case常量表達(dá)式n:
語句組n;break;default: 語句組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操作;然后再對p進(jìn)行判斷,如此反復(fù),直到給定的p條件不成立為止。此時(shí)不再執(zhí)行A框,從出口b跳出循環(huán)。Java應(yīng)用基礎(chǔ)76Java語言中,實(shí)現(xiàn)循環(huán)結(jié)構(gòu)的控制語句有while、do~while、for語句。1.while循環(huán)while語句用來實(shí)現(xiàn)“當(dāng)型”循環(huán)結(jié)構(gòu),即先判斷表達(dá)式,后執(zhí)行語句。其一般形式如下:while(循環(huán)條件){語句;//循環(huán)體}示例:參看例2.10Java應(yīng)用基礎(chǔ)772.do-while循環(huán)do-while語句用來實(shí)現(xiàn)“直到型”循環(huán)結(jié)構(gòu),即先執(zhí)行循環(huán)體,然后判斷循環(huán)條件是否成立。其一般形式如下:do{
語句;//循環(huán)體}while(循環(huán)條件);示例:參看例2.11Java應(yīng)用基礎(chǔ)783.for循環(huán)for語句是java語言中使用靈活方便的一種循環(huán)語句,它不僅用于循環(huán)次數(shù)已知的情況,還能用于循環(huán)次數(shù)預(yù)先不能確定只給出循環(huán)結(jié)束條件的情況。for語句的一般形式為:for(表達(dá)式1;表達(dá)式2;表達(dá)式3){語句;//循環(huán)體}示例:參看例2.12Java應(yīng)用基礎(chǔ)794.break、continue、標(biāo)號、return語句、System.exit()方法Java中可以用break和continue兩個(gè)循環(huán)跳轉(zhuǎn)語句進(jìn)一步控制循環(huán)。這兩個(gè)語句的一般格式如下:break[label];//從所在的switch語句、循環(huán)語句中跳出。continue[label];//跳過循環(huán)體的剩余語句,開始執(zhí)行下一次循環(huán)。break和continue可以用在三種循環(huán)語句中的任意一種。這兩個(gè)語句都可以帶標(biāo)號使用,也可以不帶標(biāo)號使用。標(biāo)號是出現(xiàn)在一個(gè)語句之前的標(biāo)識(shí)符,標(biāo)號后面要加一個(gè)冒號,定義如下:label:statement;示例:參看例2.13與2.14Java應(yīng)用基礎(chǔ)80return語句和System.exit()方法return語句用來從當(dāng)前方法中退出,返回到調(diào)用該方法的語句處,并從緊跟該語句的下一條語句繼續(xù)執(zhí)行。如果在main()方法中執(zhí)行return語句,則使程序執(zhí)行返回到Java運(yùn)行系統(tǒng),因?yàn)镴ava運(yùn)行系統(tǒng)調(diào)用了main()方法。要想從程序的任意地方直接一步到位地退出程序,而不是返回到調(diào)用該方法的語句處,可以使用System.exit()方法。Java應(yīng)用基礎(chǔ)815.循環(huán)的嵌套一個(gè)循環(huán)體內(nèi)包含另一個(gè)完整的循環(huán)結(jié)構(gòu)稱為循環(huán)的嵌套,內(nèi)嵌的循環(huán)中還可以嵌套循環(huán),這就是多重循環(huán)。示例:參看例2.15與2.16(a)(b)(c)Java應(yīng)用基礎(chǔ)822.6Java開發(fā)類庫組成Java提供了豐富的標(biāo)準(zhǔn)類來幫助程序設(shè)計(jì)者更方便快捷地編寫程序,這些標(biāo)準(zhǔn)類組成了類包,主要有:java.langjava.awtjava.appletjava.awt.imagejava.awt.peerjava.iojava.util除了java.lang之外,其余類包都不是java語言所必須的。Java應(yīng)用基礎(chǔ)831.java.lang本類包中包含了各種定義Java語言時(shí)必須的類,這些類能夠以其它類不能使用的方式訪問java的內(nèi)部。任何java程序都將自動(dòng)引入這個(gè)包。其中的類包括:Object類:java中最原始、最重要的類,每個(gè)java類都是它的子類,它實(shí)現(xiàn)了每個(gè)類都必須具有的基本方法?;绢愋桶b器:Boolean,Character,Number,Double,Float,Integer,Long。String類:字符串類。Math類:數(shù)學(xué)函數(shù)的集合。執(zhí)行線程:類Thread,ThreadGroup,接口Runable。System類和Runtime類:可以通過類Runtime和System訪問外部系統(tǒng)環(huán)境。System類的兩個(gè)常用功能就是訪問標(biāo)準(zhǔn)輸入/輸出流和錯(cuò)誤流、退出程序。異常和錯(cuò)誤:類Exception,Error,接口Throwable。其它類:接口Cloneable、運(yùn)行時(shí)的類等。Java應(yīng)用基礎(chǔ)842.java.appletJavaApplet是Java編程的一個(gè)主要魅力,java.applet類包提供了Applet的運(yùn)行機(jī)制以及一些編寫Applet非常有用的方法。3.java.awt本類包是各種窗口環(huán)境的統(tǒng)一界面(AWT代表AbstractWindowsToolkit,即抽象窗口工具包),其中的類使得創(chuàng)建諸如窗口、菜單、滾動(dòng)條、文本區(qū)、按鈕以及復(fù)選框等圖形用戶界面(GUI)的元素變得非常容易。4.java.awt.image本類包能夠以獨(dú)立于設(shè)備的方式加載并過濾位圖圖像。5.java.awt.peerjava.awt.peer是全部awt組件的對等對象接口的集合,每個(gè)接口都提供了機(jī)器相關(guān)的基本方法,awt使用這些方法來實(shí)現(xiàn)GUI,而不必關(guān)心是何種機(jī)器或操作系統(tǒng)。Java應(yīng)用基礎(chǔ)856.java.ioJava的輸入/輸出模式是完全建立在流的基礎(chǔ)之上的。流是一種字節(jié)從一個(gè)地方到另一個(gè)地方的單向流動(dòng),可以把流附加于文件、管道和通信鏈路等。java.io類包中定義的許多種流類通過繼承的方式進(jìn)行組織,其中也包括一些用來訪問本地文件系統(tǒng)上的文件流類。7.類包用來完成與網(wǎng)絡(luò)相關(guān)的功能:URL、WWW連接以及更為通用的Socket網(wǎng)絡(luò)通信。8.java.utiljava.util類包包含了一些實(shí)用類和有用的數(shù)據(jù)結(jié)構(gòu),如字典(Dictionary)、散列表(Hashtable)、堆棧(Stack)、向量(Vector)以及枚舉類(Enumeration)等,使用它們開發(fā)者可以更方便快捷地編程。Java應(yīng)用基礎(chǔ)869.java.rmi包、java.rmi.registry包和java.rmi.server包這三個(gè)包用來實(shí)現(xiàn)RMl(remotemethodinvocation,遠(yuǎn)程方法調(diào)用)功能。利用RMI功能,用戶程序可以在遠(yuǎn)程計(jì)算機(jī)(服務(wù)器)上創(chuàng)建對象,并在本地計(jì)算機(jī)(客戶機(jī))上使用這個(gè)對象。10.java.sql包java.sql包是實(shí)現(xiàn)JDBC(Javadatabaseconnection)的類庫。利用這個(gè)包可以使Java程序具有訪問不同種類的數(shù)據(jù)庫(如Oracle,Sybase,DB2,SQLServer等)的功能,只要安裝了合適的驅(qū)動(dòng)程序,同一個(gè)Java程序不需修改就可以存取、修改這些不同的數(shù)據(jù)庫中的數(shù)據(jù)。JDBC的這種功能,再加上Java程序本身具有的平臺(tái)無關(guān)性,大大拓寬了Java程序的應(yīng)用范圍,尤其是商業(yè)應(yīng)用的適用領(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類和對象的定義及使用進(jìn)行Java程序設(shè)計(jì),實(shí)際上就是定義類的過程。一個(gè)Java源程序文件往往是由許多個(gè)類組成的。從用戶的角度看,Java源程序中的類分為兩種:
1.系統(tǒng)定義的類,即Java類庫。基類:所有JAVA的類都派生自O(shè)bjectJava的類可組織在包(package)中Java提供的標(biāo)準(zhǔn)類庫分布在一系列的包中,如java.lang,java.awt,等,jdk1.1后加入javax.swing等2.用戶自己定義的類。編程的過程就是繼承基類或標(biāo)準(zhǔn)類而創(chuàng)建、定義特殊子類的過程類和對象893.2.1類的定義Java中類包括成員變量和成員方法兩部分。類的成員變量可以是基本數(shù)據(jù)類型的數(shù)據(jù)或數(shù)組,也可以是一個(gè)類的實(shí)例;類的方法用于處理該類的數(shù)據(jù)。
1.類的定義格式:[類的修飾字]class類名稱[extends
父類名稱][implements
接口名稱列表]{變量定義及初始化;方法定義及方法體;}類體類和對象90類的修飾字:
[public|default(可缺省,非公開類)][abstract|final]public:允許其他類(沒有限制)訪問本類,一個(gè)源文件僅可以有一個(gè)public類,且與文件同名。default(缺?。嚎杀划?dāng)前包中的其他類訪問;如果定義時(shí)沒有public,則所有的類都是friendly;abstract:沒有實(shí)例的抽象概念類final:不能再被擴(kuò)展,不包含子類的類;易于安全性的實(shí)現(xiàn),或用于創(chuàng)建固定功能的類每個(gè)類都擁有自己的名字空間,即指類及其方法和變量可以在一定的范圍內(nèi)知道彼此的存在,可以使用。父類繼承聲明:extends
父類名(見繼承)實(shí)現(xiàn)接口(interface):implements
接口名關(guān)于類定義的說明類和對象91例:定義圓類//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++;}類和對象92//獲取圓的半徑
publicdoublegetRadius(){returnradius;}//設(shè)置圓的半徑
publicvoidsetRadius(doublenewRadius){radius=(newRadius>=0)?newRadius:0;}//獲取圓的個(gè)數(shù)
publicstaticintgetNumberOfObjects(){returnnumberOfObjects;}//返回圓的面積
publicdoublefindArea(){returnradius*radius*3.14159;}}類和對象932.類定義中成員變量的聲明修飾符訪問控制符(訪問權(quán)限)public:可被所有其他類引用protected:該類自身、子類、同一包中的其他類private:僅可被該類自身引用和修改,不能被其他任何類(包括子類)引用default(缺省):本包中的類[變量修飾字]變量數(shù)據(jù)類型變量名1,變量名2[=變量初值]…;[public|protected|private][static][final][transient][volatile]類和對象94static:類變量或類字段,對所有的實(shí)例一致,引用時(shí)前綴可使用類名或?qū)ο竺?,屬于類。final:數(shù)值不變常量,定義同時(shí)應(yīng)對其進(jìn)行初始化volatile:異步控制修飾符,表示多個(gè)并發(fā)線程共享的變量,這使得各線程對該變量的訪問保持一致。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ū)ο竺鳛榍熬Y,建議使用類名在方法體中只能使用static變量和static方法或訪問自己的局部變量abstract:只有接口沒有語句,要在子類中通過重新定義(override)來實(shí)現(xiàn)final:不能被重新定義(override)類和對象97throws:通告本方法中會(huì)產(chǎn)生的例外(異常)類型,提醒調(diào)用者要對相應(yīng)的可能例外進(jìn)行處理。當(dāng)執(zhí)行此方法并發(fā)生了例外時(shí),程序會(huì)轉(zhuǎn)入調(diào)用者編制的例外處理程序段。類和對象983.2.2創(chuàng)建對象創(chuàng)建一個(gè)類,就創(chuàng)建了一種新的數(shù)據(jù)類型;聲明一個(gè)類的變量,就是聲明了該類的一個(gè)實(shí)例,即對象。創(chuàng)建對象包括聲明對象、實(shí)例化對象即為對象分配存儲(chǔ)空間兩步。1.聲明對象類名對象名表;例:Circle
circleOne,circleTwo;類和對象992.建立對象使用new運(yùn)算符和類的構(gòu)造方法為聲明的對象分配內(nèi)存空間,如果類中沒有構(gòu)造方法,系統(tǒng)會(huì)調(diào)用默認(rèn)的無參構(gòu)造方法。格式:對象名=new構(gòu)造方法(形參列表);
例如:circleOne=newCircle();//此時(shí)circleOne引用被分配內(nèi)存空間的其實(shí)地址circleTwo=newCircle(2.0);類和對象1003.2.3對象的使用在程序中創(chuàng)建對象的目的是使用對象。創(chuàng)建一個(gè)對象就要為對象的各個(gè)成員變量分配存儲(chǔ)空間??梢酝ㄟ^引用對象的成員來使用對象:對象數(shù)據(jù)成員的引用方式如下:對象名.數(shù)據(jù)成員名對象的成員方法的引用方式如下:對象名.成員方法名(實(shí)際參數(shù)表)示例:參看例3.1類和對象1013.2.4對象的清除。Java運(yùn)行時(shí)系統(tǒng)通過垃圾自動(dòng)回收機(jī)制周期性地釋放無用對象所使用的內(nèi)存,完成垃圾的自動(dòng)回收。當(dāng)一個(gè)對象的引用為空時(shí),該對象稱為一個(gè)無用對象。垃圾收集器以較低優(yōu)先級在系統(tǒng)空閑周期中執(zhí)行,一次垃圾的收集速度比較慢,在某些情況下,我們也可以通過調(diào)用System類的gc()方法,即調(diào)用System.gc()顯示執(zhí)行垃圾收集。類和對象1023.3實(shí)例變量、實(shí)例方法和類變量、類方法在類的數(shù)據(jù)成員和方法成員前用static關(guān)鍵字修飾的分別稱為類變量和類方法,也稱為靜態(tài)變量和靜態(tài)方法,非靜態(tài)的又分別稱為實(shí)例變量和實(shí)例方法。在生成每個(gè)類的實(shí)例對象時(shí),Java運(yùn)行時(shí)系統(tǒng)為每個(gè)對象分配一塊內(nèi)存,然后可以通過對象引用變量來訪問這些對象的實(shí)例變量。不同對象的實(shí)例變量是不同的。類和對象1033.4this關(guān)鍵字關(guān)鍵字this用來指向當(dāng)前對象或類的實(shí)例變量。如果局部變量與實(shí)例變量重名,則局部變量優(yōu)先,同名的實(shí)例變量或類變量被隱藏。例: classTestThis{intday=1;voidsetDay(intday){
this.day=day;}}
類和對象1043.5包包(package)是Java提供的文件(即公共類)的組織方式。一個(gè)包對應(yīng)一個(gè)文件夾,一個(gè)包中可以包括許多類文件。包中還可以再有子包,稱為包等級。包的作用有四個(gè):(1)定位類:具有相似功能的類可以放置在同一個(gè)包中,這樣可以很容易地查找定位類。(2)避免命名沖突:在開發(fā)由其他程序員共享的可復(fù)用類時(shí),會(huì)發(fā)生命名沖突,可以把類放在不同包中,通過包名引用類可以避免命名沖突。(3)可以方便地分發(fā)軟件。(4)控制類之間的訪問(參見第4章訪問控制)。注意:包是一個(gè)類名空間,同一個(gè)包中的類和接口(參見第4章)不能重名,不同包中的類可以重名。類和對象1053.5.1創(chuàng)建包包的創(chuàng)建就是將源程序文件中的接口和類納入指定的包。一般情況下,Java源程序由四部分組成:(1)一個(gè)包(package)定義語句(可選項(xiàng))。其作用是將本源文件中的接口和類納入指定包。源文件中若有包說明語句,必須是第一個(gè)語句;(2)若干個(gè)(import)語句(可選項(xiàng))。其作用是引入本源文件中所需要使用的包;(3)一個(gè)public的類聲明。在一個(gè)源文件中只能有一個(gè)public類;(4)若干個(gè)屬于本包的類聲明(可選)。包的定義語句格式:package
包名;類和對象106例:packagepack1.pack2;創(chuàng)建包就是在當(dāng)前文件夾下創(chuàng)建一個(gè)子文件夾,存放這個(gè)包中包含的所有類和接口的.class文件。packagepack1.pack2;語句中的符號“.”代表了目錄分隔符,說明這個(gè)語句創(chuàng)建了兩個(gè)文件夾。第一個(gè)是當(dāng)前文件夾下的子文件夾pack1;第二個(gè)是pack1下的子文件夾pack2,當(dāng)前包中的所有類就存放在這個(gè)文件夾里。類和對象1073.5.2設(shè)置類路徑包是一種組織代碼的有效手段,包名指出了程序中需要使用的.class文件的所在之處。另一個(gè)能指明.class文件所在的位置是環(huán)境變量CLASSPATH。在WindowsXP或Windows2000中可以通過設(shè)置“我的電腦”屬性來設(shè)置系統(tǒng)的環(huán)境變量。對于JavaApplication程序,還可以通過為Java解釋器設(shè)置參數(shù)來指定類文件路徑。例如,對于JDK中的Java解釋器java.exe,有開關(guān)參數(shù)-classpath;假設(shè)當(dāng)需要解釋執(zhí)行的test.class文件不在當(dāng)前目錄而在e盤的TEMP目錄下時(shí),可以使用如下的命令行語句:java-classpathe:\tempTest來運(yùn)行這個(gè)程序。類和對象1083.5.3包的使用Java提供了豐富的標(biāo)準(zhǔn)類來幫助程序設(shè)計(jì)者更方便快捷地編寫程序,這些標(biāo)準(zhǔn)類組成了類包,主要有:java.langjava.awtjava.appletjava.awt.imagejava.awt.peerjava.iojava.util使用Swing組件進(jìn)行GUI設(shè)計(jì),使用javax.swing包中的類除了java.lang之外,其余類包都不是java語言所必須的。若要使用,必須進(jìn)行包的導(dǎo)入。類和對象109將類組織成包的目的是為了更好地利用包中的類。通常一個(gè)類只能引用與它在同一個(gè)包中的類。如果需要使用其它包中的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)鍵字加載整個(gè)包importpack1.pack2.*;
類和對象1103.6內(nèi)部類和匿名類3.6.1內(nèi)部類一個(gè)類被嵌套定義于另一個(gè)類中,稱為內(nèi)部類(InnerClasses)或內(nèi)隱類,包含內(nèi)部類的類稱為外部類。示例:參看例3.5類和對象1113.6.2匿名類有時(shí)在定義事件處理代碼時(shí),由于代碼短小,不必再明確定義一個(gè)類,可使用匿名內(nèi)部類。匿名內(nèi)部類是final(最終)類,非static類,匿名內(nèi)部類將類的聲明和創(chuàng)建類的實(shí)例一步完成。主要應(yīng)用在事件處理的代碼編寫中。類和對象1123.7訪問控制和類的封裝性3.7.1訪問控制對類的成員變量和成員方法而言,其應(yīng)用范圍可以通過施以一定的訪問權(quán)限來限定。
同一個(gè)類中同一個(gè)包中不同包中的子類不同包中的非子類
private ★ default ★ ★ protected ★ ★ ★ public ★ ★ ★ ★ 繼承性和多態(tài)性1134.1繼承性類具有繼承性,子類對父類的繼承關(guān)系體現(xiàn)了現(xiàn)實(shí)世界中特殊和一般的關(guān)系。通過繼承可以更有效地組織程序結(jié)構(gòu),明確類間關(guān)系,并充分利用已有的類來完成更復(fù)雜、深入的開發(fā)。4.1.1派生類的定義Java中的所有類都是java.lang.Object類的子類。Java語言中派生類的定義格式如下:示例:參看例4.1class<子類>extends<唯一的父類名>{<類定義體>}繼承性和多態(tài)性1144.1.2super關(guān)鍵字1.數(shù)據(jù)成員的隱藏?cái)?shù)據(jù)成員的隱藏是指在子類中重新定義一個(gè)與父類中已定義的數(shù)據(jù)成員名完全相同的數(shù)據(jù)成員,即子類擁有了兩個(gè)相同名字的數(shù)據(jù)成員,一個(gè)是繼承父類的,另一個(gè)是自己定義的。當(dāng)子類要操作繼承自父類的同名數(shù)據(jù)成員時(shí),可使用關(guān)鍵字super引導(dǎo)。2.成員方法的覆蓋子類可以重新定義與父類格式完全相同(包括方法名、方法形參的個(gè)數(shù)和類型、方法返回值的類型)的成員方法,實(shí)現(xiàn)對父類方法的覆蓋。繼承性和多態(tài)性115關(guān)于方法覆蓋只有當(dāng)實(shí)例方法能被訪問時(shí),才能進(jìn)行方法覆蓋。私有方法不能被覆蓋.靜態(tài)方法(類方法)能被繼承,但不能被覆蓋。子類在重新定義父類已有的方法時(shí),應(yīng)保持與父類完全相同的方法名、返回值類型和參數(shù)列表,否則就不是方法的覆蓋,而是子類定義自己特有的方法,與父類的方法無關(guān)。繼承性和多態(tài)性1163.super關(guān)鍵字super表示的是當(dāng)前對象的直接父類對象,是當(dāng)前對象的直接父類對象的引用。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修飾的成員變量可以被三種類所引:該類自身、與它在同一個(gè)包中的其它類及在其它包中的該類的子類。2.final關(guān)鍵字使用final關(guān)鍵字可以定義常量。定義類時(shí),在class關(guān)鍵字前加關(guān)鍵字final,表示此類是最終類,不能被其它類繼承,不能做父類。用final修飾成員方法,表示此方法不能被它的子類覆蓋。繼承性和多態(tài)性1183.native關(guān)鍵字native修飾的方法稱為本地方法,此方法使用的目的是為了將其它語言(例如,C、C++、FORTRAN、匯編等)嵌入到Java語言中。這樣可以充分利用已經(jīng)存在的其它語言的程序功能模塊,避免重復(fù)編程。繼承性和多態(tài)性1194.2多態(tài)性多態(tài)是面向?qū)ο蟪绦蛟O(shè)計(jì)語言的一個(gè)重要特性,在Java中,可以在同一類或不同類中定義名稱相同但是操作不同的多個(gè)方法,多態(tài)性指的是運(yùn)行時(shí)判斷應(yīng)該執(zhí)行哪個(gè)方法代碼的能力,這種能力也叫動(dòng)態(tài)綁定。在Java語言中,多態(tài)性分為編譯時(shí)多態(tài)性和運(yùn)行時(shí)多態(tài)性。編譯時(shí)的多態(tài)性是通過方法重載實(shí)現(xiàn)的,Java虛擬機(jī)根據(jù)傳遞給方法的參數(shù)個(gè)數(shù)和類型決定調(diào)用哪個(gè)重載方法。繼承性和多態(tài)性120運(yùn)行時(shí)的多態(tài)性是Java多態(tài)性的最重要的體現(xiàn),在Java語言的繼承關(guān)系中,子類對象與父類對象之間有一個(gè)重要特性:在任何需要父類對象的地方,都可以使用子類對象來代替,即子類對象可以作為父類對象來使用。一個(gè)對象可以通過引用子類的實(shí)例來調(diào)用子類的方法,通常,方法在父類中定義,在子類中覆蓋,子類中調(diào)用哪個(gè)方法是在運(yùn)行時(shí)決定的,取決于對象的類型,稱為運(yùn)行時(shí)的多態(tài)性。示例:參看例4.3繼承性和多態(tài)性1214.3抽象類和接口抽象類體現(xiàn)數(shù)據(jù)抽象的思想,是實(shí)現(xiàn)程序多態(tài)性的一種手段。接口則是Java中實(shí)現(xiàn)多重繼承的唯一途徑。4.3.1抽象類抽象類的作用在于將許多有關(guān)的類組織在一起,提供一個(gè)公共的類,即抽象類,而那些被它組織在一起的具體的類做為它的子類由它派生出來。定義一個(gè)抽象類的格式如下:abstractclassabstractClass{/*類定義體*/}抽象方法是指在返回值類型前加上abstract關(guān)鍵字,且沒有方法體。格式如下:abstract<返回值類型><抽象方法名>([<形式參數(shù)列表>]);示例:參看例4.4繼承性和多態(tài)性122對于抽象類與抽象方法的限制(1)凡是用abstract修飾符修飾的類被稱為抽象類。凡是用abstract修飾符修飾的成員方法被稱為抽象方法;(2)抽象類中可以有零個(gè)或多個(gè)抽象方法,也可以包含非抽象的方法;(3)抽象類中可以沒有抽象方法,但是,有抽象方法的類必須是抽象類;(4)對于抽象方法來說,在抽象類中只指定其方法名及其類型,而不書寫其實(shí)現(xiàn)代碼;(5)抽象類可以派生子類,在抽象類派生的子類中必須實(shí)現(xiàn)抽象類中定義的所有抽象方法;繼承性和多態(tài)性123(6)抽象類不能使用new運(yùn)算符創(chuàng)建對象,但仍可在抽象類中定義構(gòu)造方法,可由派生類的構(gòu)造方法調(diào)用;(7)abstract和final不能同時(shí)修飾一個(gè)類;(8)abstract不能與private、static、final或native同時(shí)修飾一個(gè)方法;(9)abstract類中不能有private的數(shù)據(jù)成員或成員方法;(10)父類是非抽象類(即具體類),則其子類仍可是抽象類;(11)雖然不能創(chuàng)建抽象類的對象,但抽象類可以當(dāng)作數(shù)據(jù)類型使用,如作為方法形參類型、返回值類型、數(shù)組元素類型等等。
繼承性和多態(tài)性1244.3.2
接口與C++不同,Java不支持多重繼承,而是用接口實(shí)現(xiàn)比多重繼承更強(qiáng)的功能。接口則把方法的定義和類的層次區(qū)分開來,通過它可以在運(yùn)行時(shí)動(dòng)態(tài)地定位所調(diào)用的方法。同時(shí),接口可以實(shí)現(xiàn)“多重繼承”,且一個(gè)類可實(shí)現(xiàn)多個(gè)接口,正是這些機(jī)制使得接口提供了比多重繼承更簡單,更靈活,而且更強(qiáng)健的功能。接口就是方法定義和常量值的集合。從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有方法的實(shí)現(xiàn)。繼承性和多態(tài)性1251.聲明接口聲明接口的格式如下:[修飾符]interface接口名[extends父接口名列表]{常量數(shù)據(jù)成員聲明抽象方法聲明}其中:(1)interface是聲明接口的關(guān)鍵字,可以把它看成一個(gè)特殊類;(2)接口名要求符合Java標(biāo)識(shí)符命名規(guī)則;(3)修飾符有兩種:public和默認(rèn)。public修飾的接口是公共接口,可以被所有的類和接口使用;默認(rèn)修飾符的接口只能被同一個(gè)包中的其它類和接口使用;繼承性和多態(tài)性126(4)父接口列表:接口也具有繼承性。定義一個(gè)接口時(shí)可以通過extends關(guān)鍵字聲明該接口是某個(gè)已經(jīng)存在的父接口的派生接口,它將繼承父接口的所有屬性和方法。與類的繼承不同的是一個(gè)接口可以有一個(gè)以上的父接口,它們之間用逗號分隔;(5)常量數(shù)據(jù)成員聲明:常量數(shù)據(jù)成員前可以有也可省略修飾符。修飾符是publicstatic和fina1;接口中的數(shù)據(jù)成員都是用final修飾的常量,寫法如下:修飾符數(shù)據(jù)成員類型數(shù)據(jù)成員名=常量值或數(shù)據(jù)成員名=常量值例如:publicfinalstaticdoublePI=3.14159;//等價(jià)于doublePI=3.14159;intSUM=100;//等價(jià)于finalstaticintSUM=100;繼承性和多態(tài)性127(6)接口中沒有自身的構(gòu)造方法,所有成員方法都是抽象方法;在接口中只能給出這些抽象方法的方法名、返回值和參數(shù)列表,而不能定義方法體,即僅僅規(guī)定了一組信息交換、傳輸和處理的“接口”。格式如下:返回值類型方法名(參數(shù)列表);繼承性和多態(tài)性1282.接口的實(shí)現(xiàn)接口定義僅僅是實(shí)現(xiàn)某一特定功能的一組功能的對外接口和規(guī)范,而不能真正地實(shí)現(xiàn)這個(gè)功能,這個(gè)功能的真正實(shí)現(xiàn)是在“繼承”這個(gè)接口的各個(gè)類中完成的,要由這些類來具體定義接口中各抽象方法的方法體。一個(gè)類只能繼承一個(gè)父類,但是可實(shí)現(xiàn)多個(gè)接口。類定義的完整格式如下:[<修飾符>]class<類名>[extends<父類名>][implements<接口名1>,<接口名2>,……]{//類定義體}示例:參看例4.5繼承性和多態(tài)性129關(guān)于接口的實(shí)現(xiàn)(1)在類中,用implements關(guān)鍵字就可以調(diào)用接口。一個(gè)類可以調(diào)用多個(gè)接口,這時(shí),在implements后用逗號隔開多個(gè)接口的名字;(2)如果實(shí)現(xiàn)某接口的類不是抽象類,則在類的定義體部分必須實(shí)現(xiàn)指定接口的所有抽象方法,即為所有抽象方法定義方法體,而且方法頭部分應(yīng)該與接口中的定義完全一致,即有完全相同的返回值和參數(shù)列表;(3)如果實(shí)現(xiàn)某接口的類是抽象類,則它可以不實(shí)現(xiàn)該接口所有的方法。(4)接口的抽象方法的訪問限制符都己指定為public,所以類在實(shí)現(xiàn)方法時(shí),必須顯式地使用public修飾符,否則編譯系統(tǒng)警告為縮小了接口中定義的方法的訪問控制范圍。繼承性和多態(tài)性1303.接口和抽象類的區(qū)別Java中所有的類有共同的父類java.lang.Object,但接口沒有共同的根。接口可以當(dāng)作抽象類使用。它們的區(qū)別如下:(1)接口中的每個(gè)方法,沒有實(shí)現(xiàn)部分,都是抽象方法;抽象類中可以有具體的方法。(2)接口中的數(shù)據(jù)必須是常量;抽象類可以有各種類型的數(shù)據(jù)。(3)由于定義在接口中的所有方法都是抽象方法,接口中可以省略abstract修飾符;但是抽象類中的抽象方法必須用abstract修飾。繼承性和多態(tài)性1314.類型轉(zhuǎn)換和instanceof運(yùn)算符基本數(shù)據(jù)類型可以進(jìn)行強(qiáng)制或自動(dòng)類型轉(zhuǎn)換,也可以把一個(gè)類的對象轉(zhuǎn)換為繼承鏈中的另一個(gè)對象。將子類的實(shí)例轉(zhuǎn)換為父類的實(shí)例總是可行的,因
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中小學(xué)生校外培訓(xùn)服務(wù)合同
- 項(xiàng)目管理效率提升的實(shí)施方案
- 建筑工程投資合作協(xié)議合同
- 本小區(qū)物業(yè)管理合同書
- 酒店合作協(xié)議書范本旅游
- 智能交通大數(shù)據(jù)分析平臺(tái)服務(wù)協(xié)議
- 債權(quán)代償及擔(dān)保協(xié)議
- 智能穿戴設(shè)備研發(fā)及生產(chǎn)銷售合同
- 醫(yī)療器械研發(fā)及生產(chǎn)合作協(xié)議
- 船舶維修服務(wù)采購合同
- DeepSeek1天開發(fā)快速入門
- 2025書記員招聘考試題庫及參考答案
- 2024-2025年第二學(xué)期數(shù)學(xué)教研組工作計(jì)劃
- 2025輔警招聘公安基礎(chǔ)知識(shí)題庫附含參考答案
- 2025年菏澤醫(yī)學(xué)專科學(xué)校高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 成都四川成都簡陽市簡城街道便民服務(wù)和智慧蓉城運(yùn)行中心招聘綜治巡防隊(duì)員10人筆試歷年參考題庫附帶答案詳解
- 2025-2030全球廢棄食用油 (UCO) 轉(zhuǎn)化為可持續(xù)航空燃料 (SAF) 的催化劑行業(yè)調(diào)研及趨勢分析報(bào)告
- 山東省臨沂市蘭山區(qū)2024-2025學(xué)年七年級上學(xué)期期末考試生物試卷(含答案)
- 2025年環(huán)衛(wèi)工作計(jì)劃
- 湖北省武漢市2024-2025學(xué)年度高三元月調(diào)考英語試題(含答案無聽力音頻有聽力原文)
- 品質(zhì)巡檢培訓(xùn)課件
評論
0/150
提交評論