首页 > 代码库 > 反射机制总结归纳
反射机制总结归纳
<strong abp="697"><span abp="698" style="font-size:24px;BACKGROUND-COLOR: #ffffff">通过<span abp="699" style="font-size:32px;color:#000099;">反射机制取得</span>类中的公有或私有等的<span abp="700" style="font-size:32px;color:#000099;">构造方法</span>信息、访问公有或私有的<span abp="701" style="font-size:32px;color:#000099;">成员方法</span>以及访问公有或私有的<span abp="702" style="font-size:32px;color:#000099;">成员变量</span>。</span></strong>
<strong abp="704"><span abp="705" style="font-size:24px;"><strong abp="706"><span abp="707" style="font-size:24px;"></span></strong></span></strong>
<span abp="709" style="BACKGROUND-COLOR: #ffffff"><strong abp="710"><span abp="711" style="font-size:24px;">主</span><span abp="713" style="font-size:24px;">要看第一段代码。</span></strong></span>
<span abp="715" style="BACKGROUND-COLOR: #ffffff"></span>
package com.fs.po;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;public class Test {private void m1() throws Exception { /** 得到Stu中的public类型的构造方法<得到公有构造方法> */ // 通过Stu类的public构造方法创建Stu对象 Class c = Class.forName("com.fs.po.Stu");// Class.forName("全类名") ===> 得到Class对象的方式二 <推荐使用>// Class c = Stu.class;// 类名.class ===> 得到Class对象的方式一// Class c = new Stu().getClass();// 对象.getClass() ===> 得到Class对象的方式三 <很少使用,不推荐,知道了解就好> // 取得Stu()无参构造方法信息 <体现强转> Constructor con1 = c.getConstructor(); Stu stu1 = (Stu) con1.newInstance();// 调用Stu()创建Stu对象 stu1.say2(); System.out.println("=============="); // 取得public Stu(String name, int age)构造方法信息 <体现泛型> Constructor<Stu> con2 = c.getConstructor(String.class,Integer.class); Stu stu2 = con2.newInstance("小米",20);// 调用Stu(String name, Integer age)创建对象 stu2.say2(); // System.out.println("========此种写法不建议,可读性差=======");// 取得public Stu(String s, String s2, int age)构造方法信息// Stu stu3 = (Stu) Class.forName("com.fs.po.Stu").getConstructor(String.class,String.class ,int.class).newInstance("民大","曉曉",4);// stu3.say2();}private void m2() throws Exception { /** 得到Stu中的private类型的构造方法<私有构造方法,理论上通过new对象是得不到的> */ //通过Stu类的private构造方法创建Stu对象 Class c = Class.forName("com.fs.po.Stu");// 封装了Stu的信息 // 取得private Stu(String name)构造方法信息 Constructor<Stu> con1 = c.getDeclaredConstructor(String.class);// getDeclaredConstructor()方法不管是公有还是私有的都能取出 con1.setAccessible(true);// 修改访问权限为可访问 Stu stu1 = con1.newInstance("小糯米");// 调用Stu()创建Stu对象 stu1.say2(); // 通过Stu(String s, String s2, int age)创建Stu对象 // 取得public Stu(String s, String s2, int age)构造方法信息 Constructor<Stu> con2 = c.getDeclaredConstructor(String.class, String.class, int.class); Stu stu2 = con2.newInstance("ss", "ss", 100); stu2.say2();}private void m3() throws Exception { /** 访问成员变量 */ Class c = Class.forName("com.fs.po.Stu"); Constructor<Stu> con = c.getConstructor();// public Stu() Stu stu = con.newInstance(); // 访问公有成员变量public int age信息// stu.age = 100; // 访问成员变量private String name信息 Field field = c.getDeclaredField("name"); field.setAccessible(true);// 设置可访问 // 访问并修改private String name信息 field.set(stu, "石头"); // 取得stu对象中的name的值 String name = (String) field.get(stu); System.out.println("Stu private String name" + name);}private void m4() throws Exception { /** 访问私有的成员方法 */ Class c = Class.forName("com.fs.po.Stu"); Constructor<Stu> con = c.getConstructor();// public Stu() Stu stu = con.newInstance(); // 访问私有成员方法private void say(String name, int age, Teacher t)信息 Method method1 = c.getDeclaredMethod("say",String.class,int.class,Teacher.class); method1.setAccessible(true); method1.invoke(stu, "小昭",20,new Teacher()); // 访问私有成员方法private void say()信息 Method method2 = c.getDeclaredMethod("say");// Method method2 = c.getDeclaredMethod("say", null); method2.setAccessible(true); method2.invoke(stu);// method2.invoke(stu, null);} public static void main(String[] args) throws Exception { Test t = new Test(); t.m4(); }}
package com.fs.po;public class Stu { private String name; private float hight; public int age; public Stu() { System.out.println("Stu()"); } /*** * dfsdfdafasd * @param name * @param age */ public Stu(String name, Integer age) { this.name = name; this.age = age; } public Stu(String s, String s2, int age) { System.out.println("Stu(String s, String s2, int age)"); } private Stu(String name) { System.out.println("Stu(String name)..."); } private void say(String name, int age, Teacher t) { System.out.println("上....."); } private void say() { System.out.println("下...."); } public void say2() { System.out.println("stu say2...."+name); }}
package com.fs.po;public class Teacher { public void teacherSay() { System.out.println("good good study"); }}
反射机制总结归纳
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。