JAVA中的反射
来源:互联网 发布:端口号范围作用 编辑:程序博客网 时间:2024/05/21 11:17
反射的原理
应用在一些通用性比较高的代码中后面学到的框架,大多数都是使用反射来实现的在框架开发中,都是基于配置文件开发在配置文件中配置了类,可以通过反射得到类中的所有内容,可以让类中的某个方法来执行
使用反射首先需要得到Class类
三种方式获取Class类:类名.class 对象.getClass() 使用Class.forName("路径")类中内容分别可通过不同的类来表示:属性--Field构造方法--Constructor普通方法--Method
//获取Class类的三种方式 Class clazz1 = Person.class; Class clazz2 = new Person().getClass(); Class clazz3 = Class.forName("TestReflect.Person");
使用反射操作构造方法(不使用new新建类的实例)
//实例化类,不使用new 无参构造函数 @Test public void test1() throws Exception{ //得到Class Class c1 = Class.forName("TestReflect.Person"); //得到Person类的实例 Person p = (Person)c1.newInstance(); p.setName("lisi"); } //实例化类,不使用new 有参构造函数 @Test public void test2() throws Exception { //得到Class Class c1 = Class.forName("TestReflect.Person"); //传递的是有参数构造方法里面参数的类型,类型使用class形式 Constructor cs = c1.getConstructor(String.class); //通过有参数的构造方法设置值,,并创立对象 Person p = (Person)cs.newInstance("zhangsan"); }
使用反射操作类里面的属性
得到对象Class c3 = Class.forName("TestReflect.Person"); Person p1 = (Person)c3.newInstance(); 得到属性Field f1 = c3.getDeclaredField("name"); 允许操作私有属性f1.setAccessible(true);
//操作name属性 @Test public void test3() throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, InstantiationException { Class c3 = Class.forName("TestReflect.Person"); Person p1 = (Person)c3.newInstance(); //c3.getDeclaredFields();--得到所有属性 Field f1 = c3.getDeclaredField("name"); //可以操作私有属性 f1.setAccessible(true); f1.set(p1,"wangwu"); System.out.println(f1.get(p1)); }
使用反射操作普通方法
使用Method类来操作普通方法获得方法:Method m1 = c4.getDeclaredMethod("setName", String.class);执行方法:m1.invoke(p1,"haha");操作私有方法:m1.setAccessible(true);操作静态方法:m1.invoke(null,"变量");
//操作普通方法 @Test public void test4() throws Exception { Class c4 = Class.forName("TestReflect.Person"); //得到Person实例 Person p1 = (Person)c4.newInstance(); //得到普通方法 //c4.getDeclaredMethods()得到全部普通方法 Method m1 = c4.getDeclaredMethod("setName", String.class); //方法后面变量为函数参数类型 Method m2 = c4.getDeclaredMethod("ttt", String.class, int.class); //让setName方法执行,执行设置值 m1.invoke(p1,"haha"); System.out.println(p1.getName()); }
阅读全文
0 0
- JAVA中的类反射
- Java中的反射
- Java中的类反射
- Java中的反射机制
- JAVA中的反射机制
- java 中的反射
- Java中的反射机制
- java中的反射机制
- JAVA中的反射机制
- Java中的反射机制
- java中的反射应用
- java中的反射
- Java中的反射
- Java中的反射机制
- java中的反射
- java中的反射
- java中的反射机制
- java中的反射问题
- 常见排序算法之希尔排序
- 300+篇阿里技术热点解析及珍贵技术资料免费下载(文章+PDF+视频_持续更新)
- B
- HttpURLConnection上传文件(服务器)
- cgi fastcgi php-cgi php-fpm mod_php之间的理解
- JAVA中的反射
- android studio 使用Live Template添加自定义log
- java设置cookie
- springMVC配置定时任务
- oracle trunc() 函数用法
- niginx安装
- OBIEE12C 使用RPD文件
- vmware上的linux以nat方式固定ip上网
- @ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常