最近我刚刚在java中遇到错误
Exception in thread "main" java.lang.NoSuchMethodError: main
即使我的班级只有3行代码。
public class Test{
public static void main(String[] args){
System.out.println("hello");
}
}
我想知道为什么会发生这种情况,但后来我知道有一个我试过的公共类String&在相同的包中创建。
所以现在出现的新问题是在这种情况下会发生什么,虽然String不是java中定义的keyword
(你可以在你的代码中使用)
然后我刚刚删除了String.java&包中的String.class文件,但是你也不能使用String类,这听起来很奇怪。
问题:java是否优先考虑我们的自定义类?
答案 0 :(得分:32)
您的主要方法需要匹配
public static void main(java.lang.String[] args){ ... }
如果您在使用main方法的类所在的同一个包中创建自己的String
类,它将成为
public static void main(your.own.package.String[] args){ ... }
这是有效的,但不允许运行时启动程序再找到主方法,因为它期望java.lang.String[]
作为参数。
默认情况下会自动导入java.lang
中的类,因此您不需要明确的import
语句 - 这可能会让您更加困惑。
根据经验,我会尽可能避免将自己的类命名为与Java Runtime中的类相同 - 尤其是来自java.lang
。
包由许多编译单元组成(第7.3节)。编译单元自动访问其包中声明的所有类型,并且自动导入预定义包java.lang 中声明的所有公共类型。
答案 1 :(得分:3)
您始终可以使用完全限定名称:
public static void main(java.lang.String[] args) ...
你讲的故事说我们可以使用String
作为我们其中一个课程的名称。但是,就像在现实生活中一样,如果有两个人名叫“约翰”,你有时需要消除它们的歧义。