係統粉 > 電腦問答 > 其他問答

已解決看書上例子時的疑問(Java)

提問者:丟丟爆可耐  |  瀏覽次  |  提問時間:2017-01-26  |  回答數量:8

看書上例子時的疑問(Java) 這是我在書上看到的一個例題: class People { int money; void setMoney(int n){ money=n;} } class A { void f(double y,People p){ y=y+1; p.setMoney(100); System.out.println(\"參數y的值是:\"+y); System.out.println(\"參數對象p的money是:\"+p.money); } } public class Example { public static void main(String args[]){ double y=0.8; People zhang=new People(); zhang.setMoney(8888); A a=new A(); System.out.println(\"在方法f被調用之前對象zhang的money是:\"+zhang.money+\"y的值是:\"+y); a.f(y,zhang); System.out.println(\"在方法f被調用之後main方法中y的值仍然是:\"+y);

已有8條答案
weal_smile

weal_smile

回答數:176  |  被采納數:124

void f(double y,People p)是按值傳遞,在函數裏改了對外麵沒用,改成void f(double &y,People &p)
要看程序如何執行可以單步調試
2017-01-27 00:17:02
讚 17
___楊興傑丶

___楊興傑丶

回答數:93  |  被采納數:141

1)答:
因為輸出語句
System.out.println("在方法f被調用之前對象zhang的money是:"+zhang.money+"y的值是:"+y);
裏麵的變量y,編譯器內部會首先查找局部變量的y值(也就是在main方法中y定義的值),
如果沒找到局部變量,此時才會去找整個class文件的全局變量

特別注意void f(double y,People p)方法中的y和輸出語句
System.out.println("在方法f被調用之前對象zhang的money是:"+zhang.money+"y的值是:"+y)中的y
根本就沒有一點聯係,完全是獨立的
2017-01-27 04:21:42
讚 9
時易子

時易子

回答數:113  |  被采納數:79

neo_pang 你說的我明白了,但你還沒幫我解釋我的第二個疑問:
為什麼這兩個輸出語句:
System.out.println("參數y的值是:"+y);
System.out.println("參數對象p的money是:"+p.money);
不是最後輸出,而是在System.out.println("在方法f被調用之後main方法中y的值仍然是:"+y); 和System.out,println("在方法f被調用之後main方法中對象zhang的money是:"+zhang.money); 這兩個語句前輸出?難道不是先執行a. f(y, zhang);及下麵的輸出語句後再返回執行方法f 中的輸出語句嗎?
2017-01-27 05:36:32
讚 11
我暈199494

我暈199494

回答數:126  |  被采納數:43

我的編譯器是先執行

System.out.println("參數y的值是:"+y);
System.out.println("參數對象p的money是:"+p.money);

後執行

System.out.println("在方法f被調用之後main方法中y的值仍然是:"+y);
System.out,println("在方法f被調用之後main方法中對象zhang的money是:"+zhang.money);
2017-01-27 05:40:56
讚 12
309659952

309659952

回答數:107  |  被采納數:100

回4樓:對!編譯器是這樣執行的,我的問題是:為什麼是這樣執行?為什麼不是直接執行下去然後再返回執行前2個輸出語句?
2017-01-27 05:22:57
讚 10
wo250074141

wo250074141

回答數:59  |  被采納數:64

因為這兩句
System.out.println("參數y的值是:"+y);
System.out.println("參數對象p的money是:"+p.money);
是在f函數裏的,是函數方法的一部分。

而這句話a.f(y,zhang);
是調用f函數方法的,隻有這個方法全部執行完畢了 才會執行
a.f(y,zhang); 後麵的
2017-01-27 01:08:14
讚 5
zmc007007

zmc007007

回答數:52  |  被采納數:85

那要用到異步和多線程技術
2017-01-27 16:49:05
讚 5
勤奮的yzy

勤奮的yzy

回答數:203  |  被采納數:125

哦 我現在學的還比較淺
不過看了neo_pang 的說法 明白了點
2017-01-27 08:12:00
讚 20
相關問答
最新其他問答
解決方法