2016-06-30 10 views
1

私はstaticキーワードと、上記のコード実行を使用していないが、私は、コマンドプロンプトでpublic void main(String [] args)javaのメインメソッドのシグネチャが無効ですか?

javap MainClass 

をしたとき、私は次の出力を得たメモ帳

class MainClass{ 
    public void main(String args[]){ 
    System.out.println("Hello!"); 

    } 
} 

を通じて次のコードをコンパイル、

class MainClass { 
MainClass(); 
    public static void main(java.lang.String[]); 
} 

キーワードはそう

0であり、自身を加え

も有効な署名と見なされますか?

答えて

5

JLS Sec 12.1.4に述べたように:

メソッドmainはstaticpublic宣言、およびvoidしなければなりません。宣言型がStringの配列である仮パラメータ(§8.4.1)を指定する必要があります。


私はあなたのクラスの古いバージョンを見てきたかもしれないと思います。あなたのコードを逆コンパイルしようとしたときに、staticは追加されていません。

Compiled from "MainClass.java" 
class MainClass { 
    MainClass(); 
    public void main(java.lang.String[]); 
} 
+0

javap -verboseを使用する場合MainClass | "バージョン"を見つけてください。私のクラスのバージョンはマイナーバージョン:0メジャーバージョン:52になります。 – Tanvi

+0

Java 8用にコンパイルしているという事実は重要ではありません。メインメソッドに対するこれらの要件は長い間真実でした。私が「古くなったバージョン」と言うときは、 'static'キーワードが含まれているときに、あなたのコードのバージョンのクラスファイルを見ているということです。 –

+0

その場合は、ありがとう、ありがとう。 – Tanvi

関連する問題