上一篇文章我们专门解释了Class clazz = Person.class;我们说最后生成了一个person.class文件。这个文件就是运行时类。这篇主要介绍运行时类的4种生成方式。
获取class实例的四种方法:
1)前提:若已知具体的类,通过类的class属性获取,该方法最为安全可靠,程序性能最高
实例:Class clazz = Personn.class;
2)前提:已知某个类的实例,调用该实例的getClass()方法获取Class对象
实例:Class clazz = “www.atguigu.com”.getClass();
3)前提:已知一个类的全类名,且该类在类路径下,可通过 Class类的静态方法forName()获取,可能抛出ClassNotFoundException
实例:Class clazz = Class.forName(“java.lang.String”);
4)其他方式(不做要求)
ClassLoader cl = this.getClass().getClassLoader();
Class clazz4 = cl.loadClass(“类的全类名”);
优缺点:方法1在编译的时候就告诉你这个文件找到还是找不到。方法三只能在运行的时候才能知道这个文件在不在。但是方法3是比较灵活的,根据传进来的字符串来动态的访问。
注意概念区分:
类,运行时类,class实例,运行时类的对象的概念,
类是一个静态的概念,指我们编写好的代码的类。
运行时类:编译好的类加载到内存中就是我们生成的.class文件。
class实例:就是运行时类
运行时类的对象:通过运行时类创建的对象。
运行时类的作用:
我们在这里解释一下我们上节课说的java的class类是java反射机制的基础也就是源头这个说法。通过Class类我们可以获得关于一个类的相关信息
我们创建了一个类,通过编译(javac.exe),生成对应的。class文件,之后我们使用java.exe加载(jvm的类的加载器完成的)。.class文件加载到内存中,就是一个运行时类,存在缓存区中,那么这个运行时类本身就是一个Class的实例。里面含有一些class类的基本信息。(还是解释的Class clazz = Person.class;)
每一个运行时类指加载一次。
有了class实例以后,我们才可以进行如下的操作(这些操作我们在后面用代码的形式具体讲解):
①*创建对应的运行时类的对象
②获取对应的运行时类的完整的结构(属性,方法,构造器,内部类,父类,所在的包,异常,注解。。。)
③调用对应的运行时类的制定的结构(属性,方法,构造器)
④反射的应用,动态代理。
所以说java的class类是java反射的基础。