5

次のコードを書きました。

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); 
    } 
}

実行すると、次のエラーが発生します

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

なぜそうなのですか?... main メソッドは定義されていますが、システムがそれを読み取ったり認識したりしないのはなぜですか?

4

4 に答える 4

6

なぜそうなのですか?

そのString[]時点で使用している は ではありませんjava.lang.String[]Stringここで定義しているクラスの配列です。したがって、IDE(またはそれが何であれ)は、mainメソッドが有効なエントリポイントであることを正しく伝えます。

教訓: 一般的に使用されるクラスの名前と同じクラス名を使用しないでください。それはあなたのコードを非常に混乱させます。この場合、非常に紛らわしいので、自分自身を混乱させてしまいます!

于 2013-06-12T12:46:01.400 に答える
6
public static void main(String[] args) {

自分のものではなく、を使用する必要があるためですjava.lang.String。メイン メソッドでは、使用している は実際には定義されStringたカスタムであり、実際の ではありません。Stringjava.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); 
    } 
}

したがって、このパズルから学べる教訓は、クラスによく使用される他のクラスの名前を付けないことです。

于 2013-06-12T12:46:24.600 に答える
2

問題は、JavaStringのクラスのように、クラスの名前が であることです。Stringそれは本当に悪いことです、あなたはそれをすべきではありません。

そのため、 main の宣言を記述すると、次のようになります。

public static void main(String[] args) { 

String []JavaStringクラスではなく、独自のクラスを参照しているため、Javaはそれを見つけることができません。

Java がそれを見つけられるようにするには、次のように記述する必要があります。

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

しかし、実際には、それはあなたが望むものではありません。クラスの別の名前を見つけてください。

于 2013-06-12T12:49:20.620 に答える
2

main メソッドのシグネチャは

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

そしてそうではない

public static void main(mypackage.String[] args) { 

通常、java.lang暗示されます。この場合、あなたの個人Stringが代わりに使用されます。これが、クラスに既にある名前を付けてはならない理由です。java.lang

于 2013-06-12T12:47:17.403 に答える