发布于2021-10-16 09:33 阅读(1214) 评论(0) 点赞(0) 收藏(0)
来自 JLS(第15.8.2 节):
类文字计算为当前实例类的定义类加载器(第 12.2 节)所定义的命名类型(或 void)的 Class 对象。
这是有道理的,但如果没有“当前实例”呢?(即表达式在类方法中,又名“静态方法”)
我的直觉告诉我使用相同的规则,将“当前实例的类”换成“类方法的类”之类的东西。但是,我在 JLS 中找不到任何此类规则,根据我的经验,这些规则往往非常明确。这让我不确定自己的直觉。
另一种选择是,我认为在类方法中没有“当前实例”的假设是不正确的。如果是这样 - 在类方法中确定“当前实例”的规则是什么?
我相信在这种情况下“实例”是指类本身的实例,即类定义,而不是该类的对象实例。这很难说清楚,所以让我们考虑一个例子:
class A {}
class B {
Class<A> a = A.class;
}
这里,表达式A.class
在一个类中执行B
。但是,有可能B
使用不同的类加载器多次将类加载到运行时中。所以,当文档中说,“作为由类的当前实例的定义类装载器(§12.2)定义的”,我相信,它指的是哪个类加载器加载的副本(“实例”)B
是类当前正在执行。
简而言之,Class<A>
分配给的实例a
将从加载B
.
实际上,这不是您可能不得不担心的事情。大多数 Java 开发人员在日常工作中不必处理多个类加载器。
作者:黑洞官方问答小能手
链接:http://www.javaheidong.com/blog/article/303949/cb01673acb5fc5f3ad3d/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!