1. 程式人生 > >java面向對象的註意點1

java面向對象的註意點1

向上轉型 永遠 垃圾 new 集合 pri 角度 共享 變量

面向對象思想特點:

    * a:是一種更符合我們思想習慣的思想
    * b:可以將復雜的事情簡單化
    * c:將我們從執行者變成了指揮者
    * 角色發生了轉換

面向對象開發,設計以及特征:

    * A:面向對象開發
    * 就是不斷的創建對象,使用對象,指揮對象做事情。
    * B:面向對象設計
    * 其實就是在管理和維護對象之間的關系。
    * C:面向對象特征
    * 封裝(encapsulation)
    * 繼承(inheritance)
    * 多態(polymorphism)

類和對象的概念:

    * a:類:是一組相關的屬性和行為的集合
    * b:對象:是該類事物的具體體現
    * c:舉例:
    * 類 學生
    * 對象 具體的某個學生就是一個對象

成員變量和局部變量的區別: 

    * A:在類中的位置不同
    * 成員變量:在類中方法外
    * 局部變量:在方法定義中或者方法聲明上
    * B:在內存中的位置不同
    * 成員變量:在堆內存(成員變量屬於對象,對象進堆內存)
    * 局部變量:在棧內存(局部變量屬於方法,方法進棧內存)
    * C:生命周期不同
    * 成員變量:隨著對象的創建而存在,隨著對象的消失而消失
    * 局部變量:隨著方法的調用而存在,隨著方法的調用完畢而消失
    * D:初始化值不同
    * 成員變量:有默認初始化值
    * 局部變量:沒有默認初始化值,必須定義,賦值,然後才能使用。

    * 註意事項:
    * 局部變量名稱可以和成員變量名稱一樣,在方法中使用的時候,采用的是就近原則。

匿名對象的概述和應用:           

    * A:什麽是匿名對象
    * B:匿名對象應用場景
    * a:調用方法,僅僅只調用一次的時候。
    * 那麽,這種匿名調用有什麽好處嗎?
    * 節省代碼
    * 註意:調用多次的時候,不適合。匿名對象調用完畢就是垃圾。可以被垃圾回收器回收。
    * b:匿名對象可以作為實際參數傳遞

private關鍵字的概述和特點: 

 private關鍵字特點
  * a:是一個權限修飾符
  * b:可以修飾成員變量和成員方法
  * c:被其修飾的成員只能在本類中被訪問

構造方法的重載及註意事項:

    * B:構造方法註意事項
    * a:如果我們沒有給出構造方法,系統將自動提供一個無參構造方法。
    * b:如果我們給出了構造方法,系統將不再提供默認的無參構造方法。
    * 註意:這個時候,如果我們還想使用無參構造方法,就必須自己給出。建議永遠自己給出無參構造方法
    * C:給成員變量賦值的兩種方式
    * a:setXxx()方法
    * b:構造方法

static關鍵字的特點:

    * A:static關鍵字的特點
    * a:隨著類的加載而加載
    * b:優先於對象存在
    * c:被類的所有對象共享
    * 舉例:咱們班級的學生應該共用同一個班級編號。
    * 其實這個特點也是在告訴我們什麽時候使用靜態?
    * 如果某個成員變量是被所有對象共享的,那麽它就應該定義為靜態的。
    * 舉例:
    * 飲水機(用靜態修飾)
    * 水杯(不能用靜態修飾)
    * d:可以通過類名調用
    * 其實它本身也可以通過對象名調用。
    * 推薦使用類名調用。
    * 靜態修飾的內容一般我們稱其為:與類相關的,類成員

static的註意事項:

   * A:static的註意事項
    * a:在靜態方法中是沒有this關鍵字的
    * 如何理解呢?
    * 靜態是隨著類的加載而加載,this是隨著對象的創建而存在。
    * 靜態比對象先存在。
    * b:靜態方法只能訪問靜態的成員變量和靜態的成員方法
    * 靜態方法:
    * 成員變量:只能訪問靜態變量
    * 成員方法:只能訪問靜態成員方法
    * 非靜態方法:
    * 成員變量:可以是靜態的,也可以是非靜態的
    * 成員方法:可是是靜態的成員方法,也可以是非靜態的成員方法。
    * 簡單記:
    * 靜態只能訪問靜態。

