当我创建自己的字符串类时,如果同一个包中有另一个类,main(string[]args)似乎会选择我的字符串类,而不是rt.jar中的那个。我的问题是,在本例中,为什么引导类装入器没有从rt.jar中选取字符串类。我的理解是,应用程序加载器收到的类加载请求将委托给引导类加载器。
piztneat1#
因为 String 在您的本地包中优先;可以显式使用 java.lang.String 或者你的名字 class String 其他的。
String
java.lang.String
class String
public static void main(java.lang.String[] args)
为了扩展上述内容,编译器在编译时将类名解析为它们的完全限定形式(在字节码级别,没有任何限定形式) import s) 是的。此外,java还包括 String 在类加载之前初始化的内部池(为了使其正常工作, java.lang.String 必须在任何用户类之前加载)。哪一个是更好的主意,从 java.lang 要求维修的噩梦。
import
java.lang
siv3szwd2#
在本例中,为什么引导类装入器没有从rt.jar中选取string类。我的理解是,应用程序加载器收到的类加载请求将委托给引导类加载器。名称解析实际上发生在编译时。编译器决定什么 String 是指在使用它的源代码文件的上下文中,然后使用解析类的全名(例如。 java.lang.String 或者 your.pkg.String )在类文件中。在运行时,java类装入器总是使用完整的类名装入类。
your.pkg.String
2条答案
按热度按时间piztneat1#
因为
String
在您的本地包中优先;可以显式使用java.lang.String
或者你的名字class String
其他的。为了扩展上述内容,编译器在编译时将类名解析为它们的完全限定形式(在字节码级别,没有任何限定形式)
import
s) 是的。此外,java还包括String
在类加载之前初始化的内部池(为了使其正常工作,java.lang.String
必须在任何用户类之前加载)。哪一个是更好的主意,从
java.lang
要求维修的噩梦。siv3szwd2#
在本例中,为什么引导类装入器没有从rt.jar中选取string类。我的理解是,应用程序加载器收到的类加载请求将委托给引导类加载器。
名称解析实际上发生在编译时。编译器决定什么
String
是指在使用它的源代码文件的上下文中,然后使用解析类的全名(例如。java.lang.String
或者your.pkg.String
)在类文件中。在运行时,java类装入器总是使用完整的类名装入类。