码迷,mamicode.com
首页 > 其他好文 > 详细

Class对象、反射、动态代理

时间:2015-01-13 15:37:58      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

     Class对象是所有类的根源,Object是所有对象的根源。

     编译后的新类会产生一个Class对象,保存在同名的.class文件中。每个类都有一个Class对象,它包含了所有的与类有关的信息。所有的Class对象都是在第一次使用时,动态加载到jvm中的。

  反射:在运行时打开和检查.class文件,通过来访问Class对象属性以及方法,Class类与java.lang.reflect类库一起对反射进行了支持。

     

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Student {
private String name;
private int flag;
public String sex;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getFlag() {
return flag;
}

public void setFlag(int flag) {
this.flag = flag;
}

public boolean isRight(int flag) {
return flag > 60;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public static void main(String[] args) {
try {
Class<?> clazz = Class
.forName("com.leadbank.basic.reflect.Student");
Object obj = clazz.newInstance();
Field[] field = clazz.getFields();
for (Field temp : field) {
System.out.println(temp.getType() + "------" + temp.getName());
}
Method[] method = clazz.getMethods();
for (Method temp : method) {
System.out.println(temp.toGenericString() + "------"
+ temp.getName());
if (temp.toGenericString().contains("isRight")) {
Integer i=80;
Object o=temp.invoke(obj,i);
System.out.println(o);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

动态代理:通过反射机制动态访问类

接口

public interface Interface {

public String sysout(String name);

}

实现类

public class RealObject implements Interface {

public String sysout(String name) {
return "hello!" + name;
}

}

代理类

public class DynamicProxyHandler implements InvocationHandler {

private Object proxy;

public DynamicProxyHandler(Object proxy) {
this.proxy = proxy;
}

public Object invoke(Object obj, Method method, Object[] args)
throws Throwable {
return method.invoke(proxy, args);
}

public static void main(String[] args) {
RealObject ro = new RealObject();
Interface proxy=(Interface) Proxy.newProxyInstance(Interface.class.getClassLoader(), new Class[]{Interface.class}, new DynamicProxyHandler(ro));
Object obj=proxy.sysout("jack");
System.out.println(obj);
}

}

Class对象、反射、动态代理

标签:

原文地址:http://www.cnblogs.com/ilellen/p/4218945.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!