課程
/后端開發
/Java
/反射——Java高級開發必須懂的
直接用foo1.print();就可以執行print方法了。
先創建實例對象c1,再用newInstance方法創建對象foo,再調用print方法。這樣有什么好處或者說是在什么情況下會這樣使用?
2015-07-28
源自:反射——Java高級開發必須懂的 1-1
正在回答
以下所說的只是自己的理解。如果有不對的情況請大家指正我。
一般情況下我們都會使用new Foo().print();這種情況下是我們肯定使用Foo的對象的時候我們會這么用。
但是當我們需要在運行時才能確認哪個類的print方法時會用到反射。
比如現在有個方法,根據我們傳遞的類名來調用方法
public void print(String className) {
? Class<?> c = Class.forName(className);
?......
}
這樣,只要你傳入正確的類名,不僅能調用Foo類的print方法,還可以使用Student類、User類的print方法
應用場景之一就是JDBC加載驅動
Class.forName("com.mysql.jdbc.Driver");
Class.forName("com.oracle.jdbc.OracleDriver");
根據類名找到不同的JDBC驅動,然后調用某方法。
還有其他應用場景,我覺得應該是Spring等,配置文件根據bean id來加載具體的類
可能web.xml等也是。。
鮮衣 提問者
陽少兮_s 回復 鮮衣 提問者
鮮衣 提問者 回復 陽少兮_s
JAVA反射會讓你更加了解許多 框架機制, 讓你明白其實現原理。 他解剖了java類 可以自由發揮 ,運用得到可以減少很多代碼的編寫,方便了編程??梢詫懞芏喙玫墓δ茳c。 這里老師只是為了講課才這么講的 ,這是我們知道foo這個類里面有print,如果我們不知道呢 ,我們需要調用print方法怎么辦呢。或許會遇到這樣的需求,或者類似的,這都是要去解決的額!
舉報
反射,Java高級開發必須要懂的知識點,學好Java高級課程的基礎
3 回答有幾個問題求解答!
1 回答Constructor的getName()是不是有一個小BUG啊
1 回答老師你好,interface 也是一個類嗎? 受教了,學到了很多
1 回答求問為什么編譯錯誤了
4 回答求解釋,菜鳥求大神解釋
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2015-07-30
以下所說的只是自己的理解。如果有不對的情況請大家指正我。
一般情況下我們都會使用new Foo().print();這種情況下是我們肯定使用Foo的對象的時候我們會這么用。
但是當我們需要在運行時才能確認哪個類的print方法時會用到反射。
比如現在有個方法,根據我們傳遞的類名來調用方法
public void print(String className) {
? Class<?> c = Class.forName(className);
?......
}
這樣,只要你傳入正確的類名,不僅能調用Foo類的print方法,還可以使用Student類、User類的print方法
應用場景之一就是JDBC加載驅動
Class.forName("com.mysql.jdbc.Driver");
Class.forName("com.oracle.jdbc.OracleDriver");
根據類名找到不同的JDBC驅動,然后調用某方法。
還有其他應用場景,我覺得應該是Spring等,配置文件根據bean id來加載具體的類
可能web.xml等也是。。
2015-08-11
JAVA反射會讓你更加了解許多 框架機制, 讓你明白其實現原理。 他解剖了java類 可以自由發揮 ,運用得到可以減少很多代碼的編寫,方便了編程??梢詫懞芏喙玫墓δ茳c。 這里老師只是為了講課才這么講的 ,這是我們知道foo這個類里面有print,如果我們不知道呢 ,我們需要調用print方法怎么辦呢。或許會遇到這樣的需求,或者類似的,這都是要去解決的額!