前言大家好,瑞雪后的第一天,周一大家期待着这个周五的到来。相信很多朋友上周末有两件事要做,赏雪和看EDG。哈哈言归正传,今天说说反射,java中经常用到。反射相信如果你刚接触Java,第一句话肯定会问什么是反射?反射有什么作用?为什么要使用反射?首先,反射是Java的特性之一。Java程序在项目中运行过程中,自动识别并创建相应的类,并可以动态调用该类的属性、构造方法、方法。一句话描述:可以在程序中动态调用不同的类和属性,进行特定的操作。因为反射可以在运行时动态加载需要的对象,所以在很多框架中都使用了反射。这次为了让大家更好的理解反射,我们将从以下几个方面进行介绍:基于反射创建对象,在反射中获取对象,在类中获取属性,在类中获取构造方法,在类中获取方法。基础数据准备为了方便演示,创建一个基础对象类。并基于他的介绍。创建的演示类JueJinUser如下。它包含四个属性,包括get和set方法,以及toString方法。没有施工方法。下面将介绍反射自动创建的相关反射方法。publicclassJueJinUser{privateIntegerid;privateStringname;privateStringtitle;privateIntegerage;publicIntegergetId(){returnid;}publicvoidsetId(Integerid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicStringgetTitle(){returntitle;}publicvoidsetTitle(Stringtitle){this.title=title;}publicIntegergetAge(){returnage;}publicvoidsetAge(Integerage){this.age=age;}@OverridepublicStringtoString(){return"爵劲用户{"+"id="+id+",name='"+name+'\''+",title='"+title+'\''+",age="+age+'}';}}复制代码基于反射创建对象基于反射创建类对象主要有两种方式反射:一是通过类对象的newInstance()方法创建对象,二是通过构造函数中的newInstance()方法创建对象。类对象的newInstance()方法类对象的newInstance()方法创建如下:Classclass=JueJinUser.class;JueJinUserjueJinUseByClass=(JueJinUser)class.newInstance();复制代码构造函数ClassjueJinUserClass=JueJinUser.class的newInstance()方法;构造函数constructor=jueJinUserClass.getConstructor();JueJinUserjueJinUserByConstructor=(JueJinUser)constructor.newInstance();复制代码需要注意的是,基于类对象的newInstance()的两种创建方法中的第一种只能是无参构造方法,而第二个基于构造函数的newInstance()方法可以有一个有参构造方法和一个无参构造方法,更加灵活。在反射中获取对象获取反射对象的方式有3种,分别是:Class.forName、.class方法和getClass()方法。反射中获取对象的方法在项目中还是被很多人使用的,相信大家都不陌生。Class.forNameClassclzForName=Class.forName("com.example.demo.module.JueJinUser");复制代码.class方法ClassclzForClass=JueJinUserString.class;复制代码getClass()方法JueJinUserJueJinUser=newJueJinUser();ClassclzNewObject=str.getClass();复制代码获取类信息中的属性,但是获取不到父类的信息。格式如下:Classclz=JueJinUser.class;Field[]fields=clz.getFields();System.out.println("---getFields开始---");for(Fieldfield:fields){System.out.println(field.getName());}System.out.println("---getFields结束---");System.out.println("---getDeclaredFields开始---");Field[]declaredFields=clz.getDeclaredFields();for(Fieldfield:declaredFields){System.out.println(field.getName());}System.out.println("---etDeclaredFields结束---");获取类中的构造函数通过getConstructors和getDeclaredConstructors方法可以获取类中的构造函数信息,其中getConstructors可以获取类中的构造函数,getDeclaredConstructors方法可以获取类中所有的构造函数,但是你不能't获取父类的构造方法信息。格式如下:System.out.println("---getConstructorsstart---");构造函数[]构造函数=clz.getConstructors();for(Constructorconstructor:constructors){System.out.println(constructor.getName());}System.out.println("---getConstructors结束---");System.out.println("---getDeclaredConstructors开始---");构造函数[]declaredConstructors=clz.getDeclaredConstructors();for(Constructorconstructor:declaredConstructors){System.out.println(constructor.getName());}System.out.println("---getDeclaredConstructors结束---");复制代码通过getMethods和getDeclaredMethods方法获取类中的构造方法信息,其中getMethods可以获取类中的构造方法,getDeclaredMethods方法可以获取所有类中的方法,但是获取不到父类的方法信息。格式如下:System.out.println("---getMethodsstart---");方法[]方法=clz.getMethods();for(Methodmethod:methods){System.out.println(method.getName());}System.out.println("---getMethods结束---");System.out.println("---getDeclaredMethods开始---");方法[]declaredMethods=clz.getDeclaredMethods();for(Methodmethod:declaredMethods){System.out.println(method.getName());}System.out.println("---getDeclaredMethods结束---");如果您有一点帮助,请点个赞。或者可以加入我的开发交流群:1025263163互相学习,我们会有专业的技术解答。如果您觉得这篇文章对您有用,请给我们的开源项目一个小星星:https://gitee。com/ZhongBangKe...非常感谢!
