大型网站建设价格装修公司做网站有用吗
大型网站建设价格,装修公司做网站有用吗,南通建设信息网站,会计做帐模板网站反射是Java框架的核心#xff0c;无论是Tomcat#xff0c;SpringMVC#xff0c;SpringIOC#xff0c;SpringAOP#xff0c;动态代理#xff0c;都使用了反射
那么什么是反射#xff1f;-------------反射就是获取类信息的能力
Java有两种创建对象的方式#xff1a;①…反射是Java框架的核心无论是TomcatSpringMVCSpringIOCSpringAOP动态代理都使用了反射
那么什么是反射-------------反射就是获取类信息的能力
Java有两种创建对象的方式①new 对象 ②反射
因此反射的作用就是无需new对象就可以动态获取到一个类的全部信息包括属性方法构造器以及他们的修饰符参数注解等等....从而构造出对象实例并对对象实例进行操作
一、获取类信息
1、获取class对象
Class.forName(全类名) ----- 在 java文件阶段 就可以获取 字节码文件对象因此这是最常用的这种是最常用的类名.class ------ 要在类加载完成阶段才能获取对象名.getClass) -------- 要在对象已经被创建出来的阶段才能获取 //第一种Class clazz Class.forName(fanshe.person);//第二种Class clazz1 person.class;//第三种person person new person();Class clazz2 person.getClass();
2、获取变量
Filed[] fileds clazz.getDeclaredFileds(); //获取全部的变量
Filed[] fileds clazz.getFileds(); //获取public修饰的变量
Filed filed clazz.getFiled(变量名); //获取指定的public修饰的变量
Filed filed clazz.getDeclaredFiled(变量名); //获取指定的的变量
3、获取方法
Method[ ] methods clazz.getDeclaredMethods(); //获取全部的方法
Method[ ] methods clazz.getMethods(); //获取全部public修饰的方法
Method method clazz.getMethod(方法名,参数类型.class,参数类型.class...; //单独获取public修饰的方法
Method method clazz.getDeclaredMethod(方法名,参数类型.class,参数类型.class...); //单独获取方法
4、获取构造器
Constructor[] constructors clazz.getDeclaredConstructors(); //获取所有的构造器
Constructor[] constructors clazz.getConstructors(); //获取public修饰的构造器
Constructor constructor clazz.getConstructor(参数类型.class,参数类型.class..; //单独获取public修饰的构造器
Constructor constructor clazz.getDeclaredConstructor(参数类型.class ,参数类型.class….;//单独获取构造器
5、获取注解信息 Annotation[] annotations clazz.getAnnotations();
二、如何操作变量
下面看一段代码示例 Class clazz Class.forName(fanshe.person);System.out.println(----------获取 修改值--------------);//要想获取到值必须先创建对象给数据存储空间person p new person(); Field age clazz.getDeclaredField(age);//get() set()取值和赋值int ageValue (int) age.get(p);//类型转换System.out.println(ageValue);age.set(p, 20);int ageValue1 (int) age.get(p);System.out.println(ageValue1);Field height clazz.getDeclaredField(height);//私有数据需要使用暴力反射height.setAccessible(true);//暴力反射height.set(p, 180);System.out.println(height.get(p));//只有private类型需要使用暴力反射Field name clazz.getDeclaredField(name);name.set(p, 张三);System.out.println(name.get(p));Field eyes clazz.getDeclaredField(eyes);eyes.set(p, 2);System.out.println(eyes.get(p));
需要注意的是
如果该属性或方法类型为private那么需要使用暴力反射也就是 属性.setAccessible(true)
如果要获取private类型的方法那么需要使用getDeclared*****
三、调用方法
方法.invoke(对象参数); clazz Class.forName(fanshe.person);Method run clazz.getDeclaredMethod(run, String.class);//创建对象给方法以内存空间person p1 new person();//invoke()执行方法run.invoke(p1, 张三);Method change clazz.getDeclaredMethod(change,String.class,Integer.class);change.invoke(p1,小白,183);Method age clazz.getDeclaredMethod(getAge, Integer.class);//暴力反射age.setAccessible(true);age.invoke(p1, 18);
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/90240.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!