Java Puzzler-是什么原因?

Jus*_*per 5 java string puzzle program-entry-point compilation

我写了以下代码.

class String { 

    private final java.lang.String s; 

    public String(java.lang.String s){ 
        this.s = s; 
    } 

    public java.lang.String toString(){ 
        return s; 
    } 

    public static void main(String[] args) { 
        String s = new String("Hello world"); 
        System.out.println(s); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

当我执行它时,得到以下错误

The program compiled successfully, but main class was not found.
  Main class should contain method: public static void main (String[] args).
Run Code Online (Sandbox Code Playgroud)

为什么会这样?...虽然主要方法被定义为什么系统没有读取/识别它?

Ste*_*n C 6

为什么会这样?

因为String[]你在这一点上使用的不是一个java.lang.String[].它是String您在此处定义的类的数组.因此,您的IDE(或其他任何东西)正确地告诉您该main方法是一个有效的入口点.

课程:不要使用与常用类名相同的类名.它使您的代码非常混乱.在这种情况下,令你感到困惑,你已经迷茫了自己!


Doo*_*nob 6

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

因为你必须使用java.lang.String,而不是你自己的.在您的main方法中,String您使用的实际上String是定义的自定义,而不是真实的自定义java.lang.String.

这是代码,澄清了一下:

class MyString { 

    private final String s; 

    public MyString(String s){ 
        this.s = s; 
    } 

    public String toString(){ 
        return s; 
    } 

    public static void main(MyString[] args) { // <--------- oh no!
        MyString s = new MyString("Hello world"); 
        System.out.println(s); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

因此,您可以从这个难题中学到的教训是:不要将您的课程命名为其他常用课程!