Java反射总结
来源:互联网 发布:电子数据司法鉴定资质 编辑:程序博客网 时间:2024/06/14 05:24
反射获取Class的对象的方法
Class类中的静态方法 Class.forName(类的全限定名)
Class类包含:
子段:Field
成员方法:Method
构造方法:Constroctor
利用构造方法构造对象
第一步:利用·Class,forName()方法得到Class对象
第二步:利用Class对象得到构造器对象Constructor对象
第三部:使用Constructor对象的newInstance方法生成一个对象
package cn.itcast_02;import java.lang.reflect.Constructor;/* * 需求:通过反射去获取该构造方法并使用: * public Person(String name, int age, String address) * * Person p = new Person("林青霞",27,"北京"); * System.out.println(p); */public class ReflectDemo2 { public static void main(String[] args) throws Exception { // 获取字节码文件对象 Class c = Class.forName("cn.itcast_01.Person"); // 获取带参构造方法对象 // public Constructor<T> getConstructor(Class<?>... parameterTypes) Constructor con = c.getConstructor(String.class, int.class, String.class); // 通过带参构造方法对象创建对象 // public T newInstance(Object... initargs) Object obj = con.newInstance("林青霞", 27, "北京"); System.out.println(obj); }}
当构造方法方法被私有化的时候需要收到开启:
con.setAccessible(true);// 值为true则指示反射的对象在使用时应该取消Java语言访问检查。
获取私有变量并进行设置
步骤:
第一步:获取这个对象p
第二步:通过Class对象c得到私有变量Field的对象
第三步:Field.set(p,”变量值”);
package cn.itcast_03;import java.lang.reflect.Constructor;import java.lang.reflect.Field;/* * 通过发生获取成员变量并使用 */public class ReflectDemo { public static void main(String[] args) throws Exception { // 获取字节码文件对象 Class c = Class.forName("cn.itcast_01.Person"); // 获取所有的成员变量 // Field[] fields = c.getFields(); // Field[] fields = c.getDeclaredFields(); // for (Field field : fields) { // System.out.println(field); // } /* * Person p = new Person(); p.address = "北京"; System.out.println(p); */ // 通过无参构造方法创建对象 Constructor con = c.getConstructor(); Object obj = con.newInstance(); System.out.println(obj); // 获取单个的成员变量 // 获取address并对其赋值 Field addressField = c.getField("address"); // public void set(Object obj,Object value) // 将指定对象变量上此 Field 对象表示的字段设置为指定的新值。 addressField.set(obj, "北京"); // 给obj对象的addressField字段设置值为"北京" System.out.println(obj); // 获取name并对其赋值 // NoSuchFieldException Field nameField = c.getDeclaredField("name"); // IllegalAccessException nameField.setAccessible(true); nameField.set(obj, "林青霞"); System.out.println(obj); // 获取age并对其赋值 Field ageField = c.getDeclaredField("age"); ageField.setAccessible(true); ageField.set(obj, 27); System.out.println(obj); }}
得到成员函数并且使用
步骤
第一步:通过上述的步骤获取到该类的对象
第二步:通过Class对象得到该方法的类。
第三部:听过方法类的invoke方法进行设置。
package cn.itcast_04;import java.lang.reflect.Constructor;import java.lang.reflect.Method;public class ReflectDemo { public static void main(String[] args) throws Exception { // 获取字节码文件对象 Class c = Class.forName("cn.itcast_01.Person"); // 获取所有的方法 // Method[] methods = c.getMethods(); // 获取自己的包括父亲的公共方法 // Method[] methods = c.getDeclaredMethods(); // 获取自己的所有的方法 // for (Method method : methods) { // System.out.println(method); // } Constructor con = c.getConstructor(); Object obj = con.newInstance(); /* * Person p = new Person(); p.show(); */ // 获取单个方法并使用 // public void show() // public Method getMethod(String name,Class<?>... parameterTypes) // 第一个参数表示的方法名,第二个参数表示的是方法的参数的class类型 Method m1 = c.getMethod("show"); // obj.m1(); // 错误 // public Object invoke(Object obj,Object... args) // 返回值是Object接收,第一个参数表示对象是谁,第二参数表示调用该方法的实际参数 m1.invoke(obj); // 调用obj对象的m1方法 System.out.println("----------"); // public void method(String s) Method m2 = c.getMethod("method", String.class); m2.invoke(obj, "hello"); System.out.println("----------"); // public String getString(String s, int i) Method m3 = c.getMethod("getString", String.class, int.class); Object objString = m3.invoke(obj, "hello", 100); System.out.println(objString); // String s = (String)m3.invoke(obj, "hello",100); // System.out.println(s); System.out.println("----------"); // private void function() Method m4 = c.getDeclaredMethod("function"); m4.setAccessible(true); m4.invoke(obj); }}
阅读全文
0 0
- 【Java】Java反射总结
- java反射总结
- java 反射 总结
- java 反射 总结
- java 反射 总结
- java 反射 总结
- java 反射总结
- JAVA 反射学习总结
- java 反射知识总结
- java 反射知识总结
- Java-反射总结
- JAVA 反射总结
- java中的反射总结
- Java反射机制总结
- Java总结(16)反射
- java反射总结
- Java反射学习总结
- java反射机制总结
- memo
- WEB前端开发 辨析类 面试真题 大集锦
- java实现快速排序
- 面试技巧
- 文本检测双蛇模型
- Java反射总结
- 虚拟继承
- ASP.NET MVC Model 验证总结
- Django入门-5:模型的基本使用2-字段
- 【模板】最小生成树Prim 4heap
- oracle在存储过程里面调用其它的存储过程(包含游标)
- html中实现我的第一个网页
- css-day7-个人学习笔记
- 人脸特征点检测(一):深度卷积网络级联