学习笔记——java中的注解和反射

核心思想

对于每个类而言,JRE都会为其保留一个不变的Class类型的对象。一个Class对象包含了特定的结构(class、interface、enum、annotation、primitive type、void)等相关的信息

  • class本身也是一个类
  • Class对象只能由系统建立对象
  • 一个Class对象对应的是一个加载到JVM中的一个class文件
  • 每个类的实例都会记得自己是由哪个Class实例所生成
  • 通过Class可以完整地得到一个类中所有被加载的结构
  • Class类是Reflection的根源,针对任何你想动态加载、运行的类,唯有获得相应的Class对象

对象的创建过程本质

java中的对象主要分为两种:一种是普通类创建的实例对象;另一种是Class对象(只能有系统创建)。其实Java中的实例对象就是通过Class对象来创建的

获取class对象的方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Test03 {

public static void main(String[] args) throws ClassNotFoundException {
Person person = new Student();
System.out.println(person.name);
}

}
class Person {
String name;
}

class Student extends Person {
public Student() {
this.name = "学生";
}
}
方式 代码
通过对象获得 Class aClass = person.getClass();
System.out.println(aClass.hashCode());
forName获得 Class aClass1 = Class.forName(“Student”);
System.out.println(aClass1.hashCode());
通过类名获得 Class aClass2 = Student.class;
System.out.println(aClass2.hashCode());
基本内置类型的包装类都有一个Type属性 Class aClass3 = Integer.TYPE;
System.out.println(aClass3);
获得父类类型 Class aClass4 = aClass1.getSuperclass();
System.out.println(aClass4.hashCode());

上三个输出的哈希值是相等的(打印顺序与上面一一对应):

image-20210818171226626

Contents
  1. 1. 核心思想
  2. 2. 对象的创建过程本质
  3. 3. 获取class对象的方式
|