




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、06.面向對象(下)本章要點包裝類equals、toString方法static、finally關鍵字abstract關鍵字和抽象類接口的定義與作用內部類的作用枚舉類JAR包基本數據類型的包裝類八大數據類型的包裝類分別為:Byte、Short、Integer、Long、Character、 Float、Double、Boolean。把基本數據類型變量包裝類實例是通過對應包裝類的構造器來實現的,不僅如此,8個包裝類中除了Character之外,還可以通過傳入一個字符串參數來構建包裝類對象。如果希望獲得包裝類對象中包裝的基本類型變量,則可以使用包裝類提供的XxxValue()實例方法。自動裝箱與自
2、動拆箱JDk還提供了自動裝箱和自動拆箱。自動裝箱就是把一個基本類型的變量直接賦給對應的包裝類變量,自動拆箱則與之相反。包裝類還可以實現基本類型變量和字符串之間的轉換,除了Character之外的所有包裝類都提供了一個parseXxx(String s)靜態方法。如果將基本類型轉換為這符串,只需在后面加+ “”進行連接運算。Java 7對包裝類的增強Java 7為所有包裝類增加一個新方法: compare(x , y)的方法。該方法用于比較兩個包裝類實例,當xy,返回大于0的數;當x=y,返回0;否則返回小于0的數。對象的方法打印對象和toString方法:toString方法是系統將會輸出該對
3、象的“自我描述”信息,用以告訴外界對象具有的狀態信息。Object 類提供的toString方法總是返回該對象實現類的類名 + +hashCode值。=和equals比較運算符:=要求兩個引用變量指向同一個對象才會返回true。equals方法則允許用戶提供自定義的相等規則。Object類提供的equals方法判斷兩個對象相等的標準與=完全相同。因此開發者通常需要重寫equals方法。類成員在java類里只能包含Field,方法,構造器,初始化塊,內部類(接口、枚舉)等5種成員。 用static修飾的類成員屬于類成員,類Field既可通過類來訪問,也可以通過類的對 象來訪問。當通過對象來訪問類
4、屬性時,系統會在底層轉換為通過該類來訪問類 屬性。類成員規則類成員并不是屬于實例,它是屬于類本身的。只要類存在,類成員就存在。即使通過null對象來訪問類成員,程序也不會引發NullPointerException。類成員不能訪問實例成員。單例類如果一個類始終只能創建一個對象,稱為單例類。須符合以下幾個條件:1.我們把該類的構造器使用Private修飾,從而把該 類的所有構造器隱藏起來。2.則需要提供一個public方法作為該類的訪問點,用于創建該類的對象,且必須使用static修飾3.該類還必須緩存已經創建的對象,必須用static修飾final變量final修飾變量時,表示該變量一旦獲得
5、初始值之后就不可被改變。final既可修飾成員變量,也可以修飾局部變量。final修飾成員變量成員變量是隨類的初始化或對象初始化而初始化的。final修飾的成員變量必須由程序員指定初始值。對于類屬性而言,要么在靜態初始化中初始化,要么在聲明該屬性時初始化。對于實例屬性,要么在普通初始化塊中指定初始值。要么在定義時、或構造器中指定初始值。final修飾局部變量使用final修飾局部變量時既可以在定義時指定默認值,也可以不指定默認值。給局部變量賦初始值,只能一次,不能重復。final修飾基本類型和引用類型當使用final修飾基本數據類型變時,不能對其重新賦值,不能被改變。但對引用類型的變量而言,它
6、僅僅保存的是一個引用,final只能保證他的地址不變,但不能保證對象,所以引用類型完全可以改變他的對象。可執行“宏替換”的final變量 對一個final變量來說,不管它是類變量、實例變量,還是局部變量,只要該變量滿足3個條件,這個final變量就不再是一個變量,而是相當于一個直接量。使用final修飾符修飾;在定義該final變量時指定了初始值;該初始值可以在編譯時就被確定下來。final方法final 修飾的方法不可以被重寫。final 修飾的方法僅僅是不能重寫,但它完全可以被重載。final 類final 修飾的類不可以被繼承不可變的類不可變的類要滿足以下幾個條件:1.使用private
7、和final修飾符來修飾該類的屬性2.提供帶參數的構造器,用于根據傳入參數來初始化類里的屬性3.僅為該類的屬性提供getter方法,不要為該類的屬性提供setter方法,因為普通方法無法修改final修飾的屬性4.如有必要,重寫Object類中hashCode 和equals緩存實例的不可變類:如果程序經常需要使用不可變類的實例,則可對實例進行緩存。抽象方法和抽象類抽象方法和類都必須使用abstract來修飾,有抽象方法的類只能定義成抽象類,抽象里也可以沒有抽象方法。 抽象類不能被實例化,可以通過其子類給他賦值,普通類里有的抽象里也有,定義抽象方法只需在普通方法上增加abstract修飾符,并
8、把普通方法的方法體(也就是方法后花括號括起來的部分)全部去掉,并在方法后增加分號即可。抽象類的特征抽象類的特征:有得有失,得到了新能力,可以擁有抽象方法;失去了創建對象的能力。抽象類的作用抽象類代表了一種未完成的類設計,它體現的是一種模板。抽象類與模板模式。接口的概念接口定義的是多個類共同的行為規范,這些行為是與外部交流的通道,這就意味著接口里通常是定義一組公用的方法。接口體現了規范與實現分離的設計。接口的定義和類定義不同,定義接口不再用class關鍵字,而是使用interface關鍵字。語法如下:修飾符 interface接口名 extends 父接口1,父接口2 .零個到多個常量定義.零個
9、到多個抽象方法定義.零個到多個內部類、接口、枚舉定義.零個到多個默認方法或類方法定義.接口里的成分在定義接口時,接口里可以包含成員變量(只能是常量),方法(只能是抽象實例方法、類方法或默認方法),內部類(包括內部接口、枚舉類常量都是:public static final修飾方法都是:public abstract 修飾內部的類:public static接口的繼承接口的繼承和類繼承不一樣,接口完全支持多繼承,子接口擴展某個父接口將會獲得父接口的所有抽像方法,常量屬性,內部類和枚舉類定義。使用接口接口可以用于聲明引用類型的變量,但接口不能用于創建實例。當使用接口來聲明引用類型的變量時,這個引用
10、類型的變量必須引用到其實現類的對象。一個類可以實現一個或多個接口,繼承使用extends關鍵字,實現接口則使用implements關鍵字。實現接口一個類實現了一個或多個接口之后,這個類必須完全實現這些接口里所定義的全部抽象方法(也就是重寫這些抽象方法);否則,該類將保留從父接口那里繼承到的抽象方法,該類也必須定義成抽象類。 接口和抽象類的相似性接口和抽象類都不能被實例化,它們都位于繼承樹的頂端,用于被其他類實現和繼承。接口和抽象類都可以包含抽象方法,實現接口或繼承抽象類的普通子類都必須實現這些抽象方法。接口與抽象類的區別接口里只能包含抽象方法,不同包含已經提供實現的方法;抽象類則完全可以包含普
11、通方法。接口里不能定義靜態方法;抽象類里可以定義靜態方法。接口里只能定義靜態常量屬性,不能定義普通屬性;抽象類里則既可以定義普通屬性,也可以定義靜態常量屬性。接口不包含構造器;抽象類里可以包含構造器,抽象類里的構造器并不是用于創建對象,而讓其子類調用這些構造器來完成屬于抽象類的初始化操作。接口里不能包含初始化塊,但抽象類則完全可以包含初始化塊。一個類最多只能有一個直接父類,包括抽象類;但一個類可以直接實現多個接口,通過實現多個接口可以彌補Java單繼承的不足。面向接口編程接口體現了規范與實現分離的原則。充分利用接口可以很好地提高系統的可擴展性和可維護性。接口與簡單工廠模式、命令模式等。內部類我
12、們把一個類放在另一個類的內部定義,這個定義在其他類內部的類就被稱為內部類,有的也叫嵌套類,包含內部類的類也被稱為外部類有的也叫宿住類。內部類提供了更好的封裝,內部類成員可以直接訪問外部類的私有數據,因為內部類被當成其他外部類成員。匿名內部類適合用于創建那些僅需要一次使用的類。非靜態內部類定義內部類非常簡單,只要把一個類放在另一個類內部定義即可。當在非靜態內部類的方法內訪問某個變量時,系統優先在該方法內查找是否存在該名字的局部變量,如果存在該名字的局部變量,就使用該變量,如果不存在,則到該方法所在的內部類中查找是否存在該名字的屬性,如果存在則使用該屬性。總之,第一步先找局部變量,第二步,內部類的
13、屬性,第三步。外部類的屬性。靜態內部類 如果用static修飾一個內部類,稱為靜態內部類。靜態內部類可以包含靜態成員,也可以包含非靜態成員。所以靜態內部類不能訪問外部類的實例成員,只能訪問外部類的類成員。靜態內部類的對象寄存在外部類里,非靜態內部類的對象寄存在外部類實例里使用內部類1.在外部類內部使用內部類不要在外部類的靜態成員中使用非靜態內部類,國為靜態成員不能訪問非靜態成員。 2.在外部類以外使用非靜態內部類。private 修飾的內部類只能在外部類內部使用。在外部類以外的地方使用內部類,內部類完整的類名應該OuterClass.InnerClass.在外部類以外的地方使用非靜態內部類創建
14、對象的語法如下:OuterInstance.new InnerConstructor()在外部類以外的地方使用靜態內部類創建對象的語法如下:new OuterClass.InnerConstructer();局部內部類如果把一個內部類放在方法里定義,這就是局部內部類,僅僅在這個方法里有效。局部內部類不能在外部類以外的地方使用,那么局部內部類也不能使用訪部控制符和static修飾匿名內部類匿名內部類適合創建那種只需要一次使用的類,定義匿名內部類的語法格式如下:new 父類構造器(實例列表) |實現接口) /匿名內部類的 類體部分匿名內部類不能是抽象類,匿名內部類不能定義構造器。Lambda表達式
15、入門Lambda表達式主要作用就是代替匿名內部類的繁瑣語法。它由三部分組成:形參列表。形參列表允許省略形參類型。如果形參列表中只有一個參數,甚至連形參列表的圓括號也可以省略。箭頭(-),必須通過英文等號和大于符號組成。代碼塊。如果代碼塊只有包含一條語句,Lambda表達式允許省略代碼塊的花括號,如果省略了代碼塊的花括號,這條語句不要用花括號表示語句結束。Lambda代碼塊只有一條return語句,甚至可以省略return關鍵字。Lambda表達式需要返回值,而它的代碼塊中僅有一條省略了return的語句,Lambda表達式會自動返回這條語句的值。Lambda表達式與函數式接口 如果采用匿名內部
16、類語法來創建函數式接口的實例,只要實現一個抽象方法即可,在這種情況下即可采用Lambda表達式來創建對象,該表達式創建出來的對象的目標類型就是這個函數式接口。Lambda表達式有如下兩個限制:Lambda表達式的目標類型必須是明確的函數式接口。Lambda表達式只能為函數式接口創建對象。Lambda表達式只能實現一個方法,因此它只能為只有一個抽象方法的接口(函數式接口)創建對象。 為了保證Lambda表達式的目標類型是一個明確的函數式接口,可以有如下三種常見方式:將Lambda表達式賦值給函數式接口類型的變量。將Lambda表達式作為函數式接口類型的參數傳給某個方法。使用函數式接口對Lambd
17、a表達式進行強制類型轉換。方法引用與構造器引用 種類示例說明對應的Lambda表達式引用類方法類名:類方法函數式接口中被實現方法的全部參數傳給該類方法作為參數。(a,b,.) - 類名.類方法(a,b, .)引用特定對象的實例方法特定對象:實例方法函數式接口中被實現方法的全部參數傳給該方法作為參數。(a,b, .) - 特定對象.實例方法(a,b, .)引用某類對象的實例方法類名:實例方法函數式接口中被實現方法的第一個參數作為調用者,后面的參數全部傳給該方法作為參數。(a,b, .) -a.實例方法(b, .)引用構造器類名:new函數式接口中被實現方法的全部參數傳給該構造器作為參數。(a,b
18、, .) -new 類名(a,b, .)Lambda表達式與匿名內部類 Lambda表達式與匿名內部類存在如下相同點:Lambda表達式與匿名內部類一樣,都可以直接訪問“effectively final”的局部變量,以及外部類的成員變量(包括實例變量和類變量)。Lambda表達式創建的對象與匿名內部類生成的對象一樣, 都可以直接調用從接口繼承得到的默認方法。 Lambda表達式與匿名內部類主要存在如下區別:匿名內部類可以為任意接口創建實例不管接口包含多少個抽象方法,只要匿名內部類實現所有的抽象方法即可。但Lambda表達式只能為函數式接口創建實例。匿名內部類可以為抽象類、甚至普通類創建實例,
19、但Lambda表達式只能為函數式接口創建實例。匿名內部類實現的抽象方法的方法體允許調用接口中定義的默認方法;但Lambda表達式的代碼塊不允許調用接口中定義的默認方法。 手動實現枚舉類可以采用如下設計方式: 通過private將構造器隱藏起來。把這個類的所有可能實例都使用public static final屬性來保存。如果有必要,可以提供一些靜態方法,允許其他程序根據特定參數來獲取與之匹配實例。JDK 5新增的枚舉支持J2SE1.5新增了一個enum關鍵字,用以定義枚舉類。正如前面看到,枚舉類是一種特殊的類,它一樣可以有自己的方法和屬性,可以實現一個或者多個接口,也可以定義自己的構造器。一個
20、Java源文件中最多只能定義一個public訪問權限的枚舉類,且該Java源文件也必須和該枚舉類的類名相同。枚舉類枚舉類可以實現一個或多個接口,使用enum定義的枚舉類默認繼承了java.lang.Enum類,而不是繼承Object類。其中java.lang.Enum類實現了java.lang.Serializable和java.lang. Comparable兩個接口。枚舉類的構造器只能使用private訪問控制符,如果省略了其構造器的訪問控制符,則默認使用private修飾;如果強制指定訪問控制符,則只能指定private修飾符。枚舉類的所有實例必須在枚舉類中顯式列出,否則這個枚舉類將永遠
21、都不能產生實例。列出這些實例時系統會自動添加public static final修飾,無需程序員顯式添加。所有枚舉類都提供了一個values方法,該方法可以很方便地遍歷所有的枚舉值。 枚舉類的屬性、方法和構造器 枚舉類也是一種類,只是它是一種比較特殊的類,因此它一樣可以使用屬性和方法。枚舉類通常應該設計成不可變類,也就說它的屬性值不應該允許改變,這樣會更安全,而且代碼更加簡潔。為此,我們應該將枚舉類的屬性都使用private final修飾。一旦為枚舉類顯式定義了帶參數的構造器,則列出枚舉值時也必須對應地傳入參數。 實現接口的枚舉類枚舉類也可以實現一個或多個接口。與普通類實現一個或多個接口完
22、全一樣,枚舉類實現一個或多個接口時,也需要實現該接口所包含的方法。 如果需要每個枚舉值在調用同一個方法時呈現出不同的行為方式,則可以讓每個枚舉值分別來實現該方法,每個枚舉值提供不同的實現方式,從而讓不同枚舉值調用同一個方法時具有不同的行為方式。 包含抽象方法的枚舉類可以在枚舉類里定義一個抽象方法,然后把這個抽象方法交給各枚舉值去實現即可。枚舉類里定義抽象方法時無需顯式使用abstract關鍵字將枚舉類定義成抽象類,但因為枚舉類需要顯式創建枚舉值,而不是作為父類,所以定義每個枚舉值時必須為抽象方法提供實現,否則將出現編譯錯誤。垃圾回收機制垃圾回收機制只負責回收堆內存中對象,不會回收任何任何物理資
23、源(例如數據庫連接,網絡IO等資源)。程序無法精確控制垃圾回收的運行,垃圾回收會在合適時候進行垃圾回收。當對象永久性地失去引用后,系統就會在合適時候回收它所占的內存。垃圾回收機制回收任何對象之前,總會先調用它的finalize方法,該方法可能使該對象重新復活(讓一個引用變量重新引用該對象),從而導致垃圾回收機制取消回收對象在內存中的狀態 激活狀態:當一個對象被創建后,有一個以上的引用變量引用它。則這個對象在程序中處于激活狀態,程序可通過引用變量來調用該對象的屬性和方法。去活狀態:如果程序中某個對象不再有任何引用變量引用它,它就進入了去活狀態。在這個狀態下,系統的垃圾回收機制準備回收該對象所占用
24、的內存,在回收該對象之前,系統會調用所有去活狀態對象的finalize方法進行資源清理,如果系統在調用finalize方法重新讓一個引用變量引用該對象,則這個對象會再次變為激活狀態;否則該對象將進入死亡狀態。死亡狀態:當對象與所有引用變量的關聯都被切斷,且系統會調用所有對象的finalize方法依然沒有使該對象變成激活狀態,那這個對象將永久性地失去引用,最后變成死亡狀態。只有當一個對象處于死亡狀態時,系統才會真正回收該對象所占有的資源。 強制垃圾回收 強制系統垃圾回收有如下兩個方法:調用System類的gc()靜態方法:System.gc()調用Runtime對象的gc()實例方法:Runtime.getRuntime().gc()finalize方法 finalize方法有如下四個特點:永遠不要主動調用某個對象的finalize方法,該方法應交給垃圾回收機制調用。finalize方法的何時被調用,是否被調用具有不確定性。不要把finalize方法當成一定會被執行的方法。當JVM執行去活對象
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 吉林省四平市鐵西區2024-2025學年七年級下學期期末練習生物試卷(含答案)
- 財務會計專員崗位職責要求
- 幼兒園常見傳染病預防控制課件
- 財務會計年終工作總結范文(10篇)
- 土地復墾措施及其規劃設計教學課件
- 道德與法治(海南卷)(考試版A3)
- 2025年android音視頻開發面試!這么香的技術還不快點學起來Android篇-andoid視頻秒開面試
- 2025年Android事件分發機制:面試官你坐啊
- 2024-2025學年下學期高一生物滬科版期末必刷常考題之生物進化論在不斷發展
- 部編版五年級上冊第一單元《白鷺》教案
- 2025年佛山市南海區民政局招聘殘疾人專項工作人員題庫帶答案分析
- 2025年涼山昭覺縣委社會工作部選聘社區工作者題庫帶答案分析
- 2024北京高考一分一段表
- 公寓中介渠道管理制度
- 出租房合同責任免除協議書
- 中國科技課件
- 2025年希臘語A2等級考試官方試卷
- 地理-2025年中考終極押題猜想(全國卷)
- 2024年廣東省新會市事業單位公開招聘輔警考試題帶答案分析
- 廣安2025年上半年廣安市岳池縣“小平故里英才”引進急需緊缺專業人才筆試歷年參考題庫附帶答案詳解
- 派特靈用于女性下生殖道人乳頭瘤病毒感染及相關疾病專家共識(2025年版)解讀
評論
0/150
提交評論