java初學第五課之面上對象、構造方法 之內部類


UML類圖

UML  Unified Modeling Language (UML)又稱統一建模語言或標准建模語言

 

在一個類中

     屬性表示這類事物的性質(描述它的數據)

     方法表示這類事物的功能(用代碼實現功能就意味着寫流程)

 

 

 

可見性

   Java中默認的可見性是包內可見

   Private 將可見性限制在本類內部,在類的外部,即使同一個包中也不能訪問

   Public 將可見性完全放開,所有地方都可以訪問

   Protected 本包和子類可見

 

可見性是語言和編譯器和JVM級別的,這些信息保存在類的元數據中

 

類的元數據:

      類的全名

      類中的成員名

           如果方法則包含參數/返回值等詳細信息

方法代碼的位置(內存地址)

 

程序啟動(此時還沒有調用main方法)

      Java/javaw一開始運行的時候(此時還沒有調用main方法)

      加載類(.class,字節碼)並保存在代碼區

      把類中的靜態成員/數據初始化到靜態區

 

找到main方法並調用

      在棧(Stack)中產生main方法的棧幀

       Circle  c =  New Circle()

      會在堆(heap)區為c對象分配一塊內存空間

      調用Circle的構造函數(沒有定義的話會自動生成一個)

      構造函數會初始化實例屬性(沒有指定值的話就初始化為0

      對象初始化完畢后,棧幀中會有一個局部變量c指向這個對象

 

 

 

實例屬性和靜態屬性的理解與區別

   實例屬性:

1.每個對象都有自己單獨的一份實例屬性,實例屬性的數據保存在堆區。

2.隨着對象的創建而產生,可以隨時創建對象。

3.會隨垃圾回收清理掉,從而釋放它占據的內存空間

 

   靜態屬性

1.一個類只有一份靜態屬性,無論創建多少個對象,靜態數據只有一份。靜態數據存放在靜態區。

2.類通常在啟動時加載,在類加載時被初始化,通過反射才能在運行過程中加載新類。

3.一旦加載就一直存在。

   

實例方法和靜態方法的理解與區別

實例方法

1.在實例方法中訪問實例屬性,相當於this.屬性名,在本類中this可省略

2.在實例方法中默認的上下文環境是this,也就是當前對象

3.在實例方法中可以訪問靜態屬性,相當於 類名.屬性名,在本類中類名可省略

 

靜態方法

1.在靜態方法中可以訪問靜態屬性,相當於 類名.屬性名,在本類中類名可省略

2.在靜態方法中不能使用this,也就是不能this.屬性名,訪問實例屬性

 

static void Count() {

PI = 3;

//this.radius =5;

}

      

 

 

 

構造方法 Constructor

    1.構造方法與類名相同,沒有返回值,連void都沒有

    2.具有可見性

3 .不寫時,編譯器默認生成一個無參構造方法

    4.將所有實例屬性初始化為0

5.如果程序編寫了一個構造方法,而不再自動生成構造方法

 

6.無參構造方法

      1>無參構造方法可以方便地創建對象

            無論是人工創建還是通過反射創建都很方便

      2>無參構造方法創建的對象,屬性值要么是0,要么是n

通常在使用之前還需要再次給屬性賦一個有用的值

 

   java中有一個概念---bean

     bean類要求有一個無參構造方法

     可以使用工具自動創建對象

 

1.構造器必須與類同名(如果一個源文件中有多個類,那么構造器必須與公共類同名)

2.每個類可以有一個以上的構造器

3.構造器可以有0個、1個或1個以上的參數

4.構造器沒有返回值

5.構造器總是伴隨着new操作一起調用

 

Getter/Setter訪問器方法

目的是不讓屬性直接暴露出來,而是通過方法(getter/setter)間接地訪問屬性

 好處是:

    可以控制只讀、只寫

    還可以在賦值時進行轉換、驗證等操作

    可以在獲取值時進行轉換或修改

 

 

 

 

繼承

   沒有指定父類,默認都從Object類繼承

   使用extends關鍵字可以指定父類

 

  如果要覆蓋或重寫父類的方法,最好標記@Override注解(Annotation

注解是可以附加到類元數據上的對象

   反射是獲取類元數據信息的編程接口

 

抽象類

abstract標記

不需要實例化,只為繼承而存在

 

抽象方法

    不為調用,只為繼承

     abstract標記,沒有方法體!

抽象類中既可以有抽象方法也可以有非抽象方法!

 

在繼承體系中子類可以通過super關鍵字訪問父類

    調用父類構造方法

         Super()

    調用本類構造方法

         This()

訪問父類的屬性

       Super.屬性名

 調用父類的方法

       Super.方法名()

 

 

 

如果父類有無參構造方法,子類可以不顯式調用super(),如果沒有無參構造方法,必須手動顯式調用super(xxx),否則報編譯錯誤。

當父類同時存在無參和有參構造方法時,默認調用無參構造方法。

當未寫任何構造方法時,編譯期自動幫你添加一個無參構造方法,其他同上。

編譯器是會自動在子類的構造行數中, 在首行添加"super();", 這么一個語句,用來初始化父類的數據;

如果沒有的話, 編譯的時候,無法找到父類的無參構造函數,就無法綁定運行時候調用哪個父類的構造函數,編譯的時候就會報錯啦;

所以記得在以前學習的時候, 很多書籍都是讓重載構造函數的時候, 記得添加一個無參的構造函數



 

 

 

作業

1.

Triangle  三角形

Parallelogram  平行四邊形

 

Sector     扇形

 

2.

實現oo版的單位轉換

 

 


 

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: