2014-02-20 55 views
0
public class Learning { 
    int i = 1; // i is assigned to 1. 
    static int s = 2;// s is assigned to 2. 

    Learning() { 
     i = 0; s++; // i is assigned to 0 and s increases to 2. 
     System.out.println("test: " + i + s);// this line will display test: 03 since the values are above given. 
    } 

    public static void main (String [] args) { 
     Learning t1 = new Learning();// Creating and instance variable from the Class Learning. 
     System.out.println("t1: " + t1.i + t1.s);//t1 reaches with the help of the . the value of i as well as s and again this line will print out t1: 03 
     t1.s = 6;// Now the variable get s new value which is 6 
     Learning t2 = new Learning();// Creating another instance variable from the class called Learning 
     t2.i = 8;// Now the value for i is set for 8. 
     System.out.println("t2: " + t2.i + t2.s);// Now I thought the program would display t2: 86 since I have already got the value 8 and 6 assigned above, but it doesn't do that. 
    } 
} 

好的傢伙,如上所見我有一個新的Java代碼,我認爲總的來說,我確實瞭解很多東西,至少我做了以上評論,我知道我的思維方式是正確的。任務02:此Java代碼如何工作?

隨意和檢查我上面的意見,糾正我,如果我錯了。

我已經測試和上面的代碼實際打印如下:

test: 03 
t1: 03 
test: 07 
t2: 87 

因此,換句話說,我是正確的部分,我只是不明白爲什麼它在打印測試:07,因爲沒有循環,爲什麼t2:87不是t2:86?

我最初希望這樣的事情:

test: 03 
t1: 03 
t2: 86 

任何想檢查PROFIS?

在此先感謝。

+4

我建議你學習的靜態和成員變量之間的區別。 –

+2

使用調試器學習的時間 –

+0

@ Code-Guru,我通過例子學到了最好的東西,希望能有一些知識豐富,體面的用戶可以幫助我完成這個代碼 – Rosehip

回答

3

Learning每次創建new Learning()時都會調用,因爲它是Learning類的所有實例的構造函數。您創建了兩個Learning實例,因此test會打印兩次。值爲87的原因是因爲sstatic。這意味着Learning的所有實例的s共享相同的值。因此,修改t1s的實例爲6也會修改t2的s實例,然後在其構造函數中增加該實例,並且變爲7

1

它正在打印test: 07,因爲您將Learning()的新副本實例化爲t2。因此,它正在構造函數中並在那裏打印行。

因爲它正在實例化,所以這也增加了構造函數中s的值。由於s是一個靜態變量,因此其值在所有Learning對象之間共享。因爲你在t1中將它設置爲6,所以當你實例化新對象時,它增加到7,產生'87'。

0

由於您創建了2個班級學習對象,「test:0x」將會打印兩次。

之所以T2是86而不是87是因爲你先設置t1.s = 6並且在這之後,調用constrctor new Learning(),將由1

0

看這句話增加sLearning t2 = new Learning();

這將導致test: 07被打印出來,因爲它使用了其中包含打印語句的Learning()構造函數。

該行還導致人民共同1,從6增加到7。這是爲什麼t2:87打印的t2:86

0

每次創建Learning類型的新實例,而不是,構造函數將被調用。所以,當你創建t2對象s值加一(這就是爲什麼你有87值,而不打印86和文本test: 07被打印出來。