1、Class类的理解

  1. /**
  2. * 关于java.lang.Class类的理解
  3. * 1.类的加载过程:
  4. * 程序经过Javac.exe命令后,会生成一个或多个字节码文件(.class结尾)。
  5. * 接着我们使用java.exe命令对某个字节码文件进行解释运行。相当于将某个字节码文件
  6. * 加载到内存中。此过程就称为类的加载。加载到内存中的类,我们就称为运行时类,此
  7. * 运行时类,就作为Class的一个实例。
  8. *
  9. * 2.换句话说,Class的实例就对应着一个运行时类。
  10. */

2、Class类常用命令

image.png

3、获取Class实例的4种方式

  1. import org.junit.Test;
  2. import java.lang.annotation.ElementType;
  3. import java.lang.reflect.Constructor;
  4. import java.lang.reflect.Field;
  5. import java.lang.reflect.Method;
  6. public class ReflectionTest {
  7. /**
  8. * 2.换句话说,Class的实例就对应着一个运行时类。
  9. * 3.加载到内存中的运行时类,会缓存一定的时间。在此时间之内,我们可以通过不同的方式
  10. * 来获取此运行时类。
  11. */
  12. @Test
  13. public void test3() throws ClassNotFoundException {
  14. //方式一:
  15. Class c1 = Person.class;
  16. System.out.println(c1);
  17. //方式二:通过运行时类的对象,调用getClass()
  18. Person p1 = new Person();
  19. Class c2 = p1.getClass();
  20. System.out.println(c2);
  21. //方式三:调用Class的静态方法:forName(String classPath)
  22. Class c3 = Class.forName("www.gh110.com");
  23. // c3 = Class.forName("www.123.com");
  24. System.out.println(c3);
  25. System.out.println(c1 == c2);
  26. System.out.println(c1 == c3);
  27. //方式四:使用类的加载器:ClassLoader (了解)
  28. ClassLoader classLoader = ReflectionTest.class.getClassLoader();
  29. Class c4 = classLoader.loadClass("www.gh110.com");
  30. System.out.println(c4);
  31. System.out.println(c1 == c4);
  32. }
  33. }

4、Class实例对应的结构的说明

4.1、哪些类型可以有Class对象?

  • class:外部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类
  • interface:接口
  • []:数组
  • enum:枚举
  • annotation:注解@interface
  • primitivetype:基本数据类型
  • void ```java import org.junit.Test; import java.lang.annotation.ElementType; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method;

public class ReflectionTest {

  1. //万事万物皆对象?对象.xxx,File,URL,反射,前端、数据库操作
  2. /**
  3. * Class实例可以是哪些结构的说明:
  4. */
  5. @Test
  6. public void test4() {
  7. Class s1 = Object.class;
  8. Class s2 = Comparable.class;
  9. Class s3 = String[].class;
  10. Class s4 = int[][].class;
  11. Class s5 = ElementType.class;
  12. Class s6 = Override.class;
  13. Class s7 = int.class;
  14. Class s8 = void.class;
  15. Class s9 = Class.class;
  16. int[] a = new int[10];
  17. int[] b = new int[100];
  18. Class s10 = a.getClass();
  19. Class s11 = b.getClass();
  20. // 只要数组的元素类型与维度一样,就是同一个Class
  21. System.out.println(s10 == s11);
  22. }

}

```