<强>一、反射强>
反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为JAVA语言的反射机制。
要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是类类中的方法,所以先要获取到每一个字节码文件对应的类类型的对象。对于反射的操作实际上就是通过类对象获取:
*,数组;领域:提供有关类或接口的单个字段的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)字段或实例字段。操作类的成员变量。
* b, java.lang.reflect.Constructor
* c, java.lang.reflect.Method:操作类的方法。
在学习反射基础前先创建一个人对象作为实例
包com.jalja.org.base.relfect; 公共类人{ 私人字符串名称; int年龄; 公共字符串地址; 公众人物(){ } 个人(字符串名称){ this.name=名称; } 人(字符串名称,int年龄){ this.name=名称; 这一点。年龄=年龄; } 公众人物(字符串名称,int年龄,字符串地址){ this.name=名称; 这一点。年龄=年龄; 这一点。地址=地址; } 公共空间展示(){ System.out.println(“秀”); } 公共空间方法(String s) { system . out。println(“方法”+ s); } 公共字符串getString (String s, int i) { 返回s +”——“+ i; } 私人空间函数(){ System.out.println(“函数”); } @Override 公共字符串toString () { 返回“人(name=" +名字+ ",年龄=? +”时代,地址=" +地址 +“]”; } } >之前<强>二,获取类的类对象强>
公共静态孔隙getClassObject()抛出ClassNotFoundException {//方式一:对象的getClass()方法 人person1=new (); 人person2=new (); 类c1=person1.getClass (); 类c2=person2.getClass (); System.out.println (person1==person2);//假的 System.out.println (c1==c2);//真不管JVM内存中有多少个对象,对于字节码文件来说只有一份//方式二:数据类型的静态类属性 类c3=Person.class; System.out.println (c1==c3);//真实的//方式三:类类的静态方法//公共静态Class<& # 63;比;forName(字符串名称)抛出ClassNotFoundException 类c4=forname (“com.jalja.org.base.relfect.Person”); System.out.println (c1==c4);//真实的 } >之前<强>三,java.lang.reflect.Constructor
:对象并使用构造函数类。强> 1,获取构造函数对象
//获取类对象所表示的类的构造方法 公共静态孔隙getConstructorTest()抛出异常{ 类c4=forname (“com.jalja.org.base.relfect.Person”);//1,获取类对象所表示的类所有公共构造方法//公共Constructor<& # 63;在[]getConstructors()抛出SecurityException 构造函数[]cs=c4.getConstructors ();//2,获取类对象所表示的类所有构造方法//公共Constructor<& # 63;在[]getDeclaredConstructors()抛出SecurityException 构造函数[]cs2=c4.getDeclaredConstructors ();//3、获取类对象所表示类的指定指定公共构造方法,parameterTypes参数是类对象的一个数组,是指定数据类型的字节码//公共ConstructorgetConstructor (Class<& # 63;在…parameterTypes); 构造函数cs3=c4.getConstructor();//获取公共的无参构造方法的构造函数对象//获取该构造函数公众人物(字符串名称,int年龄,字符串地址) 构造函数cs4=c4.getConstructor (String.class、int.class String.class);//4,获取cls对象所表示类指定的构造范法官parameterTypes参数是类对象的一个数组,它按声明顺序标识构造方法的形参类型的字节码。//公共Constructor getDeclaredConstructor (Class<& # 63;在…parameterTypes);//获取该构造函数个人(字符串名称)的构造函数对象 构造函数cs5=c4.getDeclaredConstructor (String.class); } >之前 2,通过构造函数对象创建类对象所表示类的实例
公共静态孔隙createObject()抛出异常{ 类c4=forname (“com.jalja.org.base.relfect.Person”);//使用此构造函数对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例//公共T newInstance(对象……initargs);//人人=new () 构造函数cs3=c4.getConstructor();//获取公共的无参构造方法的构造函数对象 对象obj=cs3.newInstance ();//人=new人(“jalja”, 21岁的“北京”); 构造函数cs4=c4.getConstructor (String.class、int.class String.class); 对象其中obj1=cs4.newInstance (“jalja”, 21岁的“北京”); System.out.println(其中obj1);//人(名字=jalja=21岁地址=北京)//实例化一个私有的构造函数个人(字符串名称)//控制java的访问检查//公共空间种setAccessible(布尔标志)//将此对象的访问标志设置为指示的布尔值。值为真则指示反射的对象在使用时应该取消Java语言访问检查。//值为假则指示反射的对象应该实施Java语言访问检查。 构造函数cs5=c4.getDeclaredConstructor (String.class); cs5.setAccessible(真正的); 对象methoda=cs5.newInstance(“张三丰”); System.out.println (methoda);//人[name=张三丰,年龄=0,地址=null] }新手学习java反射基础