-
获取Class对象
方式1:
Class userClass = Class.forName("com.crown.reflect.User");
方式2:
Student stu1=new Student();//这一new 产生一个Student对象,一个Class对象。
Class stuClass=stu1.getClass();//获取Class对象
方式3:
Class stuClass2=Student.class;
-
获取构造函数
Class对象提供两个有重载的获得构造器Constructor 对象的方法,一个接受一个可变参数的类型为Class类型的参数,用来接受多个参数类型为Class,
1.有参的构造
Constructor constructor =null;
try {
constructor = c.getConstructor(String.class);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
2.无参数的构造
Class userClass = Class.forName("com.crown.reflect.User");
// //获得一个类的的构造器
Constructor constructor = userClass.getConstructor();
-
创建对象
1.无参数的构造
User user=(User) constructor.newInstance();
2.无参数的构造
User user = (User)constructor.newInstance("crown");
public User(String username) {
// TODO Auto-generated constructor stub
this.userName= username;
}
-
执行方法
1.无参数的方法
Method method = class1.getDeclaredMethod("getUser", null);
method.invoke(class1.newInstance(), null);
2.有参数的方法
Method method = class1.getDeclaredMethod("getUser", String.class,String.class);
method.invoke(class1.newInstance(), "crown","echo");
3.执行私有方法
Method method=userClass.getDeclaredMethod("printName",null);
method.setAccessible(true);
method.invoke(user, null);