博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Class对象、反射、动态代理
阅读量:5137 次
发布时间:2019-06-13

本文共 2082 字,大约阅读时间需要 6 分钟。

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

}

转载于:https://www.cnblogs.com/ilellen/p/4218945.html

你可能感兴趣的文章
【题解】[P4178 Tree]
查看>>
QML学习笔记之一
查看>>
WPF中实现多选ComboBox控件
查看>>
ionic2+ 基础
查看>>
MyBaits动态sql语句
查看>>
用户空间与内核空间,进程上下文与中断上下文[总结]
查看>>
JAVA开发环境搭建
查看>>
django迁移数据库错误
查看>>
Data truncation: Out of range value for column 'Quality' at row 1
查看>>
字符串处理
查看>>
HtmlUnitDriver 网页内容动态抓取
查看>>
ad logon hour
查看>>
罗马数字与阿拉伯数字转换
查看>>
Eclipse 反编译之 JadClipse
查看>>
距离公式汇总以及Python实现
查看>>
Linux内核态、用户态简介与IntelCPU特权级别--Ring0-3
查看>>
第23月第24天 git命令 .git-credentials git rm --cached git stash clear
查看>>
java SE :标准输入/输出
查看>>
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>
好玩的-记最近玩的几个经典ipad ios游戏
查看>>