Java基礎構造方法和this關鍵字整理


    構造方法

8.1構造方法介紹

構造方法的格式:

修飾符 構造方法名(參數列表)

{

}

l  構造方法的體現:

n  構造方法沒有返回值類型。也不需要寫返回值。因為它是為構建對象的,對象創建完,方法就執行結束。

n  構造方法名稱必須和類名保持一致。

n  構造方法沒有具體的返回值。

構造方法的代碼體現

class Person {

    // Person的成員屬性age和name

    private int age;

    private String name;

 

    // Person的構造方法,擁有參數列表

    Person(int a, String nm) {

       // 接受到創建對象時傳遞進來的值,將值賦給成員屬性

       age = a;

       name = nm;

    }

}

 

8.2構造方法調用和內存圖解

構造方法是專門用來創建對象的,也就是在new對象時要調用構造方法

 

class Person {

    // Person的成員屬性age和name

    private int age;

    private String name;

 

    // Person的構造方法,擁有參數列表

    Person(int a, String nm) {

       // 接受到創建對象時傳遞進來的值,將值賦給成員屬性

       age = a;

       name = nm;

    }

 

    public void speak() {

       System.out.println("name=" + name + ",age=" + age);

    }

}

 

class PersonDemo {

    public static void main(String[] args) {

       // 創建Person對象,並明確對象的年齡和姓名

       Person p2 = new Person(23, "張三");

       p2.speak();

    }

}

 

 

 

 

1、首先會將main方法壓入棧中,執行main方法中的 new Person(23,"張三");

2、 

3、在堆內存中分配一片區域,用來存放創建的Person對象,這片內存區域會有屬於自己的內存地址(0x88)。然后給成員變量進行默認初始化(name=null,age=0)。

4、執行構造方法中的代碼(age = a ; name = nm;),將變量a對應的23賦值給age,將變量nm對應的”張三賦值給name,這段代碼執行結束后,成員變量age和name的值已經改變。執行結束之后構造方法彈棧,Person對象創建完成。將Person對象的內存地址0x88賦值給p2。

 

 

8.3默認構造方法和細節

在之前學習的過程中,描述事物時,並沒有顯示指定構造方法,當在編譯Java文件時,編譯器會自動給class文件中添加默認的構造方法。如果在描述類時,我們顯示指定了構造方法,那么,當在編譯Java源文件時,編譯器就不會再給class文件中添加默認構造方法。

 

l  構造方法的細節:

1、一個類中可以有多個構造方法,多個構造方法是以重載的形式存在的

2、構造方法是可以被private修飾的,作用:其他程序無法創建該類的對象。

 

class Person {

    private int age;

    private String name;

 

    // 私有無參數的構造方法,即外界不能通過new Person();語句創建本類對象

    private Person() {

    }

 

    // 多個構造方法是以重載的形式存在

    Person(int a) {

       age = a;

    }

 

    Person(String nm, int a) {

       name = nm;

       age = a;

    }

}

8.4構造方法和一般方法區別

構造方法在對象創建時就執行了,而且只執行一次。

一般方法是在對象創建后,需要使用時才被對象調用,並可以被多次調用

 

 

   this關鍵字

9.1this調用構造方法

         構造方法之間的調用,可以通過this關鍵字來完成。

 

class Person {

    // Person的成員屬性

    private int age;

    private String name;

 

    // 無參數的構造方法

    Person() {

    }

 

    // 給姓名初始化的構造方法

    Person(String nm) {

       name = nm;

    }

    // 給姓名和年齡初始化的構造方法

    Person(String nm, int a) {

       // 由於已經存在給姓名進行初始化的構造方法 name = nm;因此只需要調用即可

       // 調用其他構造方法,需要通過this關鍵字來調用

       this(nm);

       // 給年齡初始化

       age = a;

    }

}

 

9.2this的原理圖解

package com.oracle.demo11;

 

public class Person {

     private String name;

     private int age;

   

   

   

    public Person(String name, int age) {

       this.name=name;

       this.age=age;

    }

    public void speak(){

      

       System.out.println("我叫"+this.name+",今年"+this.age+"歲了");

    }

   

}

package com.oracle.demo11;

 

public class Test {

    public static void main(String[] args) {

       Person p=new Person("欣欣",16);

       p.speak();

    }

}

運行結果:

 

 

 

 

流程圖:

 

 

 

 

9.3成員變量和局部變量同名問題

當在方法中出現了局部變量和成員變量同名的時候,那么在方法中怎么區別局部變量成員變量呢?可以在成員變量名前面加上this.來區別成員變量和局部變量

package com.oracle.demo12;

 

public class Person {

    private String name;

    private int age;

    private String gender;

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

    public int getAge() {

       return age;

    }

    public void setAge(int age) {

       this.age = age;

    }

    public String getGender() {

       return gender;

    }

    public void setGender(String gender) {

       this.gender = gender;

    }

   

   

    public Person(){

      

      

    }

    public Person(String n,int a,String g){

       name=n;

       age=a;

       gender=g;

      

    }

    public void study(){

      

       System.out.println("正在學習");

    }

    public void sleep(){

      

       System.out.println("正在睡覺");

    }

    public void speak(){

      

       System.out.println("我叫:"+name+",年齡為:"+age+",性別"+gender);

    }

}

package com.oracle.demo12;

 

public class Test02 {

    public static void main(String[] args) {

       Person p=new Person("萌萌",23,"女");

       p.speak();

       p.study();

       p.sleep();

      

       Person p1=new Person();

       p1.speak();

       p1.study();

       p1.sleep();

    }

}

 

運行結果:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM