同包自定义String类与java.lang.String无命名冲突?Main方法问题解析
问题解答
1. 自定义String优先被解析且无命名冲突的原因
Java编译器的类查找规则是:先查找当前包内的类,再查找导入的包(包括自动导入的java.lang包)。虽然编译单元会自动导入java.lang下的所有类,但当当前包存在同名的公共类时,编译器会优先选择当前包的类,而非自动导入的类。这不属于命名冲突,因为编译器能明确区分两个类的归属包,只是按照优先级规则选择了当前包的org.something.a.String。
2. main方法签名问题的解析
JVM对程序入口的main方法有严格要求:参数必须是**java.lang.String[]类型**。你最初的main(String[] args)中,String被编译器解析为自定义的org.something.a.String,导致方法签名不符合JVM的要求,因此运行时会提示找不到合法的main方法。
当你显式指定java.lang.String[] args时,参数类型被明确为JVM要求的标准字符串数组类型,此时方法签名符合规范,JVM能正确识别并执行该入口方法。
内容的提问来源于stack exchange,提问作者Giorgi Tsiklauri
相关产品推荐
相关产品推荐

