Java中反射技术点记录
来源:互联网 发布:长歌门成男脸型数据 编辑:程序博客网 时间:2024/05/20 07:52
为了避免遗忘,将Reflect中常用方法和步骤记录下来。
- 测试所用的person类如下:
package neuq.test;public class Person {private String name;private int age;public Person(String name, int age) {super();this.name = name;this.age = age;}public Person(){super();}
public static void staticMethod(){System.out.println("staticMethod run!!");};public void paramMethod(String name,int age){System.out.println(name+"--------"+age);}public void noParamMethod(){System.out.println("noParamMethod run!!!!");}}
2.JUnit测试代码如下:
package neuq.test;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import org.junit.Test;public class ReflectTest {/* * 测试拿到Class的三种方法 * * @author:Dean * @data:2014-6-23 */@Testpublic void testGetClass() throws ClassNotFoundException{//方法一:一般不用Person p=new Person();Class c1=p.getClass();//方法二:很少用Class c2=Person.class;//方法三:常用String className="neuq.test.Person";Class c3=Class.forName(className);System.out.println(c1);System.out.println(c2);System.out.println(c3);}/* * 测试通过指定的构造器实例化对象。 * @author:Dean * @date:1994-6-23 * */@Testpublic void testGetSpecifiedConstructor() throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException,IllegalAccessException, IllegalArgumentException, InvocationTargetException{//通过类名拿到ClassString className="neuq.test.Person";Class clazz=Class.forName(className);//通过Class对象拿到Constructor,并制定参数类型。Constructor constructor=clazz.getConstructor(String.class,int.class);//通过Constructor实例化对象。Person p=(Person) constructor.newInstance("Dean",20);System.out.println(p);}/* * 测试反射字段的方法&以及暴力访问 * * @author:Dean * @date:2014-6-23 */@Testpublic void testGetField() throws Exception{//首先拿到Class对象,并实例化String className="neuq.test.Person";Class clazz=Class.forName(className);Constructor constructor=clazz.getConstructor(String.class,int.class);Object obj=constructor.newInstance("Dean",20);/* * 拿到字段,并设置值 * 私有属性只能根据getDeclaredXXX()拿到。否则会出NoSuchXXX异常 */Field field=clazz.getDeclaredField("name");String value="Sam";//暴力访问私有属性,设置可访问性。field.setAccessible(true);field.set(obj, value);}/* *测试反射 静态方法 带参数的方法 不带参数的方法 * @ staticMethod() * @paramMethod() * @noParamMethod() * * @author:Dean * @date:2014-6-23 */@Testpublic void testGetMethod() throws Exception{//先拿到Class的对象String className="neuq.test.Person";Class clazz=Class.forName(className);Constructor constructor=clazz.getConstructor(String.class,int.class);Object obj=constructor.newInstance("Dean",20);//先测试静态方法,不需要实例化对象Method method1=clazz.getMethod("staticMethod");method1.invoke(null, null);//测试无参数方法,需要实例化对象,不需要指定参数Method method2=clazz.getMethod("noParamMethod");method2.invoke(obj, null);//测试带参数方法,需要实例化对象,需要指定参数Method method3=clazz.getMethod("paramMethod", String.class,int.class);method3.invoke(obj, "Sam",20);}}
0 0
- Java中反射技术点记录
- Java中反射技术
- 公共技术点之 Java反射 Reflection
- 公共技术点之 Java 反射 Reflection
- 公共技术点之 Java 反射 Reflection
- 公共技术点之 Java 反射 Reflection
- 公共技术点之 Java 反射 Reflection
- 公共技术点之 Java 反射 Reflection
- 公共技术点之 Java 反射 Reflection
- 公共技术点之 Java 反射 Reflection
- Android中Java反射技术
- Java中反射技术总结
- (转载)公共技术点之 Java 反射 Reflection
- 记录反射技术的知识点
- java反射--记录
- java反射内容记录
- java反射记录
- java反射简单记录
- Raphael.js最基本绘制示例代码
- nginx自动切割日志访问文件脚本
- android开发之SQLite数据库 增、删、改、查
- C# Linq First 和 FirstOrDefault的区别
- Lua栈介绍及C++调用Lua过程分析
- Java中反射技术点记录
- it管理培训 IT服务管理
- Array into ranges of consecutive numbers
- NamedJdbcTemplate 使用方法
- MySQL在大型网站的应用架构演变
- 回顾老师所讲的枚举
- hibernate 对象的三种状态
- java本地调用 - JNA技术
- 51单片机MAX7219程序