[ java ] java基础反射!
来源:互联网 发布:知乎事业单位与国企 编辑:程序博客网 时间:2024/05/30 05:00
java反射
反射:一句话来说就是把JAVA中的每一个成分解析在为相应的JAVA类。对java中的每一个成分都解析成一个类。
1. Class类
Class类代表JAVA类,它的实例对应实例在内存中的字节码。每个类被加载到内存中,都会被解析成字节码。
那么Class的实例就表示这份字节码。
得到Class实例对象的方法:
1)直接类名调用: Person.class;
2)对象调用: new Person().getClass();
3)从内存中加载: Class.forName("java.lang.String");
2.java反射的三个重要类:
1)Constructor类:代表类中的一个构造方法。
Constructor<String> constructor = String.class.getConstructor(String.class);//只取得公有方法。
//获取构造方法,传入一个参数,并且参数为String类型的构造方法
String string = (String)constructor.newInstance(new String("abc"));
//通过构造方法反射实例化对象。传入的参数必须是和获取的构造方法中取得的参数是一样的。
2)Method:代表类中的一个方法。以下代码为反射成员方法:
System.out.println("----------------反射成員方法-------------------------");methodCharAt = String.class.getMethod("charAt", int.class);String str1 = "abc";// 下面的invoke则要首先指定是哪个对象去调用上面指定的方法,后面一个则是传入的参数。System.out.println(methodCharAt.invoke(str1, 1));// methodCharAt.invoke(null,1); //这样则是表示静态方法调用。
注意: 而这里的反射main方法则是需要对main方法中的参数进行包装。因为jdk1.5为了兼容jdk以前的版本。会对传入的数据进行拆分成单个对象。
System.out.println("----------------反射main方法-------------------------");Method mainMethod = Class.forName("com.test.Person").getMethod("main", String[].class);//System.out.println("main方法反射的错误传参方式。");//mainMethod.invoke(null,new String[]{"ab","abc"});/** * 异常:wrong number of arguments * **//** * jdk1.5为了兼容jdk1.4,在传入一个Object类型的数组(String 直接继承Object),invoke给自动的进行拆开 * 其中的每一个元素作为一个参数。这样就会导致了参数个数的不匹配。 * 可能是因为,jdk1.5是支持可变参数的,但是在1.5以前是不支持可变参数的。 * * ***/System.out.println("main方法反射的第一种传参方式。");//这里就将数组再次的去打包成一个包,这样被拆开的时候还一个数组。mainMethod.invoke(null,(Object)new String[]{"ab","abc"});System.out.println("main方法反射的第二种传参方式。");//这里强制转换成一个Object ,目的只是去骗过编译器,//这样编译器不会去进行拆分操作。传入的依旧是一个数组。mainMethod.invoke(null,new Object[]{new String[]{"ab","abc"}});
3)代表类中一个字段.
Field fieldX = pt1.getClass().getDeclaredField("x");
如果为私用变量则不能够进行输出,那么就可以去进行暴力反射:
fieldX.setAccessible(true);
3.反射的作用:
1)实现动态代理
2)实现框架
- [ java ] java基础反射!
- java反射(一):反射基础
- Java 反射基础
- java基础加强--反射
- java反射基础
- java 反射基础学习
- java反射的基础
- Java基础21-反射
- Java基础(反射案例)
- Java基础加强---反射
- java基础加强--反射
- java基础之 反射
- java基础之反射
- Java基础复习:反射
- java反射基础
- Java基础加强: 反射
- Java基础加强--反射
- java反射机制基础
- 成功人士的经典语录、值得学习
- [ java ] java基础常用类!
- [ java ] java基础集合!
- 表单提交ckeditor并获取其值【鸡蛋】
- [ java ] java基础动态代理!
- [ java ] java基础反射!
- linux内核调度算法--CPU时间片如何分配
- [ java ] java基础泛型!
- Android4.0 的编译慢的解决方案
- 一篇基于opencv的人脸识别文章
- ssh整合web.xml的配置
- [ java ] JNI初步!
- 进程的阻塞和挂起
- 关于自增自减:C、C++自增自减运算符的研究