Class 正在加载 JAVA
Class Loading in JAVA
Class-Loader搜索和加载classes的顺序是:
- Bootstrap Class 装载机
- 扩展程序Class加载程序
- 应用程序Class加载程序
现在,如果我使用构造函数创建用户定义的字符串 class。
class String {
public String(){
System.out.println("This is user defined String Class");
}
}
然后执行下面的代码:
public class Checking {
public static void main(java.lang.String[] args){
String s= new String();
}
}
以上代码的输出是
"This is user defined String Class"
表示加载了user defined class,由Application Class-Loader
加载
所以,我的问题是如果先加载 bootstrap,为什么我会得到那个输出?
我希望我的问题很清楚。
添加行
package java.lang
在您的代码之上,然后再次检查。您会注意到您现在得到了预期的结果。
原因是,class 名称始终仅用作完全限定名称,它由包名称和 class 名称组成。因此,在您的情况下,String
与 java.lang.String
不同 class,因此不会在 rt.jar
中找到
Class-Loader搜索和加载classes的顺序是:
- Bootstrap Class 装载机
- 扩展程序Class加载程序
- 应用程序Class加载程序
现在,如果我使用构造函数创建用户定义的字符串 class。
class String {
public String(){
System.out.println("This is user defined String Class");
}
}
然后执行下面的代码:
public class Checking {
public static void main(java.lang.String[] args){
String s= new String();
}
}
以上代码的输出是 "This is user defined String Class"
表示加载了user defined class,由Application Class-Loader
加载所以,我的问题是如果先加载 bootstrap,为什么我会得到那个输出? 我希望我的问题很清楚。
添加行
package java.lang
在您的代码之上,然后再次检查。您会注意到您现在得到了预期的结果。
原因是,class 名称始终仅用作完全限定名称,它由包名称和 class 名称组成。因此,在您的情况下,String
与 java.lang.String
不同 class,因此不会在 rt.jar