public class TransferProperty {
int i=47;
public void call() {
System.out.println("呼叫call()方法");
for(i=0;i<3;i++) {
System.out.print(i+"");
if(i ==2) {
System.out.println("\n");
}
}
}
public TransferProperty() {
}
public static void main(String[] args) {
TransferProperty t1=new TransferProperty();
TransferProperty t2=new TransferProperty();
t2.i=60;
System.out.println("第一個實體物件呼叫變數i的結果:"+t1.i);
t1.call();
System.out.println("第二個實體物件呼叫變數i的結果:"+t2.i);
t2.call();
}
}
此代碼輸出為:
第一個實體物件呼叫變數i的結果:47
呼叫call()方法
012
第二個實體物件呼叫變數i的結果:60
呼叫call()方法
012
有兩個問題,第一個:為什么t1.i=47
第二個:按照代碼順序,輸出順序應為:
“呼叫call()方法
012
呼叫call()方法
012
第一個實體物件呼叫變數i的結果:47
第二個實體物件呼叫變數i的結果:60”
為什么代碼輸出結果順序變了呢?
uj5u.com熱心網友回復:
t1.i 你沒有賦值 就是默認值 47按照代碼順序 你想的順序就不對
因為 你是先列印字符 然后在調的方法
uj5u.com熱心網友回復:
方法代碼不是完全自上而下執行,很多時候是按呼叫順序執行的。想想你的call方法是哪里呼叫的。uj5u.com熱心網友回復:
第一個問題:你初始化時沒有對i進行定義,在新建類成員時,int i=47,所以t1.i=47第二個問題:
System.out.println("第一個實體物件呼叫變數i的結果:"+t1.i);
當代碼執行到這一步時,需要用到t1.i的值,這個時候它就會去呼叫TransferProperty中,初始化t1這個類成員,
所以i=47,
所以輸出:第一個實體物件呼叫變數i的結果:47
然后呼叫t1.call()
輸出:呼叫call()方法
012
同理t2
uj5u.com熱心網友回復:
謝謝大佬們,明白了轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/46107.html
標籤:Eclipse
