求教一個(gè)小問(wèn)題
直接用foo1.print();就可以執(zhí)行print方法了。
先創(chuàng)建實(shí)例對(duì)象c1,再用newInstance方法創(chuàng)建對(duì)象foo,再調(diào)用print方法。這樣有什么好處或者說(shuō)是在什么情況下會(huì)這樣使用?
直接用foo1.print();就可以執(zhí)行print方法了。
先創(chuàng)建實(shí)例對(duì)象c1,再用newInstance方法創(chuàng)建對(duì)象foo,再調(diào)用print方法。這樣有什么好處或者說(shuō)是在什么情況下會(huì)這樣使用?
2015-07-28
舉報(bào)
2015-07-30
以下所說(shuō)的只是自己的理解。如果有不對(duì)的情況請(qǐng)大家指正我。
一般情況下我們都會(huì)使用new Foo().print();這種情況下是我們肯定使用Foo的對(duì)象的時(shí)候我們會(huì)這么用。
但是當(dāng)我們需要在運(yùn)行時(shí)才能確認(rèn)哪個(gè)類(lèi)的print方法時(shí)會(huì)用到反射。
比如現(xiàn)在有個(gè)方法,根據(jù)我們傳遞的類(lèi)名來(lái)調(diào)用方法
public void print(String className) {
? Class<?> c = Class.forName(className);
?......
}
這樣,只要你傳入正確的類(lèi)名,不僅能調(diào)用Foo類(lèi)的print方法,還可以使用Student類(lèi)、User類(lèi)的print方法
應(yīng)用場(chǎng)景之一就是JDBC加載驅(qū)動(dòng)
Class.forName("com.mysql.jdbc.Driver");
Class.forName("com.oracle.jdbc.OracleDriver");
根據(jù)類(lèi)名找到不同的JDBC驅(qū)動(dòng),然后調(diào)用某方法。
還有其他應(yīng)用場(chǎng)景,我覺(jué)得應(yīng)該是Spring等,配置文件根據(jù)bean id來(lái)加載具體的類(lèi)
可能web.xml等也是。。
2015-08-11
JAVA反射會(huì)讓你更加了解許多 框架機(jī)制, 讓你明白其實(shí)現(xiàn)原理。 他解剖了java類(lèi) 可以自由發(fā)揮 ,運(yùn)用得到可以減少很多代碼的編寫(xiě),方便了編程??梢詫?xiě)很多公用的功能點(diǎn)。 這里老師只是為了講課才這么講的 ,這是我們知道foo這個(gè)類(lèi)里面有print,如果我們不知道呢 ,我們需要調(diào)用print方法怎么辦呢?;蛟S會(huì)遇到這樣的需求,或者類(lèi)似的,這都是要去解決的額!