1.就是說根據你傳進去的對象類型返回相應的代理。這個不是在靜態編譯時決定的, 而是運行時決定的,所以叫做動態。this指的是當前InvocationHandler對象,也就是new MyInvocationHandler()出來的。
目前創新互聯已為成百上千家的企業提供了網站建設、域名、網絡空間、網站改版維護、企業網站設計、溧水網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協力一起成長,共同發展。
2.執行RealSubject中的say方法,因為這個時候實際的對象是bind(new RealSubject())。
3.沒有調用自己啊。
Java中反射有如下幾種實現方式:
1、通過Class.forName()方法加載字符串,就可以得到該字符串做代表的Class對象。
2、通過類名調用class屬性得到該類的Class對象。
例如:Class? clazz = String.class也可以得到String類的Class對象。
3、調用實例的getClass()方法。
例如:Date date = new Date();
Class? clazz = date.getClass();
通過上邊的兩句代碼就可以得到date實例的Class對象。
給你一個小的實例代碼:
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
public class test {
public static void main(String args[]) throws NoSuchMethodException,
IllegalAccessException, InvocationTargetException {
Foo foo = new Foo("這個一個Foo對象!");
Class clazz = foo.getClass();
Method m1 = clazz.getDeclaredMethod("outInfo");
Method m2 = clazz.getDeclaredMethod("setMsg", String.class);
Method m3 = clazz.getDeclaredMethod("getMsg");
m1.invoke(foo);
m2.invoke(foo, "重新設置msg信息!");
String msg = (String) m3.invoke(foo);
System.out.println(msg);
}
}
class Foo {
private String msg;
public Foo(String msg) {
this.msg = msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void outInfo() {
System.out.println("這是測試Java反射的測試類");
}
}