Javaエンジニア・プログラマ向けの技術情報・業界ニュースをお届けします。

  1. FEnetJava
  2. Javaコラム
  3. Java入門
  4. Javaのmainについて基本から解説!|mainメソッドを正しく使いこなそう

Javaのmainについて基本から解説!|mainメソッドを正しく使いこなそう

  • Java入門
公開日時:   更新日時:
Javaのmainについて基本から解説!|mainメソッドを正しく使いこなそう
この記事でわかること
    システム
    エンジニア
    Javaのmainとはどのようなものでしょうか。
    プロジェクト
    マネージャー
    Javaのmainと言えばmainメソッドのことです。Javaを実行すると、まずこのmainメソッドが実行されます。

    Javaのmainとは?

    Javaのmainと言えばmainメソッドのことです。Javaを実行すると、まずこのmainメソッドが実行されます。mainメソッドがないJavaのプログラムは、以下のようなエラーが出て実行できません。

    “”エラー: メイン・メソッドがクラスMainClassで見つかりません。次のようにメイン・メソッドを定義してください。
    public static void main(String[] args)””

    なぜmainと言う名前なのかといえば、C言語などの古い言語のmain関数の仕様を引き継いでいることによります。プログラムを上から記述した順に実行する言語も多いのですが、JavaはC言語の後継を目指した言語なのでC言語寄りなのです。

    mainメソッドの決まり事

    mainメソッドは以下のような決まり事があります。

    ・クラスの中に記述すること
    ・public static voidのメソッドであること
    ・名前はmainであること(Mainは不可)
    ・メソッドの引数はStringの配列であること

    クラスの中に記述すること、はmainメソッドに限りません。Javaの全てのメソッドはクラスに属する必要があります。引数の変数名はargsとすることが多いですが、別の名前でもかまいません。

    mainメソッドの様々な書き方

    Javaのmainメソッドは上のルール通りの以下の記述が一般的です。

    public static void main(String[] args) {
    }

    引数は可変引数の…を使用することも可能です。

    public static void main(String… args) {

    オーバーライドを禁止するfinalを付けたり、例外を発生する宣言のthrowsを付けても、ルールを満たしていれば問題ありません。

    public final static void main(String[] args) throws Exception {
    }

    mainメソッドの変わった記述

    もしmainメソッドを以下のように引数を変えてオーバーロードした場合、上のルールに沿ったmainメソッドが呼ばれます。

    public static void main(String[] args) {
    System.out.println(“”これが呼び出されます。””);
    }
    public static void main(String args) {
    }
    public static void main(int[] args) {
    }

    またmainメソッドは普通のクラスではなく、abstractクラスやinterface、enumでも問題なく呼ばれます。ただこのようなトリッキーな事はしない方が良いでしょう。

    interface MainInterface {
    public static void main(String[] args) {
    }
    }

    mainの引数を利用するには?

    mainメソッドの引数のString配列はどのように使うのでしょうか。Javaをコマンドラインから実行した場合、以下のように引数を渡すことができます。

    java MainClass パラメータ1 パラメータ2 パラメータ3

    public class MainClass {
    public static void main(String[] args) {
    for (String s : args) {
    System.out.println(s);
    }
    }
    }

    実行結果は

    パラメータ1
    パラメータ2
    パラメータ3

    となります。

    Eclipseでも引数を渡せる

    Eclipseで行う場合は、上のメニューのRun→Run ConfigurationsでmainのあるクラスのArgumentsタブを選択し、Program argumentsに記述することで引数を渡せます。

    これを利用すれば、プログラムをいじらずに様々なモードで起動したりと、便利に活用できます。

    なおmainに引数を渡さない場合は、長さ0のString配列になります。nullではありません。また引数に数字を渡しても、文字列として扱うことになります。

    mainメソッドの終わらせ方

    Javaのmainメソッドを終わらせるにはどうしたらよいのでしょうか。簡単な方法は、returnを使うことです。

    public static void main(String[] args) {
    for (int i = 0; i < 5; i++) {
    if (i==3) return;
    System.out.println(i+””回目のループ””);
    }
    }

    実行すると、以下のようになります。returnで終わります。

    0回目のループ
    1回目のループ
    2回目のループ

    System.exitなら戻り値を渡せる

    Javaのmainメソッドを終わらせる他の方法は、System.exitを使うことです。これはmainメソッド以外の場所でも即時で終了することができて、さらに終了時に値を渡すことが出来ます。

    public static void main(String[] args) {
    System.exit(123);
    }

    Eclipseの場合、Debugタブで以下のように戻り値が表示されます。

    <terminated, exit value: 123>

    終了処理の実行の方法

    exitでmainを終了する前に、以下のようにaddShutdownHookで終了処理を行うことが出来ます。

    public static void main(String[] args) {
    Runtime.getRuntime().addShutdownHook(
    new Thread(() -> System.out.println(“”終了処理を行います。””)));

    Runtime.getRuntime().exit(123);
    }

    実行すると、以下のように表示して終了します。

    終了処理を行います。

    haltでは終了処理は実行されない

    上のJavaサンプルのRuntime.getRuntime().exitは、System.exitでも同様に終了処理を実行できます。しかし、以下のようにhaltを使用すると、mainは終了しますが、addShutdownHookによる終了処理は実行されません。

    Runtime.getRuntime().halt(123);

    haltは緊急停止用のメソッドということになります。

    JavaのMainクラス

    JavaにはMainというクラスがあります。これを使うと、javaファイルをコンパイルしてclassファイルを作ることが出来ます。以下が例です。

    -verboseを指定してコンパイルの内部の動作を表示しています。

    import com.sun.tools.javac.Main;

    public class MainClass {
    public static void main(String[] args) throws Exception {
    String[] param = new String[] {“”c:\\test\\TestClass.java””, “”-verbose””};
    Main.main(param);
    }
    }

    Mainクラスは現在では使用しない

    上のJavaサンプルを実行すると、TestClass.javaがコンパイルされ、TestClass.classが作られます。TestClass.javaにエラーがある場合はエラーメッセージが出ます。

    ただし現在はJavaでJavaをコンパイルする場合は、MainクラスではなくJava Compiler APIを使用することが推奨されています。Mainクラスは過去のアプリケーションとの互換性のためだけに残されています。

    システム
    エンジニア
    Javaのmainについてよく理解できました。
    プロジェクト
    マネージャー
    mainを使用しないケースもあることを理解した上で、Javaのmainを実践で使用してみましょう。

    mainメソッドはJavaの基本

    Javaのmainメソッドについて解説しましたが、ご理解頂けましたでしょうか。mainメソッドはJavaを動かすための全ての始まりで、エントリーポイントと言われます。

    記事の内容については、しっかり把握しておきましょう。

    FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
    株式会社オープンアップシステムロゴ

    株式会社オープンアップシステムはこんな会社です

    秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
    数多くのエンジニアが集まります。

    秋葉原オフィスイメージ
    • スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで

      スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。

    • 充実した研修制度

      充実した研修制度

      毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。

    • 資格取得を応援

      資格取得を応援

      スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。

    • 東証プライム上場企業グループ

      東証プライム上場企業グループ

      オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。

      安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。

    株式会社オープンアップシステムに興味を持った方へ

    株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。

    年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
    まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。

    株式会社オープンアップシステムへのご応募はこちら↓
    株式会社オープンアップシステムへのご応募はこちら↓

    Java新着案件New Job