加入收藏 | 设为首页 | 会员中心 | 我要投稿 阜阳站长网 (https://www.0558zz.cn/)- AI行业应用、低代码、混合云存储、数据仓库、物联网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

深入了解Class类,让你一通百通

发布时间:2021-03-05 16:13:43 所属栏目:外闻 来源:互联网
导读:们发现没有,其实这里还是有些区别的,我告诉你区别是下面的字比上面多,你会打我不(别打我脸)。 粗糙的那个是通过 new 创建的对象,而精致的是通过 ClassLoader 操作 .class 文件生成 Class 类,然后创建的对象。 其实通过 new 或者反射创建实例,都需要 Cl

们发现没有,其实这里还是有些区别的,我告诉你区别是下面的字比上面多,你会打我不(别打我脸)。

粗糙的那个是通过 new 创建的对象,而精致的是通过 ClassLoader 操作 .class 文件生成 Class 类,然后创建的对象。

其实通过 new 或者反射创建实例,都需要 Class 对象。

1.2 .class 文件

.class 文件在文章开头讲过,是字节码文件。.java 是源程序。Java 程序是跨平台的,一次编译到处执行,而编译就是从源文件转换成字节码文件。

字节码无非就是由 0 和 1 构成的文
 

啥玩意,看不懂。咱也不需要看懂,反正 JVM 对 .class 文件有它自己的读取规则。

1.3 类加载器

还记得上面的精致图中,我们知道是通过类加载器把 .class 文件加载到内存中。具体的类加载器内容,我会另写一篇文章讲解(写完链接会更新到这里)。但是核心方法就是 loadClass(),只需要告诉它要加载的 name,它就会帮你加载:
 

  1. 类加载器加载 .class 文件主要分位三个步骤
  2. 检查类是否已经加载,如果有就直接返回
  3. 当前不存在该类,遵循双亲委派机制,加载 .class 文件

上面两步都失败,调用 findClass()

因为 ClassLoader 的 findClass 方法默认抛出异常,需要我们写一个子类重新覆盖它,比如:

(编辑:阜阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读