小菜今天学类加载器这部分,在学到运行时包这个概念的时候突发奇想,写下了如下代码,但代码的抛出的错误让我有点不太明白,毕竟对main方法没有深入的研究过,希望各路高手指点。
代码如下
package java.lang;
public class String {
/**
* @param args
*/
String str;
public String(String str){
this.str = str;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = new String("hello");
System.out.println(str);
}
}
错误如下:
错误: 在类 java.lang.String 中找不到主方法, 请将主方法定义为:
public static void main(String[] args)
------解决思路----------------------
classLoader首先会去加载java.lang.String,而不是你写的java.lang.String
------解决思路----------------------
你应该了解一下jvm了 JVM 为了安全问题 当出现和java api 核心类同名类时 会只装载java api 的核心类 而不装载你声明的类 而
java.lang.String类 的确没有 main()方法 所以。。。。。。。。
------解决思路----------------------
唯9楼和11楼是正解。
Java总是先加载rt.jar下的核心类,然后再加载本地类,接着才是其它类,且当一个类被加载后就不会再加载拥有相同限定名的类。
所以你的执行过程变成了javac lang包下的String.class,而String.class没有main()方法,当然就报找不到main()方法。