8 面向對象之抽象類+介面+內部類
1 final關鍵字
用法:
1)使用final修飾變數,該變數就變成常量,在運行的過程中無法重新賦值。
2)使用final修飾方法,該方法無法在子類中重寫
3)使用final修飾的類,不能被繼承(派生其他子類)
JDK中常見的final修飾的類: java.lang.Math java.lang.String
2 抽象類和抽象方法
抽象方法:使用abstract修飾的方法。特徵: 沒有方法體。
抽象類:使用abstract修飾的類。
特點:
1)抽象類中可以包含抽象方法。包含抽象方法的類一定是抽象類,但抽象類中不一定包含抽象方法。
2)抽象類中可以存在屬性,方法,構造方法。
3)抽象類不能實例化(不能使用new關鍵字創建對象),但可以在子類調用構造方法。
作用: 通過抽象類,可以避免子類設計的隨意性。
抽象類就是為被繼承而生的。子類一旦繼承了抽象類,就必須重寫抽象類中的抽象方法,或者子類本身也是一個抽象類。
3 設計模式
1)單例模式
單例模式:保證一個類只能有一個實例。
特徵:構造方法私有化,提供一個靜態的方法獲取實例
常見的實現方法: ①餓漢式:使用時再創建對象。②懶漢式:載入時創建對象。
2)簡單工廠模式
簡單工廠模式又叫靜態工廠方法,可以通過其生成產品,可以降低因生成生成產品而導致的耦合性過強。(解耦合)
工廠模式的命名:xxxFactory--->生成xxx
如何實現工廠模式:
1.編寫父類和子類或介面和實現類
2.編寫靜態的工廠方法,返回值類型為父類或介面。--->多態
3.根據用戶的需求動態創建子類的實例,並返回。
4 介面
4.1介面定義和特點
定義: 使用interface關鍵字
[修飾符] interface 介面名 [extends 父介面1,父介面2...]{
//常量的聲明
//方法的聲明
}
介面成員的特點:
1)介面中所有的成員變數是常量,默認修飾符為public static final
2)介面中所有的方法都是抽象方法,默認修飾符為:public abstract
3)介面不能實例化,介面不能構造方法(抽象類不能實例化,但可以有構造方法)
4)java類是單繼承,但介面可以是多繼承
5)一個非抽象類實現實現介面,必須重寫介面中的抽象方法,抽象類實現介面可以重寫部分抽象方法。
6)一個類只能繼承一個父類,但可以實現多個介面
如果一個類繼承父類並實現了介面如何編寫?
[修飾符] class 類名 [extends 父類名 implements 介面名1,介面名2..]{
}
public class E extends D implements A,B{
}
4.2 Comparable介面
java.lang.Comparable介面:此介面強行對實現它的每個類的對象進行整體排序。
排序規則在compareTo方法中定義。當調用java.util.Arrays類中sort(Object[] objs)時,程序會調用compareTo方法對對象進行比較,
如果該方法返回正整數(1)時,代表當前對象大於待比較對象;如果返回0,代表當前對象等於待比較對象;如果該方法返回負整數(-1)時,代表當前對象小於待比較對象。
實現思路:
1)實現Comparable介面,並重新其compareTo方法
2)在compareTo方法中定義比較規則。返回值應該是正整數,零和負整數。
3)在調用Arrays.sort(Object[] objs)方法的過程中,sort方法的內部對調用compareTo方法進行比較。
4.3 Comparator介面
java.util.Comparator介面:比較器
int compare(Object o1, Object o2):比較用來排序的兩個參數。根據第一個參數小於、等於或大於第二個參數分別返回負整數、零或正整數。
java.util.Arrays類 sort(Object[] objs,Comparator c):按照指定的比較器對指定數組進行排序。
5 內部類
定義:將一個類定義置入另一個類定義中就叫作「內部類」
特點:
1)內部類可以訪問外部的成員,但外部類不能訪問內部的成員。
2)外部類的修飾符只有兩種:public和默認,而內部類的修飾符可以是public,protected,默認,private
3)內部類成員只有在內部類的範圍之內是有效的。
4)用內部類定義在外部類中不可訪問的屬性。這樣就在外部類中實現了比外部類的private還要小的訪問許可權。
成員內部類:將一個類作為另外一個類的成員。
靜態內部類:使用static修飾的內部類。靜態內部只能訪問外部的靜態成員。
方法內部類:在方法中定義的內部類。如果方法內部類中需要訪問方法中局部變數,該局部變數必須使用final修飾。
匿名內部類:沒有名稱的內部類,可以實現一個介面或繼承一個父類。適合創建那種只需要一次使用的類,不能重複使用。匿名內部類要使用外部類的局部變數,必須使用final修飾該局部變數。
6 java垃圾回收機制
Java語言不需要程序員直接控制內存回收,是由JRE在後台自動回收不再使用的內存,程序員無法精確控制,稱為垃圾回收機制(Garbage Collection)。
GC機制的優點:
1)提高編程效率,擯棄了C/C++中的指針,避免因遺忘釋放內存而導致的內存泄漏。
2)保證了程序的完整性。
3)降低性能開銷。
GC原理:JVM中有一個線程專門用於回收堆內存中不使用對象,常用的方法:
1)定時掃描堆中不使用的對象
2)通過計數控制回收時機。
垃圾回收機制只回收JVM堆內存里的對象空間,對其他物理連接,比如資料庫連接、輸入流輸出流、Socket連接無能為力。
垃圾回收發生具有不可預知性,程序無法精確控制垃圾回收機制執行。
可以將對象的引用變數設置為null,暗示垃圾回收機制可以回收該對象。
程序員可以通過System.gc或者Runtime.getRuntime.gc來通知系統進行垃圾回收,會有一些效果,但是系統是否進行垃圾回收依然不確定。
垃圾回收機制回收任何對象之前,總會先調用它的finalize方法(如果覆蓋該方法,讓一個新的引用變數重新引用該對象,則會重新激活對象)。
永遠不要主動調用某個對象的finalize方法,應該交給垃圾回收機制調用。
※Docker-compose實戰——Django+PostgreSQL
※node.js入門系列(一)——Node.js簡介
※HTTP權威指南-HTTP報文
TAG:科技優家 |
※類名、抽象類名、介面作為形式參數
※抽象與具象的遊走!版式設計的點線面
※拍出抽象大片的5個訣竅!
※穿越時空的照片之旅:帶你領略大腦內部的微觀之美,特別抽象
※凍結在時空中的抽象
※走進抽象藝術,領略抽象之美
※抽象與符號之外:張隆的個體性創作
※PS教程/抽象的顆粒貓
※權志龍設計抽象禮盒賣出千元高價,裡面的手鏈竟是金屬的!
※漢字造型設計!點線面的抽象化!
※上海抽象畫會21位畫家吹響「抽象藝術結集號」
※蒙德里安的抽象世界
※在物與我之間的抽象
※PS配合AI軟體製作抽象的線條圖形效果
※抽象派大師畢加索為其3位「情人」所畫的3幅作品
※手工布藝DIY教程-抽象風格衍縫餐墊
※PS製作抽象特效的矢量背景圖設計
※年輕人的卧室,以抽象概念著稱、詭異中透露著個性之美
※荷蘭平面設計師Coen Pohl將荷蘭最具代表性的建築塔抽象成線條簡潔、幾何感強烈的平面圖像,你能認出其中幾幅呢? ????
※01.27展覽預告︱「抽象+」 Abstract Plus 抽象繪畫在中國的新可能性