java反射机制简单认知
来源:互联网 发布:菜鸟网络cfo 编辑:程序博客网 时间:2024/05/17 01:19
1、通过Object类的getClass()方法,例如:
Class c1 = new String("").getClass();
2、通过Class类的静态方法forName()来实现:
Class c2 = Class.forName("MyObject");
3、若果说T是一个已定义的类型的话,在Java中,他的.class文件名:T.class就代表了与其匹配的Class对象
Class c3 = Manager.class;
Class c4 = int.class;
Class类中也存在一些重要的方法:
1、getName()
一个Class对象描述了一个特定类的特定属性,而这个方法就是返回String形式的该类的简要描述。
2、newInstance()
该方法可以根据摸个Class对象产生其对应类的实例。需要强调的是,他调用的时此类的默认构造函数。
MyObject x = new MyObject();
MyObject y = x.getClass().newInstance();
3、getClassLoader()
返回该Class对象对应的类的加载器
4、getSuperClass()
返回某自雷所对应的直接父类所对应的Class对象。
5、isArray()
判定此Class对象所对应的是否是一个数组对象
/**
* 提供关于Java反射的工具
*
* @author QzC
*
*/
public class RelUtils {
/**
* 得到某个对象的公共属性
*
* @param owner
* @param fiedName
* @return
* @throws Exception
*/
public Object getProperty(Object owner, String fiedName) throws Exception {
Class ownerClass = owner.getClass();
Field filed = ownerClass.getField(fiedName);
Object property = filed.get(owner);
return property;
}
/**
* 得到某类的静态公共属性
*
* @param className
* @param filedName
* @return
* @throws Exception
*/
public Object getStaticProperty(String className, String filedName) throws Exception{
Class ownerClass = Class.forName(className);
Field field = ownerClass.getField(filedName);
Object property = field.get(ownerClass);
return property;
}
/**
* 执行某对象的方法
*
* @param owner
* 对象
* @param methodName
* 方法名
* @param args
* 参数
* @return 这个方法的返回值
* @throws Exception
*/
public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception {
Class ownerClass = owner.getClass();
Class[] argsClass = new Class[args.length];
for(int i=0, j=args.length; i<j; i++){
argsClass[i] = args[i].getClass();
}
Method method = ownerClass.getMethod(methodName, argsClass);
return method.invoke(owner, args);
}
/**
* 执行某类的静态方法
*
* @param className
* 类的全类名(包名+类名)
* @param methodName
* 方法名
* @param args
* 参数
* @return 执行方法返回的结果
* @throws Exception
*/
public Object invokeStaticMethod(String className, String methodName, Object[] args) throws Exception {
Class ownerClass = Class.forName(className);
Class[] argsClass = new Class[args.length];
for(int i=0, j=args.length; i<j; i++){
argsClass[i] = args[i].getClass();
}
Method method = ownerClass.getMethod(methodName, argsClass);
return method.invoke(null, args);
}
/**
* 新建实例
*
* @param className
* 类名(包名+类名)
* @param args
* 构造函数的参数
* @return
* @throws Exception
*/
public Object newInstatnce(String className, Object[] args) throws Exception {
Class newoneClass = Class.forName(className);
Class[] argsClass = new Class[args.length];
for(int i=0, j=args.length; i<j; i++){
argsClass[i] = args[i].getClass();
}
Constructor cons = newoneClass.getConstructor(argsClass);
return cons.newInstance(args);
}
/**
* 某对象是否是该类的实例
*
* @param obj
* 对象
* @param cls
* 类
* @return 如果obj是此类的实例,则返回true
*/
public boolean isInstance(Object obj, Class cls){
return cls.isInstance(obj);
}
/**
* 得到数组中某个元素
*
* @param array
* 数组
* @param index
* 索引
* @return 返回指定数组对象中索引组件的值
*/
public Object getByArry(Object array, int index){
return Array.get(array, index);
}
}
- java反射机制简单认知
- Java反射机制--肤浅认知
- java反射机制简单例子
- java反射机制简单实例
- 简单的Java反射机制
- java反射机制简单例子
- Java 反射机制简单总结
- 简单的Java反射机制
- Java反射机制简单示例
- 简单认识java反射机制
- 简单理解java反射机制
- JAVA 反射机制简单运用
- java反射机制简单应用
- 简单理解java反射机制
- java-反射机制-简单代码
- java反射机制的简单实现步骤
- JAVA反射机制的简单应用
- JAVA反射机制的简单应用
- PHP开发代码规范
- genymotion模拟器常见问题
- Python-被调用函数中获取调用函数信息(转)
- poj 1330 Nearest Common Ancestors
- 数据结构实验之图论四:迷宫探索
- java反射机制简单认知
- 父类引用指向子类对象
- 单链表的链表拆分
- 继承执行顺序
- js正则表达式学习笔记
- JDK配置环境变量要点
- 从零学React Native之04自定义对话框
- 动态规划(经典背包问题)
- Activity的生命周期