**简单的说,java反射机制就是可以在我们程序的运行过程中,任意的去构造一个类的对象,了解成员变量,调用成员方法,这种动态调用对象的功能我们称之为反射。
1.通过反射获取创建类class对象的方式有三种。常用的基本数据类型的包装类也可以获取class类对象,以及通过我们所获取的类对象可以去通过.getSupperclass()方法获取父类类型。详情代码如下:
package FanShe;
public class Test03 {
public static void main(String[] args) throws ClassNotFoundException {
Person person = new Student();
System.out.println("这个人是"+person.name);
//1.通过forName获得Class对象
Class<?> c1 = Class.forName("FanShe.Student");
System.out.println(c1.hashCode());
//2.通过对象获得Class类对象
Class<?> c2 = person.getClass();
System.out.println(c2.hashCode());
//3.通过Person类名获取Class对象
Class<Student> c3 = Student.class;
System.out.println(c3.hashCode());
//4.基本数据类型包装类都有一个Type属性
Class<Integer> c4 = Integer.TYPE; //这里点的是TYPE
System.out.println(c4);
//5.通过getSuperclass()方法获取父类类型
Class<?> c5 = c1.getSuperclass();
System.out.println(c5);
}
}
class Person{
String name;
public Person() {
}
public Person(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
'}';
}
}
class Student extends Person{
public Student(){
this.name = "学生";
}
}
class Teacher extends Person{
public Teacher(){
this.name = "教师";
}
}
运行结果:
2.获取所有类型的class对象详细代码如下:
package FanShe;
import java.lang.annotation.ElementType;
//所有类型的class对象
public class Test04 {
public static void main(String[] args) {
Class c1 = Object.class;//类
Class c2 = Comparable.class;//接口
Class c3 = String[].class;//一维数组
Class c4 = int[][].class;//二维数组
Class c5 = Override.class;//注解
Class c6 = ElementType.class;//枚举
Class c7 = Integer.class;//数据类型
Class c8 = void.class;//void 空
Class c9 = Class.class;//Class
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
System.out.println(c4);
System.out.println(c5);
System.out.println(c6);
System.out.println(c7);
System.out.println(c8);
System.out.println(c9);
}
}
运行结果:
以上代码均已做注释,如果是新手好兄弟们可以学习一下JDK手册,上面包含了java中所有类,以及类方法的解释,不然可能会一头雾水,本文参考b站狂神的java注解和反射视频教程所做的总结,博主讲的比较详细,有需要的兄弟们可以去学习一下。
小白的记录,可能存在错误,希望大佬给出宝贵意见!