<强>被反射的类:强>
<代码> @ table (“tb_student”) 公开课学生{ @Fields (columnName=" id ",类型=癷nt”,长度=10) 私人int id; @Fields (columnName=皊tudentName”=皏archar类型,长度=10) 私人字符串studentName; @Fields (columnName=澳炅洹?类型=癷nt”,长度=3) 私人int年龄; 公共int getId () { 返回id; } 公共空间setId (int id) { 这一点。id=id; } 公共字符串getStudentName () { 返回studentName; } 公共空间setStudentName(字符串studentName) { 这一点。studentName=studentName; } 公共int getAge () { 返回年龄; } 公共空间setAge (int年龄){ 这一点。年龄=年龄; } 公开学生(int id、字符串studentName int年龄){ 超级(); 这一点。id=id; 这一点。studentName=studentName; 这一点。年龄=年龄; } 公共的学生(){ }代码>
<强>反射获取类的信息:强>
<代码> @SuppressWarnings(“所有”)//压制警告 公开课梦想{ 公共静态void main (String [] args)抛出NoSuchFieldException, SecurityException NoSuchMethodException { c类; 尝试{ c=forname (“cn.sxt.in.Student”);//获取类名 System.out.println (c.getName ());//获取包名+类名 System.out.println (c.getSimpleName ());//只获取类名//获取属性 ?[]字段c.getFields ();//返回属性数组,只能获取公开属性 System.out.println (fields.length); 场[]fields2=c.getDeclaredFields ();//获得所有类型的属性 (字段e: fields2) { System.out.println (“aa”); System.out.println (e); } System.out.println (fields2.length); 场f=c.getDeclaredField (“studentName”); System.out.println (f);//获取方法 法[]=c.getMethods ();//获取公开方法 方法[]method2=c.getDeclaredMethods ();//获取所有方法 (方法mm: method2) { System.out.println (mm); } 方法m=c。getDeclaredMethod (“getStudentName”,零);//第二个为参数类型,没有为null m2=c的方法。getDeclaredMethod (“setStudentName”, String.class);//方法的参数类型是字符串//获取构造器 构造函数[]有限公司=c.getDeclaredConstructors (); (构造函数cc:有限公司) { System.out.println (cc); } 构造函数首席运营官=c.getDeclaredConstructor(空);//获取无参构造器 System.out.println(首席运营官); 构造函数coo2=c.getDeclaredConstructor (int.class、String.class int.class);//获取指定有参构造器 System.out.println (coo2); }捕捉(ClassNotFoundException e) { e.printStackTrace (); } } } }代码>
<强>通过反射动态操作方法属性:强>
<代码>公开课玩{ 公共静态void main (String [] args)抛出NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException NoSuchFieldException { 尝试{ 类c=forname (“cn.sxt.in.Student”);//Classc=(Class cc=c.getDeclaredConstructor (int.class String.class int.class);//获得构造器方法 学生s2=cc.newInstance(001年,“我”,19);//传入实际参数生成对象 System.out.println (s2.getStudentName ());//反射调用普通方法 学生s3=(学生)c.newInstance (); 方法方法=c。getDeclaredMethod (“setStudentName”, String.class); 方法。调用(s3,“梅伊”);//激活方法,第一个参数为对象,第二个参数为传入信息,相当于s3。setStudentName (String s); System.out.println (s3.getStudentName ());//通过反射操作属性 学生s4=(学生)c.newInstance (); 场f=c.getDeclaredField (“studentName”);//获得属性//f.set (s4,“多”);//设置属性信息,第一个参数为设定的对象,第二个为实际信息,相当于s4。设置(String s);//System.out.println (s4.getStudentName ());//因为是私有属性,不能直接调用//访问私有属性 学生s5=(学生)c.newInstance (); 场ff=c.getDeclaredField (“studentName”); ff.setAccessible(真正的);//不需安全检查,可直接访问私有属性,其他类型也有该方法(类等) ff。集(s5,“艾达”); System.out.println (s5.getStudentName ()); System.out.println (ff.get (s5));//直接通过属性对象调用 }捕捉(ClassNotFoundException e) { e.printStackTrace (); } } } java反射机制获取类名,属性,方法,构造器和反射动态使用