字符串类会造成混乱

16 java string keyword

最近我刚刚在java中遇到错误

Exception in thread "main" java.lang.NoSuchMethodError: main
Run Code Online (Sandbox Code Playgroud)

即使我的班级只有3行代码.

public class Test{
    public static void main(String[] args){
    System.out.println("hello");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

And*_*ter 32

你的主要方法需要匹配

 public static void main(java.lang.String[] args){ ... }
Run Code Online (Sandbox Code Playgroud)

如果您String在使用main方法的类所在的同一个包中创建自己的类,它将成为

 public static void main(your.own.package.String[] args){ ... }
Run Code Online (Sandbox Code Playgroud)

这是有效的,但不允许运行时启动程序再找到一个main方法,因为它需要java.lang.String[]作为参数.

java.lang默认情况下会自动导入类,因此您不需要显式import语句 - 这可能会让您更加困惑.

根据经验,我会尽可能避免将自己的类命名为Java Runtime中的类,尤其是来自java.lang.

另请参阅JLS:第7章.包:

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

  • 如果编写String [],则编译器会查看导入以检查是否存在String的导入.由于您的其他类String位于默认导入的同一个包中. (2认同)