靜態變量和成員變量的區別:   

    * 靜態變量也叫類變量 成員變量也叫對象變量
    * A:所屬不同
    * 靜態變量屬於類,所以也稱為為類變量
    * 成員變量屬於對象,所以也稱為實例變量(對象變量)
    * B:內存中位置不同
    * 靜態變量存儲於方法區的靜態區
    * 成員變量存儲於堆內存
    * C:內存出現時間不同
    * 靜態變量隨著類的加載而加載,隨著類的消失而消失
    * 成員變量隨著對象的創建而存在,隨著對象的消失而消失
    * D:調用不同
    * 靜態變量可以通過類名調用,也可以通過對象調用
    * 成員變量只能通過對象名調用

多態中向上轉型和向下轉型:

    * 父類是Animal,子類是Cat
    * Animal a = new Cat();向上轉型
    * Cat c = new Animal();錯誤的
    * Cat c = (Cat)a;向下轉型

抽象類的概述及其特點:

    * B:抽象類特點
    * a:抽象類和抽象方法必須用abstract關鍵字修飾
    * abstract class 類名 {}
    * public abstract void eat();
    * b:抽象類不一定有抽象方法,有抽象方法的類一定是抽象類
    * c:抽象類不能實例化那麽,抽象類如何實例化呢?
    * 按照多態的方式,由具體的子類實例化。其實這也是多態的一種,抽象類多態。
    * d:抽象類的子類
    * 要麽是抽象類
    * 要麽重寫抽象類中的所有抽象方法

抽象類的成員特點: 

  * A:抽象類的成員特點
    * a:成員變量:既可以是變量,也可以是常量。
    * b:構造方法:有。
    * 用於子類訪問父類數據的初始化。
    * c:成員方法:既可以是抽象的,也可以是非抽象的。

  B:抽象類的成員方法特性:
    * a:抽象方法 強制要求子類做的事情。
    * b:非抽象方法 子類繼承的事情,提高代碼復用性。

接口的概述及其特點:

  * A:接口概述
    * 從狹義的角度講就是指java中的interface
    * 從廣義的角度講對外提供規則的都是接口
  * B:接口特點
    * a:接口用關鍵字interface表示
    * interface 接口名 {}
    * b:類實現接口用implements表示
    * class 類名 implements 接口名 {}
    * c:接口不能實例化
    * 那麽,接口如何實例化呢?
    * 按照多態的方式來實例化。
    * d:接口的子類
    * a:可以是抽象類。但是意義不大。
    * b:可以是具體類。要重寫接口中的所有抽象方法。(推薦方案)

接口的成員特點:

  * A:接口成員特點
    * 成員變量;只能是常量,並且是靜態的。
    * 默認修飾符:public static final
    * 建議:自己手動給出。
    * 構造方法:接口沒有構造方法。
    * 成員方法:只能是抽象方法。
    * 默認修飾符:public abstract
    * 建議:自己手動給出。

類與類,類與接口,接口與接口的關系:

    * A:類與類,類與接口,接口與接口的關系
    * a:類與類:
    * 繼承關系,只能單繼承,可以多層繼承。
    * b:類與接口:
    * 實現關系,可以單實現,也可以多實現。
    * 並且還可以在繼承一個類的同時實現多個接口。
    * c:接口與接口:
    * 繼承關系,可以單繼承,也可以多繼承

抽象類和接口的區別:

  * A:成員區別
    * 抽象類:
    * 成員變量:可以變量,也可以常量
    * 構造方法:有
    * 成員方法:可以抽象,也可以非抽象
    * 接口:
    * 成員變量:只可以常量
    * 成員方法:只可以抽象

  * B:關系區別
    * 類與類
    * 繼承,單繼承
    * 類與接口
    * 實現,單實現,多實現
    * 接口與接口
    * 繼承,單繼承,多繼承

  * C:設計理念區別
    * 抽象類 被繼承體現的是:”is a”的關系。抽象類中定義的是該繼承體系的共性功能。
    * 接口 被實現體現的是:”like a”的關系。接口中定義的是該繼承體系的擴展功能。

java面向對象的註意點1