Java 字符串类会造成混乱
最近我在java中遇到了一个错误Java 字符串类会造成混乱,java,string,keyword,Java,String,Keyword,最近我在java中遇到了一个错误 Exception in thread "main" java.lang.NoSuchMethodError: main 即使我的类只有3行代码 public class Test{ public static void main(String[] args){ System.out.println("hello"); } } 我想知道为什么会发生这种情况,但后来我知道我在同一个包中尝试并创建了一个公共类字符串 所以现在出现了一个新的
Exception in thread "main" java.lang.NoSuchMethodError: main
即使我的类只有3行代码
public class Test{
public static void main(String[] args){
System.out.println("hello");
}
}
我想知道为什么会发生这种情况,但后来我知道我在同一个包中尝试并创建了一个公共类字符串
所以现在出现了一个新的问题,尽管字符串不是java中定义的关键字(您可以在代码中使用),但在这种情况下会发生什么
然后我刚刚从包中删除了String.java&String.class文件,但听起来很奇怪,您不能同时使用String类
问:java是否主要优先考虑我们的自定义类?您的主方法需要匹配
public static void main(java.lang.String[] args){ ... }
如果您在主方法所在的类所在的包中创建自己的String
类,它将成为
public static void main(your.own.package.String[] args){ ... }
这是有效的,但不允许运行时启动器再找到main方法,因为它需要java.lang.String[]
作为参数
默认情况下,java.lang
中的类是自动导入的,因此您不需要显式的import
语句—这可能会让您更加困惑
根据经验,我尽量避免将自己的类命名为Java运行时中的类,尤其是Java.lang
另见:
一个包由许多编译单元组成(§7.3)。编译单元自动访问其包中声明的所有类型,并且自动导入预定义包java.lang中声明的所有公共类型
您始终可以使用完全限定的名称:
public static void main(java.lang.String[] args) ...
您讲的故事说,我们可以使用String
作为一个类的名称。但是,就像在现实生活中一样,如果周围有两个叫“约翰”的人,你有时需要消除他们之间的歧义。我真的不明白你想说什么,但这意味着如果我写String[]这意味着我的堂兄弟班?这真的意味着吗?如果您编写字符串[],那么编译器将查看导入以检查是否存在字符串的导入。由于您的另一个类字符串位于同一个包中,因此默认情况下会导入它。对此有任何引用吗?我不认为这是错误的,但默认情况下,java.lang
是导入的(如答案中所述)。。。JRE JAR是类路径AFAIK上的第一个…我又做了一次测试,不确定是否足够,在另一个包中有字符串,并使用import另一个.package.*并且来自同一个包的那个仍然具有优先级。当另一个包(不在同一个包中)中只有字符串,并且它作为另一个.package.*导入时,我得到了一个不明确的错误…@Betlista有趣的是,当前包中的类型似乎总是优先于任何导入的类型-并且编译器不会发出任何错误。。。我已经发布了一个后续问题:当然可能会有。。像风筝(鸟,纸制品)