java基础-2
面向對象
定義
面向對象是一種思維方式,相對于面向過程?面向過程注重流程中的每一步,清楚流程中的每一個細節?面向對象注重的是對象,有了對象就有對象的一屆?自己動手做--面向過程,找其他人做面向對象?面向對象和面向過程各有優劣,復雜事務面向對象,簡單事務面向過程?面向對象基于面向過程
類與對象的關系
類是對象的概括/抽取?通過new關鍵字創建對象,可以給對象的屬性賦值,也可調用方法
對象的內存存儲
屬性存在堆中?對象存在棧中
成員變量和局部變量??作用范圍不同?內存位置不同?生命周期不同
構造方法?特點;與類名相同沒有返回值?作用;用于創建對象?可以重載
this關鍵字?代替本類對象調用本類中的屬性和方法?代表本類在活動的對象的引用--即虛擬對象?利用this調用對應的構造方法時必須放在構造方法的首行構造代碼塊?初始代碼塊--用{}包起來的代碼?無論用哪個構造方法創建對象,它都會在構造方法前執行一次局部代碼塊?方法中用{}包起來的代碼?提高棧內存的利用率
面向對象的特征?封裝?權限修飾符?public?protected?默認?private?方法屬性的私有化?內部類?繼承?利用extends關鍵字?子類通過繼承可以使用父類中的一部分方法和屬性?java單繼承?多繼承比單繼承更好的提高代碼復用性?單繼承更能明確方法的調用?單繼承提高了代碼的復用性,也避免了方法調用產生的混亂?super關鍵字?在子類中表示父類對象的引用,一個虛擬對象?子類通過super來調用父類的方法和 屬性?super語句必須放在子類構造的第一行?多態?編譯時多態?方法的重載是行為的多態?重載指的是在同一個類中存在方法名一致而參數列表不同的方法。參數列表不同指的是參數的 個數或者是參數類型不同。重載只和方法簽名有關,和修飾符、返回值類型、異常都沒有關系。重載本身是一種編譯時多態。?運行時多態-基于繼承?向上造型?方法的重寫?在父子類存在方法簽名一致的非靜態方法?兩等兩小一大?重寫指的是在父子類中存在方法簽名相同的非靜態方法。在構成重寫的時候,子類方法的權限修飾符的范圍要比父類權限修飾符的范圍大或者保持一致。子類在重寫父類方法的時候,如果父類方法返回值類型是基本類型或者是void,那么子類方法的返回值類型要保持一致。如果父類方法返回值類型是引用類型,那么子類方法返回值類型要和父類一致或者是父類方法返回值類型的子類。子類在重寫方法的時候所拋出的編譯時異常不能超過父類編譯時異常的范圍。重寫本身是一種運行時多態。?抽象?abstract修飾符?修飾方法;抽象方法,子類繼承后必須重寫抽象方法?可以被重載?不能被static/final/private修飾?如果抽象方法用默認權限,那么子類必須與父類同包?修飾類,抽象類;抽象方法存在的類必須是抽象類?不能創建對象?有構造方法?不能用final修飾?可以有其他方法和屬性,不一定有抽象方法
static-靜態?靜態變量/類變量?類是加載到方法區中?類在第一次使用時加載到方法區,加載之后不會移除?靜態方法/類方法?隨著類加載到方法區中,先于對象存在?用類名調用靜態方法?在靜態方法中不可以直接使用本類中的非靜態屬性和方法?不可以定義靜態變量-靜態方法調用才在棧中執行?可以重載?可以繼承?不可以被重寫?父子類方法中可以存在方法簽名一致的靜態方法-構成隱藏?父子類中方法簽名一致時要么都是非靜態(重寫),要么都是靜態(隱藏)?靜態代碼塊?用static{}定義的代碼塊?在類加載的時候執行一次?執行順序:父類靜態->子類靜態->父類非靜態->子類非靜態?所有的靜態只能定義在類中不能定義到代碼塊中
final修飾符?修飾數據; 常量定義之后不可改變?修飾方法;最終方法,不能被重寫/隱藏,可以重載,可以被繼承?修飾類;最終類,不能被繼承
接口?一個類的方法都是抽象方法,就可以將這個類聲明為一個接口?用interface定義--jdk1.8之前接口中都是抽象方法?接口不是類--不能創建對象,也沒有構造方法?通過implement關鍵字讓類實現接口-類實現接口要重寫接口中的所有抽象方法?java中單繼承多實現-一個類只能繼承一個父類,可以實現多個接口?接口可以繼承多個接口,接口之間多繼承?jdk1.8對接口的改進?接口中的默認方法?允許定義實體方法-默認方法和靜態方法?實體方法要用default修飾?lambda表達式?當接口中只要一個抽象方法時可以用lambda表達式創建接口對象?(參數列表)->{方法體}?方法體只有一句,可以省略{}可return不寫,這一句的執行結果默認為返回值?定義表達式的時候參數類型可以省略不寫?如果一個接口在只有一個抽象方法,那么這個接口可以用@FunctionalInterface 聲明為函數式接口
內部類?方法內部類?成員內部類?靜態內部類?匿名內部類?在類中定義類和接口,在接口在定義類和接口
包?package?import?java.lang默認導入?定義包的時候盡量不要使用java/javax/org
垃圾分代回收機制?垃圾回收針對堆內存?垃圾回收是自動的由垃圾回收器GC在堆內存使用率超過70%時自動回收?堆內存?新生代?伊甸園區?幸存區?minor GC初代回收?老生代?
轉載于:https://www.cnblogs.com/Striverchen/p/10519483.html
總結
- 上一篇: P1351 联合权值
- 下一篇: 使用Xpath