メインメソッド無しでJavaを実行する方法

このQ&Aのポイント
  • メインメソッドが必須とされているが、実際には無くてもJavaを動かす裏ワザが存在する。
  • staticイニシャライザーを使用することで、メインメソッドが無くてもJavaを実行することができる。
  • ただし、古いバージョンのJavaでのみ動作し、現在のバージョンではメインメソッドが必須となっている可能性がある。
回答を見る
  • ベストアンサー

メインメソッド無しでJavaを実行する方法

Javaにメインメソッドってあるじゃん。public static void main(string[] args){;}でお馴染みのアレです。 Javaを実行するには、javaコマンドの引数に.classファイルのファイル名を指定するよね。んで、その.classファイルにメインメソッドを含んでいる必要があって、Javaを実行するにはメインメソッドが必須だそうです。このように、参考書やWEBなどあちこちに書いてあります。 しかし、メインメソッド必須というのは、厳密には間違いなんだそうです。メインメソッドが無くてもJavaを動かす裏ワザがあると、↓のブログに書いてありました。(基本はメインメソッドだとは思うのですが) http://blogs.wankuma.com/kacchan6/archive/2007/07/24/86663.aspx ここにプログラムがザックリ書いてあったのですが、本当に動くんですか? public class MimeticMain{ static boolean init = caller(); public static boolean caller(){ System.out.println("main()が無くても動く"); return true; } } -- これを動かすと、「main()が無くても動く」と表示するんですかね。私がやると、エラーになっちゃったのですが。 エラー: メイン・メソッドがクラスMimeticMainで見つかりません。次のようにメイン・メソッドを定義してください。 public static void main(String[] args) ーー あと、staticイニシャライザーを使うと、メインメソッドが無くても動くと、冒頭に書いてあります。自分なりに調べて書いてみたんですが、エラーですね。 public class MimeticMain{ public static void mMain(){System.out.println("main()が無くても動く");} static{mMain();} } メインメソッドが無くても動くって、本当?そのコードを書けますか?10行50ワード以下の簡単なプログラムで良いと思いますが。 2007年のブログらしく、当時の古いバージョンのJavaならば動くのかしら?Javaも仕様がどんどん変わっていて、バージョンアップするとメインメソッド必須になったのかしら?

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>2007年のブログらしく、当時の古いバージョンのJavaならば動くのかしら?Javaも仕様がどんどん変わっていて、バージョンアップするとメインメソッド必須になったのかしら? 自分で検証・コード確認してないけど多分そうじゃないかな、以下のページ読む限りでは。 http://stackoverflow.com/questions/17889220/will-a-static-block-execute-without-main-method http://stackoverflow.com/questions/17890723/java7-bootstrap-checking-class-without-loading/17891211

five_163
質問者

お礼

さんきゅー

関連するQ&A

  • java 実行できない

    javaで public class HelloWorld{ public static void main(String[] args){ System.out.println("Hello World!"); } } のようなプログラムをかいて、コンパイルして、実行しようとすると エラー: メイン・メソッドがクラスStringで見つかりません。次のようにメイン・メソッドを定義してください。 public static void main(String[] args) またはJavaFXアプリケーション・クラスはjavafx.application.Applicationを拡張する必要がありま というエラーがでます。コンパイルはできます。jdkは1.8.0_25を使っています。

  • メインメソッドの記述について

    メインメソッドを記述する際に、   public static void main(String[] args){     ~~~~~~~~~~~~~   } と書くと思いますが、なぜpublicを付けなければならないのでしょうか? 簡単に考えるために、1つのクラスのみで実行してみたのですがやはりpublicをつけないとエラーになってしまします。 1つのクラスしかないので、どこからも参照されないからpublicでなくても良いと思ったのですが・・・ ちなみに以下の様なとても簡単なもので考えました。 class E_1{ static void main(String[] args){ System.out.println("実験です"); } }

  • メインメソッドのstatic

    javaでstaticは静的という意味があると思うのですがメインメソッドにも使われていますよね? public static void main(String[] args) publicはどこからでもアクセスできるという意味だったと思うのですが メインメソッドにstaticがついている意味などはあるのでしょうか? 素朴な疑問です。

    • ベストアンサー
    • Java
  • JAVAで実行エラー。

    下記のエラーメッセージが出ました。 どうしてでしょうか? コンパイラーは通りました。 実行でエラ-になりました。 度々すみません。 解説のほど、宜しくお願い申し上げます。 C:\JAVA>java Monster エラー: メイン・メソッドがクラスMonsterで見つかりません。次のようにメイン・メソッドを定義してください。 public static void main(String[] args) またはJavaFXアプリケーション・クラスはjavafx.application.Applicationを拡張する必要があります class Monster { int power; void setPower(int p) { power = p; } void walk() { System.out.println("てくてく・・・"); power--; } }

    • ベストアンサー
    • Java
  • javaの基本的な質問

    下記を実行すると、上から順番にメソッドが実行され、 「Hello Java  Hello Java」 と表示されるような気がしてしまうのですが… なぜ、一度しか表示されないのでしょうか。 class Main { public static void main(String[] args) { hello(); } public static void hello() { System.out.println("Hello Java"); } }

    • ベストアンサー
    • Java
  • mainメソッドと同じオブジェクト内のメソッドにはstaticを必ずつ

    mainメソッドと同じオブジェクト内のメソッドにはstaticを必ずつけなければならないのでしょうか? そのような記述を見掛けたのですが、もしこれが正しいという場合、 それは、なぜなのでしょう? java初心者ですが、どうぞ宜しくお願いいたします。 class MainClass{  //先頭のstaticに注目  static void sub(){   ~~  }  //mainメソッド  public static void main(String[] args){   sub();  } }

    • ベストアンサー
    • Java
  • 「エディターにはメイン型が含まれていません。」

    いつもお世話になっております。 public class Sample2 { public static void main(String[] args) { System.out.println("こんにちは、Java!"); System.out.println("私の名前はこうぞうです。"); } } 「エディターにはメイン型が含まれていません。」 とコメントが出ます。エラーです。 どう直せばいいでしょうか? ご回答のほど宜しくお願い申し上げます。

    • ベストアンサー
    • Java
  • javaでメインクラスが見つからないエラーが出てしまいます。

    javaでメインクラスが見つからないエラーが出てしまいます。 やさしい簡単なプログラム class test { public static void main(String[] args) { System.out.println("Viva!"); } } をjavacでクラスファイルを作った後に(ここまではできます)java test.class を行うと could not find the main class というエラーが出てしまいます。 教科書の通りにjdkをインストールして、パスを環境変数に通して、コマンドプロンプトでコンパイルしかしていません。 なにが悪いんでしょうか?

    • ベストアンサー
    • Java
  • Javaについて教えてください!

    sampleパッケージに属するMain.javaとSub.javaがあり、Main.javaのmainはSub.javaのsubメソッドを呼び出して「OK」と表示させるプログラムを教えてください! //Main.java package sample; public class Main{ public static void main(String[] args){ Sub.sub(); }} //Sub.java package sample; public class Sub{ static String str = "OK"; public static void sub(){ System.out.println(str); }} String型の変数strはクラス変数で行いたいのですが、どこを改善すれば良いでしょうか?

    • ベストアンサー
    • Java
  • java

    コンパイルできても、実行ができません。 次のようなエラーがでます。 このエラーはどのようなエラーなのでしょうか? Exception in thread "main" java.lang.NoClassDefFoundError: test コードはただたんにHello JAVA と表示させるだけです。 class Test{ public static void main(String args[]){ System.out.println("Hello Java\n"); } }

    • ベストアンサー
    • Java