国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

[java學習筆記]java語言核心----面向對象之構造函數

2019-11-14 15:30:07
字體:
來源:轉載
供稿:網友

1.構造函數概念

  • 特點:
  1. 函數名與類名相同
  2. 不用定義返回值類型
  3. 沒有具體的返回值
  • 作用:

               給對象進行初始化

  • 注意:
  1. 默認構造函數
  2. 多個構造函數是以重載出現的
  3. 一個類中如果沒有定義過構造函數,那么該類中會有一個默認的空參數的構造函數
  4. 如果在類中定義了構造函數,那么類中的默認構造函數就沒有了
  5. 構造函數在創建對象時調用
  6. 構造函數也有默認的return語句(省略不寫)
  7. 函數執行到return語句后,棧中該函數的方法區就會出棧

如:

class Person{    PRivate int age;    Person(){        age = 10;    }}
  • 一般函數和構造函數的區別

構造函數:對象創建時,就會調用對應的構造函數,對對象進行初始化

一般函數:對象創建后,需要函數功能時才調用

一般函數不能調用構造函數,構造函數可以調用一般函數

class Person{    void Person(){    }}

此方法為一般方法

2.構造函數的重載

class Person{    private String name;    private int age;    Person(){        age = 1;        name = "xiaoming";    }    Person(int a, String n){        age = a;        name = n;    }
    public void speak(){
        System.out.println(name+”:”+age);
    }}

 

在newPerson對象時,可以根據不同的構造函數,選擇不同的創建方式。

Person p1 = new Person();//使用Person類的無參構造函數來創建對象Person p2 = new Person(10,”zhangsan”);//使用Person類有兩個參數的構造函數來創建對象
p1.speak();
p2.speak();

運行結果為:

xiaoming:1

zhangsan:10

 

3.構造函數內存圖解

Person p2 = new Person(10,”zhangsan”);p2.speak();

 

這個代碼在內存中的執行過程:

構造函數

說明:

1.執行main方法,在棧內存中開辟一個main函數的方法區,創建一個Person類型變量p2

2.在堆內存中創建一個Person的實例,并初始化值,和分配地址值

3.在棧內存中開辟Person構造函數的方法區,并執行構造函數中的代碼,即給堆內存中的Person實例的name和age屬性賦值

4.Person方法區出棧

5.棧中創建speak的方法區,執行相應的代碼

6.speak方法區出棧

4.構造函數的相互調用

構造函數可以調用構造函數,如:

class Person{    private String name;    private int age;    Person(String n){        name = n;    }        Person(String n, int a){        this(n);         age = a;              }          public void speak(){                System.out.println(name+”:”+age);        }}

 

注意:

  1. 對this的調用必須是構造函數中的第一個語句
  2. 不允許兩個構造函數互相調用,即不能Person(String n)中調用this(“zhangsan”,10),再在Person(String n, int a)調用this(“xiaoming”),會導致棧內存溢出,因為它們在不斷的互相調用,不斷進棧,卻沒有出棧

錯誤!!!棧內存溢出:

class Person{     private String name;    private int age;    Person(String n){    this("zhangsan",10)     name = n;     }        Person(String n, int a){      this("lisi");    age = a;              }    }

  • this詳解見   [java學習筆記]java語言核心----this關鍵字&super關鍵字

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吐鲁番市| 赞皇县| 墨脱县| 娱乐| 仙桃市| 饶平县| 上杭县| 武清区| 沁阳市| 宜兰县| 濮阳县| 宁蒗| 闽侯县| 鲁甸县| 丹东市| 黑龙江省| 北流市| 开远市| 红原县| 抚顺县| 奇台县| 兰州市| 麻江县| 冷水江市| 大埔县| 布尔津县| 云霄县| 盖州市| 罗源县| 石棉县| 安义县| 拜城县| 永寿县| 金湖县| 漾濞| 哈密市| 广东省| 马公市| 余江县| 南郑县| 满城县|