2017-02-18 71 views
1

您好我想了解這個程序的執行流程。我是java編程和學習構造函數的新手。java新手想知道執行流程

我的疑問是,當對象obj調用構造函數並將值10和jack分配給x和y時,那麼是不是當下一個對象obj2被創建時,它將用12代替值, y?所以既然call()方法在調用之後被調用,那麼不是因爲 打印正在打印x和y,所以假設打印12和matt都是打電話?

class Constructor2 { 
    int x; 
    String y; 

    Constructor2(int i, String s){ 
    x = i; 
    y = s; 
    } 

    void call(){ 
    System.out.println("roll no is "+ x + " name is " + y); 
    } 

    public static void main(String args[]) { 
    Constructor2 obj = new Constructor2(10, " jack "); 
    Constructor2 obj2 = new Constructor2(12, " matt "); 

    obj.call(); 
    obj2.call(); 
    } 
} 
+3

每個'Constructor2'對象都有自己的這些變量的副本。在一箇中修改它們不會影響其他的。 – resueman

+2

只要事物不是「靜態」,每個對象都有它自己的x和y。這與構造函數無關。 –

+0

好,這意味着 ojb 1將有x = 10和s =傑克和ojb2將有x = 12和s =亞光 所以現在當任何方法被調用使用這些對象時,它將使用存儲在對象,對吧? – John

回答

0

類的每個object都有自己的變量副本,只要他們不static和一個對象改變任何變量的值只改變值的特定目標和其他目標不會受到它。

Constructor2 obj = new Constructor2(10, " jack "); 

這個對象obj將有它的xy變量的自己的副本,當上面的語句被執行,x和對象objy被初始化。

Obj2不受任何影響。的obj2xy變量的副本,當執行

Constructor2 obj2 = new Constructor2(12, " matt "); 

得到初始化。

因爲每次你創建對象的new例如上面兩種說法

obj.x = 10 and obj.y = john 

obj2.x = 12 and obj2.y = matt 
+0

非「靜態」成員變量的單獨副本,是的。非'靜態'方法的單獨副本,沒有。對於方法,「靜態」與它們是否在特定實例的上下文中執行有關。 –

+0

@JohnBollinger同意了。我弄錯了。編輯我的答案。感謝您指出。 – Yousaf

0

執行後:

Constructor2 obj = new Constructor2(10, " jack "); 
Constructor2 obj2 = new Constructor2(12, " matt "); 

因此,將預留每個對象obj和的內存空間爲你得到不同的價值,這是邏輯。

你可以在這裏看看:Working with Objects in Java

1

一個就是這樣描述瞭如何創建盒子的模板。

每次您撥打new,查看該模板,並且一個新盒子被創建,並且一些內容被放入該盒子。

您正在創建兩個框,每次將不同的內容放入新創建的框中。

請參閱here以供進一步閱讀。

一個關鍵一點要明白:如果您已經聲明場,時則該類的所有對象將看到相同值所使用的靜態關鍵字。

0

每當對象初始化時,它都會先調用構造函數,然後初始化變量。

所以調用方法將具有更新值。

1

變量x和y是實例變量,這就是爲什麼它們鏈接到創建的對象。它們不影響其他對象或類。

如果你有他們作出靜態變量,所謂類變量,如..

static int x; 
static String y; 

..the內容,你怕的就會被覆蓋。