0%

Class类相关

关于java.Lang.Class类的理解

类的加载过程
  • 程序经过javac,exe命令后,会生成一个或多个字节码文件(.class结尾)。
  • 接着使用java.exe命令对某个字节码文件进行解释运行,相当于将某个字节码文件加载到内存中,此过程就称为类的加载
  • 加载到内存中的类,我们就称为运行时类,此运行时类,就称为Class类的一个实例
  • 换句话说,Class的实例对应着一个运行时类
  • 加载到内存中的运行时类,会缓存一定时间,可以通过不同方式来获取此运行时类

获取Class实例的四种方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.sympa.lesson01;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class ReflectionTest {

public static void main(String[] args) throws ClassNotFoundException {

//方式1:调用运行时类的属性
Class clazz = Person.class;

//方式2:通过运行时类的对象,调用getClass()
Person person = new Person();
Class clazz1 = person.getClass();

//方式3:调用Class的静态方法:forName(String, classPath)
Class clazz2 = Class.forName("com.sympa.lesson01.Person");

System.out.println(clazz == clazz1); //true
System.out.println(clazz == clazz2); //true

//方式4:使用类的加载器:ClassLoader
ClassLoader classLoader = ReflectionTest.class.getClassLoader();
Class clazz3 = classLoader.loadClass("com.sympa.lesson01.Person");

}
}

哪些类型可以有Class对象

  • class:外部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类
  • interface:接口
  • []:数组(元素类型和维度一样,就是同一个Class)
  • enum:枚举类
  • annotation:注解
  • primitive type:基本数据类型
  • void
------ THEEND ------

欢迎关注我的其它发布渠道