1. 程式人生 > >03_JavaSE之OOP--面向對象(構造器,static關鍵字)

03_JavaSE之OOP--面向對象(構造器,static關鍵字)

這就是 出了 使用 style java IT 運行 對象賦值 兩個

面向對象(三)

一、構造器(構造方法)

  1.概述以及作用

  構造器也叫構造方法,在構造類的對象時,構造器會運行,以便將實例域(成員變量)初始化成所希望的狀態。

  作用:給對象的數據(屬性)進行初始化賦值,也可以不進行任何賦值。

  2.例子:

  1)代碼 

 1 public class Person {
 2     //成員變量
 3     String name;                        //姓名
 4     int age;                            //年齡
 5 
 6     //空構造器
 7     public Person(){
8 9 } 10 11 //有參構造器 12 public Person(String name, int age) { 13 this.name = name; 14 this.age = age; 15 } 16 } 17 18 class Demo { 19 public static void main(String[] args){ 20 //空構造器 21 Person p1 = new Person(); 22 //有參構造器(初始化給對象賦值) 23 Person p2 = new
Person("王陽明","55"); 24 25 } 26 }

  有兩個構造器,一個是空構造器,另一個是有參構造器。構造器總是伴隨著new操作符的執行被調用,而不能對一個已經存在的對象調用構造器來達到重新設置實例域的目的

  2)構造器格式的特點:

  • 構造器與類同名(大小也要一致)
  • 每個類可以有一個以上的構造器
  • 構造器參數可以有0個、1個或多個參數
  • 構造器沒有返回值return
  • 構造器總是伴隨著new操作符一起調用

 

  3.構造器的重載

  1)代碼

 1     //空構造器
 2     public Person(){}
 3 
 4     //有參構造器
 5     public
Person(int age) { 6 this.age = age; 7 } 8 public Person(String name) { 9 this.name = name; 10 } 11 public Person(String name, int age) { 12 this.name = name; 13 this.age = age; 14 }

  Person()、Person(int age)、Person(String name)等這四個方法名相同,與返回值無關,只看參數列表。這就是構造方法的重載。重載只不過是在new時根據需求給不同的屬性賦值罷了。

  註:1.如果我們沒有給出構造方法,系統將自動提供一個無參的構造器。

    2.如果我們給出了構造方法,那麽將不再用系統的,如果需要使用,必須自己給出。建議永遠給出無參構造器。

  4.通過Set方法和構造器給成員變量賦值有什麽區別?

  之前,我們給出了set/get方法,而是給成員變量賦值的,那麽他和構造器賦值有什麽區別呢。

  首先,構造器給對象賦值是發生在構造類的對象的時候隨著new的執行被調用。而且不能對已經存在的一個對象調用構造器重新賦值。而set方法,是對象實例化以後,通過調用set方法進行給成員變量賦值,可以重新賦值進行更新。  

  其次,set方法強調的是修改屬性值,而構造器則是給對象屬性進行初始化。

二、對象創建的過程(內存圖)

  如圖:

技術分享圖片

三、static關鍵字

  1.static的特點:

  1)隨著類的加載而加載

  2)優於對象存在

  3)被類的所有對象共享 (舉例:班級學生擁有一個老師,那麽老師可以為靜態的,供學生共享。)

  4)可以通過類名直接調用。其實他本身也可以通過對象名調用。當然,推薦使用類名調用。

  2.static註意事項:

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

  3.靜態變量和成員變量和區別

  首先,靜態變量也叫類的變量,隨著類的加載而加載。成員變量也叫對象變量,隨著對象的創建而創建。

  因此具體的不同是:

  1)所屬不同:

    靜態變量屬於類

    成員變量屬於對象

  2)內存當中的位置不同:

    靜態變量屬於方法區中的靜態區

    成員變量屬於堆內存

  3)內存出現時間不同:
    靜態變量隨著類加載而加載,隨著類的消失而消失

    成員變量隨著對象的創建而存在,隨著對象的消失而消失。

  4)調用不同

    靜態變量可以通過類名調用,也可以通過對象調用

    成員變量只能通過對象名調用。

如有錯誤之處,歡迎指正。

郵箱:[email protected]

03_JavaSE之OOP--面向對象(構造器,static關鍵字)