2012-10-09 47 views
0
class Test { 

    int a, b; 

    Test(int a, int b) {  
     this.a = a; 
     this.b = b; 
    } 

    Test() {    
     a = 0; 
     b = 0; 
    } 

    void print() { 
     System.out.println("A=" + a + ", B=" + b); 
    } 

    void assign(Test ob) { //How can a class(Test) be passed as an argument in a method? 
     this.a = ob.a;  //What does ob.a do? 
     this.b = ob.b;  //What does ob.b do? 
    }      //How can a object 'ob' be passed as an argument? 
} 

的「分配」的方法。請幫助我瞭解下面的代碼

class TestDem { 

    public static void main(String ar[]) { 
     Test ob1 = new Test(1, 2); 
     System.out.println("1st object"); 
     ob1.print(); 
     Test ob2 = new Test(); 
     System.out.println("2nd object"); 
     ob2.print(); 
     ob2.assign(ob1); //dont understand how this statement works with the 'assign' method 
     System.out.println("After assigning object 1 to object 2"); 
     System.out.println("1st object"); 
     ob1.print(); 
     System.out.println("2nd object"); 
     ob2.print(); 

    } 
} 

輸出

1st object 
A=1, B=2 
2nd object 
A=0, B=0 
After assigning object 1 to object 2 
1st object 
A=1, B=2 
2nd object 
A=1, B=2 
+0

歡迎回到SO :) – gks

+2

您應該閱讀[Java object basics](http://docs.oracle.com/javase/tutorial/java/javaOO/index.html)。 – Baz

回答

1
void assign(Test ob) { 
    this.a = ob.a;  
    this.b = ob.b;  //What does ob.b do? 
} 

此方法類似於您使用的構造: -

public Test(int a, int b) { 
    this.a = a; 
    this.b = b; 
} 
  • 不同的是,在這種方法中,你正在獲得012的值和b從參考傳遞而不是參數a和b本身..
  • 還要注意,它不是一個構造函數..它只是將傳遞的引用的值賦給當前對象..而構造函數初始化它創建後實例的狀態..

如何類(測試)來作爲方法的參數傳遞?

我們不及格類測試這裏,而是我們逝去一個參考類測試的對象..

這種方法是什麼都不做,但創建由該引用(在這種情況下,OB)指出該對象的副本。所以,這種方法執行之後,當前對象(用this指出)將具有相同的值傳遞的對象..

什麼ob.a辦?

ob.a指instance變量aTest類的參考ob,你傳入此方法..

所以,如果您有: -

Test ob2 = new Test(1, 2); 
Test ob1 = new Test(); 
ob1.assign(ob2); 

然後,當這種方法執行: -

因爲,this指當前基準,所以this的方法assign將參考ob1,因爲我們在這個參考調用..

而且,你將有兩個主方法在參考ob2obassign方法指向同一對象..的參數

所以,ob1.a(this.a)將等於OB2。一個,和
            ob1.b(this.b)將等於ob2.b

0
void assign(Test ob) { //How can a class(Test) be passed as an argument in a method? 
    this.a = ob.a;  //What does ob.a do? 
    this.b = ob.b;  //What does ob.b do? 
}      //How can a object 'ob' be passed as an argument? 

在Java(除了基本類型如int等讓我們不要在這裏談論它們)一切都會擴展Object。

您定義了一個類Test,其暗示延伸Object。 該課程有兩個成員變量:ab,其類型爲int

如果obTest型的,您可以訪問使用ob.aob.b其成員(如ab是公開的)。您可以使用ob.a = anIntValueob.b = anIntValue來設置它們的值。

也就是說你在assign方法做什麼:你通過Test類型的另一個對象和它的值複製到您的包圍對象(this.a = valuethis.b = value)。

因此,您的方法的結果是通過複製外部對象的狀態來修改您的內部狀態。

0

方法void assign(Test ob)需要Test類型的對象ob。然後,它將值ob的值a值分配給該方法正在調用的a值,然後b值相同。

也許如果方法更名爲copy(Test ob)那麼這個方法會乾淨些嗎?