方式一:类型名.class
缺点: 要求编译期这个类型就要存在
优点:最简洁
@Test
public void test01() {
Class c1 = int.class;// 基本数据类型
Class c2 = void.class;// 特殊的空类型
Class c3 = String.class;// 系统定义的类
Class c4 = TestClass.class;// 自定义的类
Class c5 = Serializable.class;//接口类型
Class c6 = ElementType.class;//枚举类型
Class c7 = Override.class;//注解类型
java.lang.Class c8 = int[].class;//数据类型
}
方式二:对象.getClass()
这个方法在java.lang.Object类型中声明的,返回对象运行时类型
适用于:你先有对象
@Test
public void test02() {
Class c1 = "".getClass();
Class c2 = String.class;
System.out.println(c1==c2);
}
方式三:Class.forName("类型全名称")
优势:这个类型可以在编译期间未知,这个类型名称可以在代码中出现,也可以配置在配置文件中,或者键盘输入方式指定
@Test
public void test03() throws ClassNotFoundException {
Class c1 = "".getClass();
Class c2 = String.class;
Class c3 = Class.forName("java.lang.String");
}
方式四:使用类加载器对象.loadClass("类型全名称")
一般都是用在自定义类加载器对象去加载指定路径下的类去使用
@Test
public void test04() throws ClassNotFoundException {
Class c = TestClass.class;
ClassLoader loader = c.getClassLoader();
//第四种方法
Class c2 = loader.loadClass("clas.TestClinit1");
Class c3 = TestClinit1.class;
}