一、获取class对象实例的方式(前三种方式需要掌握)
@Test
public void test3() throws ClassNotFoundException {
//方式一:调用运行时类的属性:.class
Class clazz1 = Person.class; //Person为自定义类
System.out.println(clazz1);
//方式二:通过运行时类的对象,调用getClass()
Person p1 = new Person();
Class clazz2 = p1.getClass();
System.out.println(clazz2);
//方式三:调用Class的静态方法:forName(String classPath)
Class clazz3 = Class.forName("com.luoyang.java.Person");
// clazz3 = Class.forName("java.lang.String");
System.out.println(clazz3);
System.out.println(clazz1 == clazz2);//true
System.out.println(clazz1 == clazz3);//true
//方式四:使用类的加载器:ClassLoader (了解)
ClassLoader classLoader = ReflectionTest.class.getClassLoader();
Class clazz4 = classLoader.loadClass("com.luoyang.java.Person");
System.out.println(clazz4);
System.out.println(clazz1 == clazz4);//true
}
二、万物皆对象。
(1)class: 外部类,内部类,匿名类。
(2)interface: 接口
(3)[] : 数组
(4)enum:枚举
(5)annotation:注解
(6)primitive type : 基本数据类型
(7)void
//Class 对象实例可以是哪些结构的说明:
@Test
public void test4(){
Class c1 = Object.class;
Class c2 = Comparable.class;
Class c3 = String[].class;
Class c4 = int[][].class;
Class c5 = ElementType.class;
Class c6 = Override.class;
Class c7 = int.class;
Class c8 = void.class;
Class c9 = Class.class;
int[] a = new int[10];
int[] b = new int[100];
Class c10 = a.getClass();
Class c11 = b.getClass();
System.out.println(c10);//class [I
// 只要数组的元素类型与维度一样,就是同一个Class
System.out.println(c10 == c11); //true
}