Java反射
来源:互联网 发布:php程序员招聘 编辑:程序博客网 时间:2024/05/29 15:04
一:java反射的基础概念
一般当使用一个类的时候,是通过new来创建得到对象。而反射是在运行时刻通过对象来得到这个类。
二:实现
1、需要得到Class,获取Class对象三种方法:
①实例变量 eg:A a=new A();Class
clazz=A.getClass();
②通过类名 eg:Clas clazz=A.class;(只会加载类,不会触发类构造器初始化)
③Class.forName(String className);
Class clazz=Class.forName("类路径.类名");
Class clazz=Class.forName("类路径.类名",false,类名.class.getClassLoader());
初始化参数代表是否对加载的类进行初始化,false代表不进行初始化类,反之则进行。
2、根据需求参照jdk文档中Class的使用
以下实现2个案例
第一个获取类的public方法信息
/** * 打印类信息 * @author YKW * @description TODO */public class ClassUtil {public static void printMethodMessage(Object obj){//获取类类型Class c=obj.getClass();//传递的是哪个子类的对象,就是获取哪个子类 类类型System.err.println("类名:"+c.getName());//方法对象Method[] ms=c.getMethods();//c.getDeclaredMethods()第一个获取public方法第二个获取所有方法for(int i=0;i<ms.length;i++){//返回值类型的类类型Class returnType=ms[i].getReturnType();System.err.print("返回值类型的类类型"+returnType);System.err.println(returnType.getName());System.err.println("方法名称:"+ms[i].getName()+"(");//获取参数类型:得到的参数列表的类型的类类型Class[] parmTypes=ms[i].getParameterTypes();for (Class class1:parmTypes) {System.err.print("参数:"+class1.getName()+",");}System.err.println(")");}}}
写个main方法调用
public static void main(String[] args) { String s="hello"; ClassUtil.printMethodMessage(s);}
运行结果:
第二个方法反射
/** * 方法的反射 * @author YKW * @description TODO */public class MethodDemo1 {public static void main (String arg[]) {//获取print(int,int)方法// 1、获取类的信息,得到类的类类型,A a1=new A();Class c=a1.getClass();//2、获取方法,名称和参数列表决定,//getMethod获取的是public方法try {Method m= c.getMethod("print", new Class[]{int.class,int.class});//c.getMethod("print", int.class,int.class);//方法的反射:用m对象来进行方法调用和a1.print效果相同,没有返回值返回null有返回值返回具体的返回值Object o= m.invoke(a1,new Object[]{10,20});} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}class A{public void print(int a,int b){System.err.println(a+b);}public void print(String a,String b){System.err.println(a+b);}}
运行结果:
还有一个小tip:反射操作是编译后操作的(可以通过集合泛型来证明)以下不在复述。
0 0
- 【反射】JAVA反射机制
- JAVA 反射
- java 反射
- Java反射
- java反射
- java反射
- JAVA反射
- java 反射
- Java 反射
- java 反射
- Java反射
- java反射
- JAVA 反射
- java 反射
- Java反射
- java反射
- java 反射
- java 反射
- 实战:在Java Web项目中使用HBase
- APP测试、WEB测试简单了解
- Computer Grahpics: Priciples and Practice 3rd
- 删除git远程仓库上面的分支
- Android进阶常识总结
- Java反射
- springMVC 控制层添加异步线程
- 忙
- js 开发环境配置
- VMware Workstation开机进程太多解决方案
- Caliburn.Micro入门
- 面试题(含 runloop)
- OpenGL Super Bible 6th
- 解读加拿大综合类大学排名 提升雅思成绩刻不容缓