樂字節Java構造器(構造方法|構造函數)、方法與內存分析

一、 構造器(構造方法|構造函數)

在創建對象時(new),必會調用一個特殊的方法,這個方法是初始化對象信息的爲new服務的。這個方法稱爲“構造器”
圖片描述

使用 new + 構造方法創建一個新的對象。

構造函數是定義在 Java類中的一個用來初始化對象的函數。

構造函數與類同名且沒有返回值。

例如: Person類的構造函數:

public class Person {
    int id;
    int age;
    Person(int n, int i){
        id = n;
        age = i;
    }
}

創建對象時,使用構造函數初始化對象的成員變量

public class Test {
    public static void main(String[] args) {
        Person tom = new Person(1, 18);
        Person jeck = new Person(2, 20);
    }
}

二、構造方法的特點:

1) 名稱必須和類名一致,與類名相同

2) 沒有返回類型|void

3) 構造器可以存在return,return有選擇的跳出構造器

4) 不能隨便調用,和new在一起使用,其他時候不能調用

5) 修飾符不能爲 final abstract static

作用:

初始化對象信息,不是用於創建對象的

空構造:

沒有參數的構造器、無參構造

1) 一個類中,如果沒有顯示|手動 加入 任意構造器 javac編譯後 自動加入空構造

2) 一旦加入構造器, javac 不會加入空構造器

三、方法的重載

方法的重載是指一個類中可以定義有相同的方法名,但參數不同的多個方法。調用時,會根據不同的參數列表選擇對應的方法。
圖片描述

四、構造方法的重載

與普通方法一樣,構造方法也可以重載

例子如下:
圖片描述

五、 引用與內存分析

A:一個對象的內存圖

B:二個對象的內存圖

C:三個對象的內存圖

內存分析

劃分
圖片描述

引用的特點:

1) 同一時刻一個一引用只能指向一個對象

2) 一個對象可以被多個引用所指向,其中一個對其進行更改,該對象的其他引用也可見該變化

3) Java一切爲值傳遞,引用拷貝地址

約定俗成的命名規則

類名的首字母大寫

變量名和方法名的首字母小寫

運用駝峯標識

例子:

public class Cat {
    String color; // 毛的顏色
    String name; // 名稱
    public void chase(Mice mice){
        mice.type = "jerry"; // 改變
        System.out.println(name + " 逮 " + mice.type);
    }
    public static void main(String[] args) {
        // 引用  與內存分析(運行期爲--》數據的流向)
        Cat cat = new Cat();
        cat = new Cat();    
// 引用發生變化,同一個時刻一個引用只能指向一個對象
        cat.color = "黑色";
        cat.name = "tom";
        Mice mice = new Mice();
        mice.type = "米奇";
        // 將二者聯繫起來  --》 依賴
        cat.chase(mice);    
// 傳遞時,值拷貝,拷貝地址,拷貝完成後   一個對象被多個引用所指向
        System.out.println(mice.type);  
// jerry 其中一個對其發生變化,該對象的其他引用也可減該變化
    }
}
class Mice{
    String type;
}

定義如下類

public class BirthDate {
    int day;
    int month;
    int year;
    public BirthDate(int d, int m, int y){
        day = d;
        month = m;
        year = y;
    }
    void setDay(int d){
        day = d;
    }
    void setMonth(int m){
        month = m;
    }
    void setYear(int y){
        year = y;
    }
    int getDay(){
        return day;
    }
    int getMonth(){
        return month;
    }
    int getYear(){
        return year;
    }
    void display(){
        System.out.println(day + "-" + month + "-" + year);
    }
}

測試類:

public class Test {
    public static void main(String[] args) {
        Test test = new Test();
        int date = 9;
        BirthDate d1 = new BirthDate(7,7,1970);
        BirthDate d2 = new BirthDate(1,1,2000);
             test.change1(date);
             test.change2(d1);
             test.change3(d2);
             System.out.println(date); 
             System.out.println(d1);
             System.out.println(d2);
    }
    void change1(int i){
        i = 1234;
    }
    void change2(BirthDate b){
        b = new BirthDate(22,2,2004);
    }
    void change3(BirthDate b){
        b.setDay(22);
    }
}

總結:

對象的創建和使用,必須使用new 關鍵字創建對象,使用對象引用.成員變量來引用對象的成員變量,使用對象引用.方法(參數列表)來調用對象的方法。

同一類的每個對象有不同的成員變量存儲空間,同一類的每個對象共享該類的方法,

非靜態方法是針對每個對象進行調用 。

樂字節原創,轉載請註明出處。請繼續關注樂字節

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章