如果我在java中创建自己的String类会发生什么?

时间:2016-03-28 01:26:46

标签: java classloader

当我创建自己的String类时。如果同一个包中有另一个类,main( String [] args)似乎选择我的String类而不是rt.jar中的类。我的问题是,为什么在这种情况下,Bootstrap类加载器不会选择rt.jar中的String类。我的理解是一个类加载请求来到Application loader将被委托给bootstrap类加载器。

2 个答案:

答案 0 :(得分:8)

因为本地包中的String优先;您可以明确使用java.lang.String或将您的class String命名为 1

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

为了扩展上述内容,编译时编译器将类名解析为完全限定的形式(在字节码级别,没有任何import)。此外,Java包含一个String 实习池,它在您的类加载之前被初始化(为了使其正常运行,必须在任何用户类之前加载java.lang.String)。

1 这是一个更好的主意,来自java.lang的{​​{3}}类要求维护噩梦。

答案 1 :(得分:4)

  

为什么在这种情况下,引导类加载器不会选择来自rt.jar的String类。我的理解是一个类加载请求来到Application loader将被委托给bootstrap类加载器。

名称解析实际上发生在编译时。编译器决定String在使用它的源代码文件的上下文中的含义,然后在类文件中使用已解析类的全名(例如java.lang.Stringyour.pkg.String) 。在运行时,Java类加载器总是使用完整的类名加载类。