程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

静态方法中的类文字到底是如何计算的?

发布于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黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

0 0
收藏该文
已收藏

评论内容:(最多支持255个字符)