反射机制

一、创建Class对象的三种方式:
1:利用对象的静态属性class,直接返回Class对象
例:Class classs = Student.class;
2:利用对象的getClass()方法,返回Class对象
例:Student student = new Student("",1);
     Class<Student> classss = (Class<Student>) student.getClass();
3:利用Class类的forname(String str)方法,创建Class对象
例:Class<Student> classs = (Class<Student>) Class.forName("classs.demo.Student");


二、Class对象获取构造,属性,方法
1:构造,属性,方法三个类对象
<1:Constructor-构造
<2:Field-属性
<3:Method-方法
2:获取构造类
//getConstructor()参数为构造参数对应的参数对象
Constructor<Student> constructor = classs.getConstructor(String.class,int.class) ;
//获取指定构造,私有构造也可获取
Constructor<Student> constructor1 = classs.getDeclaredConstructor(String.class,int.class);
//如果构造为私有构造,需要设置权限(可访问权限)
constructor.setAccessible(true);
//构造对象new对象
Student student = constructor.newInstance("张三",22);
3:获取属性类
//利用Class对象获取属性对象
//参数为属性名称
Field field = classs.getDeclaredField("age");
//设置访问权限(可访问权限)
field.setAccessible(true);
//给属性赋值
//参数1为给哪个对象赋值,参数2为赋值变量
field.setInt(student, 11);
4:获取方法类
//利用Class对象获取方法类,参数1为方法名称,参数2为,指定方法参数的class对象
//setName(String str)
Method method = classs.getDeclaredMethod("setName", String.class);
method.setAccessible(true);
//参数1为调用对象,参数2为为被调用的方法参数
method.invoke(student, "李四");

你可能感兴趣的:(java,动态代理,android,反射,Class)