返回信息流最新在看JVM,遇到个问题自己定义一个String类(包名不是java.lang)会被加载使用吗?
代码如下:
package com.ctf.test;
public class String {
public String() {
System.out.println("123");
}
}
package com.ctf.test;
public class Test {
public static void main(String[] args){
com.ctf.test.String s = new com.ctf.test.String();
}
}
为什么结果是报错:
java.lang.NoSuchMethodError: main
Exception in thread "main"
这是一条镜像帖。来源:北邮人论坛 / java / #49880同步于 2016/5/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
自己定义一个String类(包名不是java.lang)会被加载使用吗?
xiaohuijictf
2016/5/1镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
为什么不可以?
【 在 xiaohuijictf (小灰机) 的大作中提到: 】
: 最新在看JVM,遇到个问题自己定义一个String类(包名不是java.lang)会被加载使用吗?
: 代码如下:
: package com.ctf.test;
: ...................
【 在 XueQingHao 的大作中提到: 】
: 感觉可以改成public static void main(com.ctf.test.String[] args)试试
这样是不行的,main必须写成那样的
【 在 XueQingHao 的大作中提到: 】
: 感觉可以改成public static void main(com.ctf.test.String[] args)试试
不行,调用main的程序无法识别你的com.ctf.test.String
【 在 hdyvip 的大作中提到: 】
:
: 不行,调用main的程序无法识别你的com.ctf.test.String
其实你可以看一下类加载器的双亲委托机制,在你自定义的String加载前,系统类库中的String已经提前加载了,所以像这种自定义的不会再被识别了!