求教一個小問題
直接用foo1.print();就可以執(zhí)行print方法了。
先創(chuàng)建實例對象c1,再用newInstance方法創(chuàng)建對象foo,再調用print方法。這樣有什么好處或者說是在什么情況下會這樣使用?
直接用foo1.print();就可以執(zhí)行print方法了。
先創(chuàng)建實例對象c1,再用newInstance方法創(chuàng)建對象foo,再調用print方法。這樣有什么好處或者說是在什么情況下會這樣使用?
2015-07-28
舉報
2015-07-30
以下所說的只是自己的理解。如果有不對的情況請大家指正我。
一般情況下我們都會使用new Foo().print();這種情況下是我們肯定使用Foo的對象的時候我們會這么用。
但是當我們需要在運行時才能確認哪個類的print方法時會用到反射。
比如現(xiàn)在有個方法,根據我們傳遞的類名來調用方法
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反射會讓你更加了解許多 框架機制, 讓你明白其實現(xiàn)原理。 他解剖了java類 可以自由發(fā)揮 ,運用得到可以減少很多代碼的編寫,方便了編程??梢詫懞芏喙玫墓δ茳c。 這里老師只是為了講課才這么講的 ,這是我們知道foo這個類里面有print,如果我們不知道呢 ,我們需要調用print方法怎么辦呢?;蛟S會遇到這樣的需求,或者類似的,這都是要去解決的額!