反射

反射

当动态的获取信息,或者动态的去调用对象的方法,这类相关操作就是反射机制。


创建反射的四种

1
2
3
4
//        1.Class<? extends Student1> aClass1 = stu1.getClass();
// 2.Class<?> aClass1 = Class.forName("类的路径");
// 3.Class<Student1> aClass1 = Student1.class;
// 4.以及类的对应包装类相当于 方式一 有了一个实例类来获取类

获取类的方法,方法名,返回类型,以及调用其对象的方法

1
2
3
4
5
6
7
8
9
10
System.out.println("---------获取类的方法和方法名和返回类型---------------");
//2.获取类的访问方式和方法名和返回类型 以及调用方法
Method[] methods = aClass.getMethods();
for (Method method : methods) {
System.out.println(Modifier.toString(method.getModifiers()));
System.out.println(method.getName());
System.out.println(method.getReturnType());
}
Method sayHi = aClass.getMethod("sayHi", String.class);
sayHi.invoke(stu1,"小王");

获取类的字段以及当前类的字段值

1
2
3
4
5
6
7
8
//1.获取类的字段值
Field[] declaredFields = aClass1.getDeclaredFields();
for (Field field : declaredFields) {
if(field.getModifiers() == 2){
field.setAccessible(true);
}
System.out.println(field.get(stu1));
}

setAccessible(true) 默认为0

意思是访问private 或protect 等修饰符的字段或方法时,需要改为true,这破坏了类的封装。


反射获取对象的无参或有参构造器可以创建一个实例。

1
2
3
Class<? extend Student1> aClass1 = stu1.getClass();
Class<? extend Student1> stu2 = aClass1.getConstructor();
stu2.sayHi("实例对象");

总结

4种创建反射的方式,反射的用法,以及,通过反射创建实例。