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);
}

}

最新文章

  1. 新人入职100天,聊聊自己的经验&amp;教训
  2. PowerDesigner 逆向工程 Mariadb 失败
  3. MAC使用CocoaPods
  4. (转)定制iOS 7中的导航栏和状态栏
  5. Javascript原型钩沉
  6. Android 首次进入应用时加载引导界面
  7. js获取网页屏幕可见区域高度
  8. VS2017使用 SQL Localdb问题两则
  9. Python基础练习题100例(Python 3.x)
  10. 学习easyui的小伙伴有福利了
  11. Java 8 Nashorn JavaScript
  12. 2019.03.26 bzoj4447: [Scoi2015]小凸解密码(线段树)
  13. pycharm常用设置和快捷键大全
  14. JavaScript高级特性-数组
  15. EF 踩过的坑
  16. pdb学习笔记
  17. 在windows下的hdfs客户端编写
  18. centos7下安装ossec
  19. 在 if 条件句中使用向量
  20. 【刷题】BZOJ 1001 [BeiJing2006]狼抓兔子

热门文章

  1. getAnnotation的一个坑
  2. JavaScript学习系列博客_18_JavaScript中的匿名函数
  3. DP搬运工1 [来自yyy--mengbier的预设型dp]
  4. 设置Anaconda启动jupyter的默认目录
  5. 第 1 篇 Scrum 冲刺博客(5.21)
  6. 区块链入门到实战(19)之以太坊(Ethereum) – 以太币
  7. Asp.Net Core Swagger 接口分组(支持接口一对多暴露)
  8. 无法创建新虚拟机: 无法打开配置文件“F:\BigData\vm12\centos01\centos01.vmx”: 拒绝访问。
  9. python爬虫实战---爬取大众点评评论
  10. 使用kind快速创建本地集群