亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

logHandler調用的是move方法,但為什么timeHandler調用的也是move方法

logHandler調用invoke調用的是move方法,但為什么timeHandler也是調用move方法,這里已經隔了一層了。

public?static?void?main(String[]?args)?{

Moveable?car?=?new?Car();

?

InvocationHandler?timeHandler?=?new?TimeHandler(car);

?

Class<?>?cls?=?car.getClass();

?

/**

*?loader:類加載器<br>

*?interfaces:實現接口<br>

*?h?InvocationHandler<br>

*/

Moveable?timeCar?=?(Moveable)?Proxy.newProxyInstance(

cls.getClassLoader(),?cls.getInterfaces(),?timeHandler);

?

InvocationHandler?logHandler?=?new?LogHandler(timeCar);

?

Moveable?logCar?=?(Moveable)?Proxy.newProxyInstance(

cls.getClassLoader(),?cls.getInterfaces(),?logHandler);

?

logCar.move();

}



正在回答

3 回答

因為你這兩個handler里的invoke方法里的method.invoke語句最后都是調的move()方法啊。

你timehandler傳的對象是car,之后的loghandler傳的timecar,所以你最后logcar調用move()方法的時候的執行順序是

  1. 執行loghandler的invoke方法中method.invoke語句前的部分

  2. 進入loghandler的method.invoke方法,這里實際是timehandler的invoke方法,同樣先執行method.invoke語句之前的部分

  3. 執行timehandler的method.invoke方法,這里實際是car的move()方法

  4. 執行timehandler的invoke方法里method.invoke語句之后的部分

  5. 執行loghandler的invoke方法里method.invoke語句之后的部分

4 回復 有任何疑惑可以回復我~
#1

windy_yong 提問者

謝答,贊同答主的回答,也就是調用logCar.move();時,會首先調用loghandler的invoke方法,之后層層調用,直至調用car.move方法
2016-02-17 回復 有任何疑惑可以回復我~

學習了.

0 回復 有任何疑惑可以回復我~

同謝,解答了我的疑問

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

logHandler調用的是move方法,但為什么timeHandler調用的也是move方法

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號