Reflection--运行时类的创建

   上一篇文章我们专门解释了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实例:就是运行时类

运行时类的对象:通过运行时类创建的对象。



运行时类的作用:

  我们在这里解释一下我们上节课说的javaclass类是java反射机制的基础也就是源头这个说法。通过Class类我们可以获得关于一个类的相关信息

  我们创建了一个类,通过编译(javac.exe,生成对应的。class文件,之后我们使用java.exe加载(jvm的类的加载器完成的)。.class文件加载到内存中,就是一个运行时类,存在缓存区中,那么这个运行时类本身就是一个Class的实例。里面含有一些class类的基本信息。(还是解释的Class clazz = Person.class;

每一个运行时类指加载一次。

有了class实例以后,我们才可以进行如下的操作(这些操作我们在后面用代码的形式具体讲解):

*创建对应的运行时类的对象

②获取对应的运行时类的完整的结构(属性,方法,构造器,内部类,父类,所在的包,异常,注解。。。)

③调用对应的运行时类的制定的结构(属性,方法,构造器)

④反射的应用,动态代理。


所以说java的class类是java反射的基础。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值