classloader—如果我用java创建自己的字符串类,会发生什么?

tzcvj98z  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(376)

当我创建自己的字符串类时,如果同一个包中有另一个类,main(string[]args)似乎会选择我的字符串类,而不是rt.jar中的那个。我的问题是,在本例中,为什么引导类装入器没有从rt.jar中选取字符串类。我的理解是,应用程序加载器收到的类加载请求将委托给引导类加载器。

piztneat

piztneat1#

因为 String 在您的本地包中优先;可以显式使用 java.lang.String 或者你的名字 class String 其他的。

public static void main(java.lang.String[] args)

为了扩展上述内容,编译器在编译时将类名解析为它们的完全限定形式(在字节码级别,没有任何限定形式) import s) 是的。此外,java还包括 String 在类加载之前初始化的内部池(为了使其正常工作, java.lang.String 必须在任何用户类之前加载)。
哪一个是更好的主意,从 java.lang 要求维修的噩梦。

siv3szwd

siv3szwd2#

在本例中,为什么引导类装入器没有从rt.jar中选取string类。我的理解是,应用程序加载器收到的类加载请求将委托给引导类加载器。
名称解析实际上发生在编译时。编译器决定什么 String 是指在使用它的源代码文件的上下文中,然后使用解析类的全名(例如。 java.lang.String 或者 your.pkg.String )在类文件中。在运行时,java类装入器总是使用完整的类名装入类。

相关问题