版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
面向?qū)ο笙略斀庋菔疚母迥壳耙豁揬總數(shù)八十四頁\編于二十點優(yōu)選面向?qū)ο笙履壳岸揬總數(shù)八十四頁\編于二十點4.1類的繼承4.1.1繼承的概念程序中,繼承描述的是事物之間的所屬關系,通過繼承可以使多種事物之間形成一種關系體系。在Java中,類的繼承是指在一個現(xiàn)有類的基礎上去構(gòu)建一個新的類,構(gòu)建出來的新類被稱作子類,現(xiàn)有類被稱作父類,子類會自動擁有父類所有可繼承的屬性和方法。在程序中,如果想聲明一個類繼承另一個類,需要使用extends關鍵字,接下來通過一個案例來學習子類是如何繼承父類的。目前三頁\總數(shù)八十四頁\編于二十點4.1類的繼承目前四頁\總數(shù)八十四頁\編于二十點4.1類的繼承4.1.1繼承的概念在類的繼承中,需要注意一些問題,具體如下:1、在Java中,類只支持單繼承,不允許多重繼承,也就是說一個類只能有一個直接父類,例如下面這種情況是不合法的。2、多個類可以繼承一個父類,例如下面這種情況是允許的。目前五頁\總數(shù)八十四頁\編于二十點4.1類的繼承4.1.1繼承的概念在類的繼承中,需要注意一些問題,具體如下:3、在Java中,多層繼承是可以的,即一個類的父類可以再去繼承另外的父類,例如C類繼承自B類,而B類又可以去繼承A類,這時,C類也可稱作A類的子類。下面這種情況是允許的。目前六頁\總數(shù)八十四頁\編于二十點4.1類的繼承重寫父類方法在繼承關系中,子類會自動繼承父類中定義的方法,但有時在子類中需要對繼承的方法進行一些修改,即對父類的方法進行重寫。需要注意的是,在子類中重寫的方法需要和父類被重寫的方法具有相同的方法名、參數(shù)列表以及返回值類型。目前七頁\總數(shù)八十四頁\編于二十點4.1類的繼承重寫父類方法從例程4-3的運行結(jié)果可以看出,當子類重寫父類的方法后,子類對象將無法訪問父類被重寫的方法,為了解決這個問題,在Java中專門提供了一個super關鍵字用于訪問父類的成員。例如訪問父類的成員變量、成員方法和構(gòu)造方法。接下來分兩種情況來學習一下super關鍵字的具體用法。1、使用super關鍵字調(diào)用父類的成員變量和成員方法。具體格式如下:目前八頁\總數(shù)八十四頁\編于二十點4.1類的繼承目前九頁\總數(shù)八十四頁\編于二十點4.1類的繼承重寫父類方法2、使用super關鍵字調(diào)用父類的構(gòu)造方法。具體格式如下:目前十頁\總數(shù)八十四頁\編于二十點4.1類的繼承重寫父類方法例程4-4中在實例化Dog對象時一定會調(diào)用Dog類的構(gòu)造方法。從運行結(jié)果可以看出,Dog類的構(gòu)造方法被調(diào)用時父類的構(gòu)造方法也被調(diào)用了。需要注意的是,通過super調(diào)用父類構(gòu)造方法的代碼必須位于子類構(gòu)造方法的第一行,并且只能出現(xiàn)一次。將例程4-4第11行代碼去掉,再次編譯程序會報錯:目前十一頁\總數(shù)八十四頁\編于二十點4.1類的繼承重寫父類方法出錯的原因是,在子類的構(gòu)造方法中一定會調(diào)用父類的某個構(gòu)造方法。這時可以在子類的構(gòu)造方法中通過super指定調(diào)用父類的哪個構(gòu)造方法,如果沒有指定,在實例化子類對象時,會自動調(diào)用父類無參的構(gòu)造方法。為了解決上述程序的編譯錯誤,可以在子類中顯示地調(diào)用父類中已有的構(gòu)造方法,當然也可以選擇在父類中定義無參的構(gòu)造方法,現(xiàn)將例程4-4中的Animal類進行修改,如例程4-5所示。目前十二頁\總數(shù)八十四頁\編于二十點4.2final關鍵字final關鍵字可用于修飾類、變量和方法,它有“這是無法改變的”或者“最終”的含義,因此被final修飾的類、變量和方法將具有以下特性:1、final修飾的類不能被繼承。2、final修飾的方法不能被子類重寫。3、final修飾的變量(成員變量和局部變量)是常量,只能賦值一次。目前十三頁\總數(shù)八十四頁\編于二十點4.2final關鍵字4.2.1final關鍵字修飾類Java中的類被final關鍵字修飾后,該類將不可以被繼承,也就是不能夠派生子類。接下來通過一個案例來驗證,如例程4-6所示。目前十四頁\總數(shù)八十四頁\編于二十點4.2final關鍵字4.2.2final關鍵字修飾方法當一個類的方法被final關鍵字修飾后,這個類的子類將不能重寫該方法。接下來通過一個案例來驗證,如例程4-7所示。這是因為Animal類的shout()方法被final所修飾。由此可見,被final關鍵字修飾的方法為最終方法,子類不能對該方法進行重寫。正是由于final的這種特性,當在父類中的定義某個方法時,如果不希望被子類重寫,就可以使用final關鍵字修飾該方法。目前十五頁\總數(shù)八十四頁\編于二十點4.2final關鍵字這是因為使用final關鍵字修飾成員變量時,虛擬機不會對其進行初始化。因此使用final修飾成員變量時,需要在定義變量的同時賦予一個初始值,下面將第2行代碼修改為:finalStringname="李芳";//為final關鍵字修飾的name屬性賦值目前十六頁\總數(shù)八十四頁\編于二十點4.3抽象類和接口4.3.1抽象類當定義一個類時,常常需要定義一些方法來描述該類的行為特征,但有時這些方法的實現(xiàn)方式是無法確定的。針對上面描述的情況,Java允許在定義方法時不寫方法體,不包含方法體的方法為抽象方法,抽象方法必須使用abstract關鍵字來修飾,具體示例如下:目前十七頁\總數(shù)八十四頁\編于二十點4.3抽象類和接口4.3.1抽象類當一個類中包含了抽象方法,該類必須使用abstract關鍵字來修飾,使用abstract關鍵字修飾的類為抽象類,具體示例如下:目前十八頁\總數(shù)八十四頁\編于二十點4.3抽象類和接口4.3.1抽象類在定義抽象類時需要注意,包含抽象方法的類必須聲明為抽象類,但抽象類可以不包含任何抽象方法,只需使用abstract關鍵字來修飾即可。另外,抽象類是不可以被實例化的,因為抽象類中有可能包含抽象方法,抽象方法是沒有方法體的,不可以被調(diào)用。如果想調(diào)用抽象類中定義的方法,則需要創(chuàng)建一個子類,在子類中將抽象類中的抽象方法進行實現(xiàn)。目前十九頁\總數(shù)八十四頁\編于二十點4.3抽象類和接口4.3.2接口如果一個抽象類中的所有方法都是抽象的,則可以將這個類用另外一種方式來定義,即接口。在定義接口時,需要使用interface關鍵字來聲明,具體示例如下:從示例中發(fā)現(xiàn)抽象方法breathe()并沒有使用abstract關鍵字來修飾,這是因為接口中定義的方法和變量都包含一些默認修飾符。接口中定義的方法默認使用“publicabstract”來修飾,即抽象方法。接口中的變量默認使用“publicstaticfinal”來修飾,即全局常量。目前二十頁\總數(shù)八十四頁\編于二十點4.3抽象類和接口4.3.2接口由于接口中的方法都是抽象方法,因此不能通過實例化對象的方式來調(diào)用接口中的方法。此時需要定義一個類,并使用implements關鍵字實現(xiàn)接口中所有的方法。接下來通過一個案例來學習,如例程4-11所示。目前二十一頁\總數(shù)八十四頁\編于二十點4.3抽象類和接口4.3.2接口例程4-11演示的是類與接口之間的實現(xiàn)關系,在程序中,還可以定義一個接口使用extends關鍵字去繼承另一個接口,接下來對例程4-11稍加修改,演示接口之間的繼承關系,修改后的代碼如例4-12所示。目前二十二頁\總數(shù)八十四頁\編于二十點4.3抽象類和接口4.3.2接口為了加深初學者對接口的認識,接下來對接口的特點進行歸納,具體如下:1、接口中的方法都是抽象的,不能實例化對象。2、當一個類實現(xiàn)接口時,如果這個類是抽象類,則實現(xiàn)接口中的部分方法即可,否則需要實現(xiàn)接口中的所有方法。3、一個類通過implements關鍵字實現(xiàn)接口時,可以實現(xiàn)多個接口,被實現(xiàn)的多個接口之間要用逗號隔開。具體示例如下:目前二十三頁\總數(shù)八十四頁\編于二十點4.3抽象類和接口4.3.2接口4、一個接口可以通過extends關鍵字繼承多個接口,接口之間用逗號隔開。具體示例如下:目前二十四頁\總數(shù)八十四頁\編于二十點4.3抽象類和接口4.3.2接口5、一個類在繼承另一個類的同時還可以實現(xiàn)接口,此時,extends關鍵字必須位于implements關鍵字之前。具體示例如下:目前二十五頁\總數(shù)八十四頁\編于二十點4.4多態(tài)4.4.1多態(tài)概述在設計一個方法時,通常希望該方法具備一定的通用性。在同一個方法中,這種由于參數(shù)類型不同而導致執(zhí)行效果各異的現(xiàn)象就是多態(tài)。在Java中為了實現(xiàn)多態(tài),允許使用一個父類類型的變量來引用一個子類類型的對象,根據(jù)被引用子類對象特征的不同,得到不同的運行結(jié)果,接下來通過一個案例來演示,如例程4-13所示。目前二十六頁\總數(shù)八十四頁\編于二十點4.4多態(tài)4.4.2對象的類型轉(zhuǎn)換在多態(tài)的學習中,涉及到將子類對象當做父類類型使用的情況,例如下面兩行代碼:將子類對象當做父類使用時不需要任何顯式地聲明,需要注意的是,此時不能通過父類變量去調(diào)用子類中某些方法,接下來通過一個例程來演示,如例程4-14所示。目前二十七頁\總數(shù)八十四頁\編于二十點4.4多態(tài)目前二十八頁\總數(shù)八十四頁\編于二十點4.4多態(tài)4.4.2對象的類型轉(zhuǎn)換將例程4-14中的animalShout()方法進行修改,具體代碼如下:目前二十九頁\總數(shù)八十四頁\編于二十點4.4多態(tài)4.4.2對象的類型轉(zhuǎn)換需要注意的是,在進行類型轉(zhuǎn)換時也可能出現(xiàn)錯誤,例如在例程4-14中調(diào)用animalShout()方法時傳入一個Dog類型的對象,這時進行強制類型轉(zhuǎn)換就會出現(xiàn)出錯,如例程4-15所示。出錯的原因是,在調(diào)用animalShout()方法時,傳入一個Dog對象,在強制類型轉(zhuǎn)換時,Animal類型的變量無法強轉(zhuǎn)為Cat類型。目前三十頁\總數(shù)八十四頁\編于二十點4.4多態(tài)4.4.2對象的類型轉(zhuǎn)換針對這種情況,Java提供了一個關鍵字instanceof,它可以判斷一個對象是否為某個類(或接口)的實例或者子類實例,語法格式如下:接下來對例程4-15的animalShout()方法進行修改,具體代碼如下:目前三十一頁\總數(shù)八十四頁\編于二十點4.4多態(tài)4.4.3Object類在JDK中提供了一個Object類,它是所有類的父類,即每個類都直接或間接繼承自該類。先來看一個例子,如例程4-16所示。目前三十二頁\總數(shù)八十四頁\編于二十點4.4多態(tài)4.4.3Object類因為Animal默認繼承自Object類,在Object類中定義了toString()方法,在該方法中輸出了對象的基本信息,Object類的toString()方法中的代碼具體如下:getClass().getName()代表返回對象所屬類的類名,即Animal。hashCode()代表返回該對象的哈希值。Integer.toHexString(hashCode())代表將對象的哈希值用16進制表示。其中,hashCode()是Object類中定義的一個方法,這個方法將對象的內(nèi)存地址進行哈希運算,返回一個int類型的哈希值。目前三十三頁\總數(shù)八十四頁\編于二十點4.4多態(tài)4.4.3Object類在實際開發(fā)中,通常希望對象的toString()方法返回的不僅僅是基本信息,而是一些特有的信息,這時重寫Object的toString()方法便可以實現(xiàn),如例程4-17所示。目前三十四頁\總數(shù)八十四頁\編于二十點4.4多態(tài)4.4.4匿名內(nèi)部類前面多態(tài)的講解中,如果方法的參數(shù)被定義為一個接口類型,那么就需要定義一個類來實現(xiàn)接口,并根據(jù)該類進行對象實例化。除此之外,還可以使用匿名內(nèi)部類來實現(xiàn)接口。為了讓初學者能更好地理解什么是匿名內(nèi)部類,接下來首先將例程4-13改為內(nèi)部類的方式進行實現(xiàn),如例程4-18所示。目前三十五頁\總數(shù)八十四頁\編于二十點4.4多態(tài)4.4.4匿名內(nèi)部類首先看一下匿名內(nèi)部類的格式,具體如下。接下來對例程4-18進行改寫,如例程4-19所示。目前三十六頁\總數(shù)八十四頁\編于二十點4.4多態(tài)4.4.4匿名內(nèi)部類對于初學者而言,可能會覺得匿名內(nèi)部類的寫法比較難理解,接下來分兩步來編寫匿名內(nèi)部類,具體如下:1、在調(diào)用animalShout()方法時,在方法的參數(shù)位置寫上newAnimal(){},這相當于創(chuàng)建了一個實例對象,并將對象作為參數(shù)傳給animalShout()方法。在newAnimal()后面有一對大括號,表示創(chuàng)建的對象為Animal的子類實例,該子類是匿名的。具體代碼如下所示:目前三十七頁\總數(shù)八十四頁\編于二十點4.4多態(tài)4.4.4匿名內(nèi)部類對于初學者而言,可能會覺得匿名內(nèi)部類的寫法比較難理解,接下來分兩步來編寫匿名內(nèi)部類,具體如下:目前三十八頁\總數(shù)八十四頁\編于二十點多學一招4.4.4匿名內(nèi)部類接口在面向?qū)ο蟮脑O計與編程中應用的非常廣泛,特別是實現(xiàn)軟件模塊間的插接方面有著巨大的優(yōu)勢。我們在北京中關村的電子市場隨便挑選了一塊計算機主板和一塊PCI卡(網(wǎng)卡、聲卡等),結(jié)果,這塊PCI卡能夠很好地利用到這塊主板上,雖然主板廠商和PCI卡廠商不是同一家,但他們都知道同一個標準——PCI規(guī)范。目前三十九頁\總數(shù)八十四頁\編于二十點多學一招4.4.4匿名內(nèi)部類我們通過編寫一段程序來模擬上述過程的實現(xiàn),“調(diào)用者和被調(diào)用者必須共同遵守某一限定,調(diào)用者按照這個限定進行方法調(diào)用,被調(diào)用者按照這個限定進行方法實現(xiàn)”的應用情況,在面向?qū)ο蟮木幊陶Z言中,這種限定就是通過接口類來表示的,主板和各種PCI卡就是按照PCI接口進行約定的。接下來通過一個案例進行學習,如例程4-20所示。目前四十頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.1什么是異常在程序運行的過程中,也會發(fā)生這種非正常狀況,比如程序運行時磁盤空間不足,網(wǎng)絡連接中斷,被裝載的類不存在。針對這種情況,在Java語言中,引入了異常,以異常類的形式對這些非正常情況進行封裝,通過異常處理機制對程序運行時發(fā)生的各種問題進行處理。接下來通過一個案例來認識一下什么是異常:程序發(fā)生了算數(shù)異常(ArithmeticException),這個異常是由于程序中的第3行代碼調(diào)用divide()方法時傳入了參數(shù)0,在方法中的第8行代碼的運算中出現(xiàn)了被0除的錯誤。在這個異常發(fā)生后,程序會立即結(jié)束,無法繼續(xù)向下執(zhí)行。目前四十一頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.1什么是異常在例程4-21中產(chǎn)生了一個ArithmeticException異常,ArithmeticException異常只是Java異常類中的一種,在Java中還提供了大量的異常類,這些類都繼承自類。接下來通過一張圖來展示Throwable類的繼承體系,如圖4-27所示。目前四十二頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.1什么是異常Throwable有兩個直接子類Error和Exception,其中Error代表程序中產(chǎn)生的錯誤,Exception代表程序中產(chǎn)生的異常。接下來就對這兩個直接子類進行詳細講解。Error類稱為錯誤類,它表示Java運行時產(chǎn)生的系統(tǒng)內(nèi)部錯誤或資源耗盡的錯誤,是比較嚴重的,僅靠修改程序本身是不能恢復執(zhí)行的。舉一個生活中的例子,在蓋樓的過程中因偷工減料,導致大樓坍塌,這就相當于一個Error。使用java命令去運行一個不存在的類就會出現(xiàn)Error錯誤,如圖4-28所示。目前四十三頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.1什么是異常Throwable有兩個直接子類Error和Exception,其中Error代表程序中產(chǎn)生的錯誤,Exception代表程序中產(chǎn)生的異常。接下來就對這兩個直接子類進行詳細講解。Exception類稱為異常類,它表示程序本身可以處理的錯誤,在開發(fā)Java程序中進行的異常處理,都是針對Excption類及其子類。在Exception類的眾多子類中有一個特殊的RuntimeException類,該類及其子類用于表示運行時異常,除了此類,Exception類下所有其它的子類都用于表示編譯時異常。本節(jié)主要針對Exception類及其子類進行講解。目前四十四頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.1什么是異常通過前面的學習我們已經(jīng)了解了Throwable類,為了方便后面的學習,接下來將Throwable類中的常用方法羅列出來,如表4-1所示。目前四十五頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.2try…catch和finally例程4-21由于發(fā)生了異常,程序立即終止,無法繼續(xù)向下執(zhí)行。為了解決這樣的問題,Java中提供了一種對異常進行處理的方式——異常捕獲。異常捕獲通常使用try…catch語句,具體語法格式如下:其中在try代碼塊中編寫可能發(fā)生異常的Java語句,catch代碼塊中編寫針對異常進行處理的代碼。當try代碼塊中的程序發(fā)生了異常,系統(tǒng)會將這個異常的信息封裝成一個異常對象,并將這個對象傳遞給catch代碼塊。catch代碼塊需要一個形參指明它所能夠接收的異常類型,這個參數(shù)的類型必須是Exception類或其子類。目前四十六頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.2try…catch和finally接下來使用try...catch語句對例程4-21中出現(xiàn)的異常進行捕獲,如例程4-22所示。目前四十七頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.2try…catch和finally需要注意的是,在try代碼塊中,發(fā)生異常語句后面的代碼是不會被執(zhí)行的,如本例中第6行代碼的打印語句就沒有執(zhí)行。在程序中,有時候我們希望有些語句無論程序是否發(fā)生異常都要執(zhí)行,這時就可以在try…catch語句后,加一個finally代碼塊。接下來對例程4-22進行修改,演示一下finally代碼塊的用法,如例程4-23所示。目前四十八頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.2try…catch和finally需要注意的是,finally中的代碼塊有一種情況下是不會執(zhí)行的,那就是在try...catch中執(zhí)行了System.exit(0)語句。System.exit(0)表示退出當前的Java虛擬機,Java虛擬機停止了,任何代碼都不能再執(zhí)行了。目前四十九頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.3throws關鍵字在前面學習的例程4-23中,由于調(diào)用的是自己寫的divide()方法,因此很清楚該方法可能會發(fā)生異常。試想一下,如果去調(diào)用一個別人寫的方法時,是否能知道別人寫的方法是否會有異常呢?這是很難做出判斷的。針對這種情況,Java中允許在方法的后面使用throws關鍵字對外聲明該方法有可能發(fā)生的異常,這樣調(diào)用者在調(diào)用方法時,就明確地知道該方法有異常,并且必須在程序中對異常進行處理,否則編譯無法通過。throws關鍵字聲明拋出異常的語法格式如下:目前五十頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.3throws關鍵字接下來對例程4-23進行修改,在devide()方法上聲明拋出異常,如例程4-24所示。目前五十一頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.3throws關鍵字下面對例程4-24進行修改,在調(diào)用divide()方法時對其進行try…catch處理,如例程4-25所示。目前五十二頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.3throws關鍵字當在調(diào)用divide()方法時,如果不知道如何處理聲明拋出的異常,也可以使用throws關鍵字繼續(xù)將異常拋出,這樣程序也能編譯通過,但需要注意的是,程序一旦發(fā)生異常,如果沒有被處理,程序就會非正常終止,下面將例程4-25進行修改,如例程4-26所示。目前五十三頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.4運行時異常與編譯時異常在實際開發(fā)中,經(jīng)常會在程序編譯時期產(chǎn)生一些異常,而這些異常必須要進行處理,這種異常被稱為編譯時期異常,也稱為checked異常。另外還有一種異常是在程序運行時期產(chǎn)生的,這種異常即使不編寫異常處理代碼,依然可以通過編譯,因此我們稱之為運行時異常,也稱為unchecked異常。接下來就分別對這兩種異常進行詳細的講解。目前五十四頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.4運行時異常與編譯時異常1、編譯時異常在Java中,Exception類中除了RuntimeException類及其的子類都是編譯時異常。編譯時異常的特點是Java編譯器會對其進行檢查,如果出現(xiàn)異常就必須對異常進行處理,否則程序無法通過編譯。處理編譯時期的異常有兩種方式,具體如下:使用try…catch語句對異常進行捕獲。使用throws關鍵字聲明拋出異常,調(diào)用者對其處理。目前五十五頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.4運行時異常與編譯時異常2、運行時異常RuntimeException類及其子類都是運行時異常。運行時異常的特點是Java編譯器不會對其進行檢查,也就是說,當程序中出現(xiàn)這類異常時,即使沒有使用try..catch語句捕獲或使用throws關鍵字聲明拋出,程序也能編譯通過。運行時異常一般是由于程序中的邏輯錯誤引起的,在程序運行時無法恢復。比如通過數(shù)組的角標訪問數(shù)組的元素時,如果超過了數(shù)組的最大角標,就會發(fā)生運行時異常,代碼如下所示:目前五十六頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.5自定義異常JDK中定義了大量的異常類,雖然這些異常類可以描述編程時出現(xiàn)的大部分異常情況,但是在程序開發(fā)中有時可能需要描述程序中特有的異常情況,例如在設計divide()方法時不允許被除數(shù)為負數(shù)。為了解決這個問題,在Java中允許用戶自定義異常,但自定義的異常類必須繼承自Exception或其子類,接下來通過一個案例來學習,如例程4-27所示。目前五十七頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.5自定義異常在實際開發(fā)中,如果沒有特殊的要求,自定義的異常類只需繼承Exception類,在構(gòu)造方法中使用super()語句調(diào)用Exception的構(gòu)造方法即可。既然自定義了異常,那么該如何使用呢?這時就需要用到throw關鍵字,throw關鍵字用于在方法中聲明拋出異常的實例對象,其語法格式如下:目前五十八頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.5自定義異常接下來重新對例程4-26中的divide()方法進行改寫,在divide()方法中判斷被除數(shù)是否為負數(shù),如果為負數(shù),就是用throw關鍵字在方法中向調(diào)用者拋出自定義的DivideByMinusException異常對象,如例程4-28所示。目前五十九頁\總數(shù)八十四頁\編于二十點4.5異常(Exception)4.5.5自定義異常從運行結(jié)果可以看出,程序在編譯時就發(fā)生了異常。這是因為在一個方法內(nèi)使用throw關鍵字拋出異常對象時,需要使用try…catch語句對拋出的異常進行處理,或者在divide()方法上使用throws關鍵字聲明拋出異常,由該方法的調(diào)用者負責處理。為了上面的問題,可以對例程4-28進行修改,在divide()方法上,使用throws關鍵子聲明拋出DivideByMinusException異常,并在調(diào)用該方法時使用try…catch語句對異常進行處理,如例程4-29所示。目前六十頁\總數(shù)八十四頁\編于二十點4.6包(package)4.6.1包的定義與使用為了便于對硬盤上的文件進行管理,通常都會將文件分目錄進行存放。同理,在程序開發(fā)中,也需要將編寫的類分目錄存放便于管理,為此,Java引入了包(package)機制,程序可以通過聲明包的方式對Java類定義目錄。Java中的包是專門用來存放類的,通常功能相同的類存放在相同的包中。在聲明包時,使用package語句,具體示例如下:需要注意的是,包的聲明只能位于Java源文件的第一行。目前六十一頁\總數(shù)八十四頁\編于二十點4.6包(package)4.6.1包的定義與使用當編譯一個聲明了包的Java源文件,需要使用命令生成與包名對應的目錄,具體示例如下:其中,“-d”用來指定生成的類文件的位置,“.”表示在當前目錄,整行命令表示生成帶包目錄的.class文件并存放在當前目錄下,當然,生成的類文件還可以存放在其它目錄下,這時只需要將“.”用其它路徑替換即可。具體示例如下:目前六十二頁\總數(shù)八十四頁\編于二十點4.6包(package)4.6.1包的定義與使用接下來以HelloWorld為例,分步驟講解如何使用包機制管理Java的類文件。1、編寫HelloWorld類,在類名之前聲明當前類所在的包為“cn.itcast”,如例程4-30所示。目前六十三頁\總數(shù)八十四頁\編于二十點4.6包(package)4.6.1包的定義與使用按下回車鍵,在當前目錄下查看包名“cn.itcast”對應的“cn\itcast”目錄,發(fā)現(xiàn)該目錄下存放了HelloWorld.class文件。如圖4-37所示。目前六十四頁\總數(shù)八十四頁\編于二十點4.6包(package)4.6.1包的定義與使用接下來以HelloWorld為例,分步驟講解如何使用包機制管理Java的類文件。3、使用“javacn.itcast.HelloWorld”命令運行圖4-37所示的class文件,需要注意的是,在運行.class文件時,需要跟上包名,運行結(jié)果如圖4-38所示。目前六十五頁\總數(shù)八十四頁\編于二十點4.6包(package)4.6.2import語句在程序開發(fā)中,位于不同包中的類經(jīng)常需要互相調(diào)用。例如,目錄“D:\packageTest”下有兩個源文件,分別是Student.java和Test.java,如例程4-31和例程4-32所示。目前六十六頁\總數(shù)八十四頁\編于二十點4.6包(package)4.6.2import語句首先需要使用“javac–d.Student.java”編譯Student類,編程通過后,會生產(chǎn)“cn.itcast”包,如圖4-39所示。目前六十七頁\總數(shù)八十四頁\編于二十點4.6包(package)4.6.2import語句接下來使用“javac–d.Test.java”命令編譯Test.java源文件,這時會編譯出錯,如圖4-40所示。目前六十八頁\總數(shù)八十四頁\編于二十點4.6包(package)4.6.2import語句為了解決圖4-40所示的編譯錯誤,將例程4-32的第4行進行修改,修改后代碼如下所示:重新編譯Test類,這時編譯通過,使用“javacn.itcast.example.Test”命令運行Test類,運行結(jié)果如圖4-41所示。目前六十九頁\總數(shù)八十四頁\編于二十點4.6包(package)4.6.2import語句為了簡化代碼,Java中提供了import關鍵字,使用import可以在程序中一次導入某個指定包下的類,這樣就不必在每次用到該類時都書寫完整類名了,具體格式如下所示:需要注意的是,import通常出現(xiàn)在package語句之后,類定義之前。接下來對例程4-32修改,修改后的Test類如例程4-33所示。目前七十頁\總數(shù)八十四頁\編于二十點4.6包(package)4.6.2import語句在JDK中,不同功能的類都放在不同的包中,其中Java的核心類主要放在java這個包以及其子包下,Java擴展的大部分類都放在javax包以及其子包下。為便于后面的學習,下面簡單介紹Java語言中的常用包。java.lang:包含Java語言的核心類,如String、Math、System和Thread類等,使用這個包中的類無須使用import語句導入,系統(tǒng)會自動導入這個包下的所有類。java.util:包含Java中大量工具類、集合類等,例如Arrays、List、Set等。:包含Java網(wǎng)絡編程相關的類和接口。java.io:包含了Java輸入、輸出有關的類和接口。java.awt:包含用于構(gòu)建圖形界面(GUI)的相關類和接口。目前七十一頁\總數(shù)八十四頁\編于二十點4.6包(package)4.6.2import語句在程序開發(fā)中,位于不同包中的類經(jīng)常需要互相調(diào)用。例如,目錄“D:\packageTest”下有兩個源文件,分別是Student.java和Test.java,如例程4-31和例程4-32所示。目前七十二頁\總數(shù)八十四頁\編于二十點4.6包(package)4.6.2import語句首先需要使用“javac–d.Student.java”編譯Student類,編程通過后,會生產(chǎn)“cn.itcast”包,如圖4-39所示。目前七十三頁\總數(shù)八十四頁\編于二十點4.6包(package)4.6.2import語句接下來使用“javac–d.Test.java”命令編譯Test.java源文件,這時會編譯出錯,如圖4-40所示。目前七十四頁\總數(shù)八十四頁\編于二十點4.6包(package)4.6.2import語句為了解決圖4-40所示的編譯錯誤,將例程4-32的第4行進行修改,修改后代碼如下所示:重新編譯Test類,這時編譯通過,使用“javacn.itcast.example.Test”命令運行Test類,運行結(jié)果如圖4-41所示。目前七十五頁\總數(shù)八十四頁\編于二十點4.6包(package)4.6.2import語句在實際開發(fā)中,定義的類都是含有包名的,而且還有可能定義很長的包名。為了簡化代碼,Java中提供了import關鍵字,使用import可以在程序中一次導入某個指定包下的類,這樣就不必在每次用到該類時都書寫完整類名了,具體格式如下所示:需要注意的是,import通常出現(xiàn)在package語句之后,類定義之前。接下來對例程4-32修改,修改后的Test類如例程4-33所示。目前七十六頁\總數(shù)八十四頁\編于二十點4.6包(package)4.6.2import語句Java的核心類主要放在java這個包以及其子包下,Java擴展的大部分類都放在javax包以及其子包下。Java語言中的常用包:java.lang:包含Java語言的核心類,如String、Math、System和Thread類等,使用這個包中的類無須使用import語句導入,系統(tǒng)會自動導入這個包下的所有類。java.util:包含Java中大量工具類、集合類等,例如Arrays、List、Set等。:包含Java網(wǎng)絡編程相關的類和接口。java.io:包含了
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版土地使用權(quán)出讓居間合同規(guī)范文本-城市綜合體開發(fā)3篇
- 二零二五版住宅小區(qū)車位產(chǎn)權(quán)轉(zhuǎn)移及使用權(quán)購買合同3篇
- 2025版住宅小區(qū)消防設備設施定期檢查與維護合同范本2篇
- 2025年度木門行業(yè)環(huán)保認證與推廣合同3篇
- 2025年度國際物流合作解約及責任分擔協(xié)議書
- 二零二五年度美容店轉(zhuǎn)讓合同包括美容院品牌授權(quán)及區(qū)域代理權(quán)
- 2025年度二零二五年度大型活動臨時工人搬運服務承包協(xié)議
- 2025年度私人承包廠房租賃合同安全責任追究協(xié)議
- 二零二五板材行業(yè)數(shù)據(jù)分析與市場預測合同3篇
- 二零二五年度鏟車清雪作業(yè)安全責任保險合同
- 中考模擬考試化學試卷與答案解析(共三套)
- 新人教版五年級小學數(shù)學全冊奧數(shù)(含答案)
- 風電場升壓站培訓課件
- 收納盒注塑模具設計(論文-任務書-開題報告-圖紙)
- 博弈論全套課件
- CONSORT2010流程圖(FlowDiagram)【模板】文檔
- 腦電信號處理與特征提取
- 高中數(shù)學知識點全總結(jié)(電子版)
- GB/T 10322.7-2004鐵礦石粒度分布的篩分測定
- 2023新譯林版新教材高中英語必修一重點詞組歸納總結(jié)
- 蘇教版四年級數(shù)學下冊第3單元第2課時“常見的數(shù)量關系”教案
評論
0/150
提交評論