java反射机制获取类名,属性,方法,构造器和反射动态使用

  

<强>被反射的类:

  
 <代码> @ 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=(Classcc=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反射机制获取类名,属性,方法,构造器和反射动态使用