1. 程式人生 > 其它 >2021年02月08日除錯筆記Java類和物件(二)

2021年02月08日除錯筆記Java類和物件(二)

技術標籤:Java程式設計java面向物件程式設計

注意:這個為小白程式設計除錯記錄,裡面有些程式碼不是正確的,僅僅是個記錄!!!!!

3.程式設計思路:
這次主要的知識點是物件可以作為屬性放到另一個物件裡面去。
建立PetDog類和People類。每一個寵物狗都有一個主人,每個人有名字,寵物狗也有名字,並且可以叫。定義了cry方法。
程式碼如下:

public class PetDog {
    String name;
    People owner;
void cry(){
        System.out.println("wangwangwangwang!"
); } public static void main(String[] args) { People owner1=new People(); owner1.name="Mickey"; PetDog Dog1=new PetDog(); Dog1.name="Pluto"; Dog1.owner=owner1; System.out.println(Dog1.name+"'s owner is "+owner1.name); Dog1.
cry(); People owner2=new People(); owner1.name="William"; PetDog Dog2=new PetDog(); Dog1.name="Pango"; Dog1.owner=owner2; System.out.println(Dog2.name+"'s owner is "+owner2.name); Dog2.cry(); } } class People
{ String name; }

執行結果
初次執行結果
從上面可以看出,第二對狗和主人的資訊並沒有打印出來。
原因分析:
問題出在這個程式碼上:

owner1.name="William";
        PetDog Dog2=new PetDog();
        Dog1.name="Pango";
        Dog1.owner=owner2;
        System.out.println(Dog2.name+"'s owner is  "+owner2.name);

由於當時打第二塊程式碼的時候是複製貼上上去的,物件名忘了改,所以把字串的資訊賦值給了Dog1物件,而Dog2物件被無參構造器初始化了預設值,而String類的預設值為null(String類也是物件),所以第二行輸出了null。
修改程式碼如下:

public class PetDog {
    String name;
    People owner;
void cry(){
        System.out.println("wangwangwangwang!");
    }
    public static void main(String[] args) {
       People owner1=new People();
       owner1.name="Mickey";
       PetDog Dog1=new PetDog();
       Dog1.name="Pluto";
       Dog1.owner=owner1;
       System.out.println(Dog1.name+"'s owner is  "+owner1.name);
       Dog1.cry();
        People owner2=new People();
        owner2.name="William";
        PetDog Dog2=new PetDog();
        Dog2.name="Pango";
        Dog2.owner=owner2;
        System.out.println(Dog2.name+"'s owner is  "+owner2.name);
        Dog2.cry();

    }

}
class People
{
    String name;
}

執行結果為
最終正確執行結果
總結:
一個物件就是一個整體,物件的屬性也可以是物件,注意在

 Dog1.owner=owner1;

中,此owner1非彼owner。一個是Dog1物件內部的屬性,一個是new出來的獨立的物件。這一賦值操作便把Dog1的owner指向了owner1(記憶體分析)。所以筆者用了兩個不同的物件名做區分。