反射之------Class实例可以是那些类型?
概述:
关于Class实例的获得的四种方法中我们知道可以通过类名.class获得对应的Class实例,也就是说所有被加载到内存中的当前运行时类都对应一个Class实例,而这个“当前运行时类”并不是指一定是类的概念,也就是Class实例的类型并不是只有类的概念,Class实例实际上有:
Class实例的类型:
- class
外部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类 - interface
接口 - []
数组 - enum
枚举 - annotation
注解 - primitive type
基本数据类型 - void
代码演示:
import java.lang.annotation.ElementType; public class GetClassDemos { public static void main(String[] args) { //1.class具体类 Class<Object> objectClass = Object.class; System.out.println("class具体类"+objectClass); //2.接口 Class<Comparable> comparableClass = Comparable.class; System.out.println("接口"+comparableClass); //3.数组 Class<String[]> strArrClass1 = String[].class; Class<String[][]> strArrClass2 = String[][].class; System.out.println("数组"+strArrClass1); System.out.println("数组"+strArrClass2); //不同维度的数组的Class对象是不同的 //4.枚举 Class<ElementType> elementTypeClass = ElementType.class; System.out.println("枚举"+elementTypeClass); //5.注解 Class<Override> overrideClass = Override.class; System.out.println("注解"+overrideClass); //6.基本数据类型 Class<Integer> integerClass = int.class; System.out.println("基本数据类型"+integerClass); //7.void Class<Void> voidClass = void.class; System.out.println("void"+voidClass); //关于数组的注意: int[] a=new int[100]; int[] b=new int[200]; Class aClass = a.getClass(); Class bClass = b.getClass(); System.out.println(aClass==bClass);//只要数组类类型和维度相同那么就是同一个Class } }
迎风少年