字符串类会造成混乱

时间:2014-01-31 09:30:10

标签: 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");
    }
}

我想知道为什么会发生这种情况,但后来我知道有一个我试过的公共类String&在相同的包中创建。

所以现在出现的新问题是在这种情况下会发生什么,虽然String不是java中定义的keyword(你可以在你的代码中使用)

然后我刚刚删除了String.java&包中的String.class文件,但是你也不能使用String类,这听起来很奇怪。

问题:java是否优先考虑我们的自定义类?

2 个答案:

答案 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

另请参阅JLS: Chapter 7. Packages

  

包由许多编译单元组成(第7.3节)。编译单元自动访问其包中声明的所有类型,并且自动导入预定义包java.lang 中声明的所有公共类型。

答案 1 :(得分:3)

您始终可以使用完全限定名称:

public static void main(java.lang.String[] args) ...

你讲的故事说我们可以使用String作为我们其中一个课程的名称。但是,就像在现实生活中一样,如果有两个人名叫“约翰”,你有时需要消除它们的歧义。