一、获取Class类的对象的三种方式
(1)使用Object类中的getClass()方法
//通过对象的getClass()方法
Person person = new Person("夏侯惇","男",38);
Class clazz = person.getClass();
(2)类 .Class
//通过类 .class
Class personClass = Person.class;
(3)通过Class类的forName()方法
使用此方法需要抛出ClassNotFoundException异常,或者用try,catch进行捕获
//通过Class.forName方法
Class clazz = Class.forName("cn.bytecollege.reflectDemo.Person");
二、通过反射实例化对象
(1)调用无参构造方法实例化对象
Class<Person> personClass = Person.class;
//通过Class对象实例化类对象
Person person = (Person) personClass.newInstance();
需要抛出InstantiationException(实例化异常)和 IllegalAccessException(非法访问异常)
(2)调用有参构造方法实例化对象
//获取有参构造方法
Constructor<Person> constructor = personClass.getConstructor(String.class, String.class, Integer.class);
//调用有参构造方法实例化对象
Person person = constructor.newInstance("赵子龙", "男", 28);
需要抛出NoSuchMethodException (nosuch方法异常)和 InvocationTargetException(调用目标异常)
三、获取类的信息
(1)获取类所在的包
Class<Person> personClass = Person.class;
//获取包名
Package aPackage = personClass.getPackage();
(2)获取类的方法
①获取类的所有方法 .getMethons();
//获取所有方法
Method[] methods = personClass.getMethods();
//遍历输出所有方法
for (Method method:methods){
System.out.println(method);
}
注意:
1.只能获取到public修饰的所有方法,获取不了private、protected、default修饰的方法。
2.可以获取到继承的共有方法(比如从Object类继承的方法)。
②访问私有方法 .getDeclaredMethons()
此方法只能获取本类的所有方法,不能获取从父类继承的方法。
Method[] declaredMethons = personClass.getDeclaredMethods();
for (Method method:declaredMethons){
System.out.println(method);
}
(3)调用类的方法
①invoke()