Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaのmain()メソッドが常にstaticである理由とは?


Javaのmain()メソッドが常にstaticとして宣言されているのは、コンパイラ(JVM)がクラスのオブジェクトを生成することなく、またオブジェクト生成前にmain()メソッドを呼び出せるようにするためです。

main()メソッドがstaticであるべき理由

  • あらゆるJavaプログラムにおいて、main()メソッドはプログラム実行の開始点(エントリーポイント)です。JVMはこのメソッドからプログラムの実行を開始するため、main()メソッドを必ず呼び出せる必要があります。
  • もしmain()メソッドが非static(インスタンスメソッド)であると許可されていた場合、JVMはmain()を呼び出す前に、そのクラスをインスタンス化しなければなりません。
  • クラスをインスタンス化する際にはコンストラクタが呼び出されますが、そのコンストラクタが引数を必要とする場合、JVMはどの値を渡せばよいか判断できず、曖昧性の問題が発生してしまいます。
  • クラスのstaticメソッドは、オブジェクトを生成することなく、クラス名だけで直接呼び出すことが可能です。この仕組みにより、main()メソッドはシンプルに起動できます。
  • Javaのmain()メソッドは、publicstaticvoidで宣言される必要があります。これらのうちどれか一つでも欠けている場合、プログラム自体はコンパイルできますが、実行時にエラーがスローされます。

コード例

class Book {
    public static void getBookInfo() { //staticメソッド
        System.out.println("Welcome to TutorialsPoint Library");
    }
}
public class Test {
    public static void main(String[] args) {
        //Bookクラスのstaticメソッドをクラス名のみで呼び出し
        Book.getBookInfo();
    }
}

実行結果

Welcome to TutorialsPoint Library

このように、staticメソッドはクラス名を指定するだけで呼び出せるため、main()メソッドをstaticにすることで、JVMは余計なオブジェクト生成やコンストラクタ呼び出しを伴わずに、確実かつ効率的にプログラムを開始できるのです。


  1. Javaのコンストラクター名がクラス名と同じでなければならない理由とは?

    コンストラクター名がクラス名と同じである理由Javaでは、あらゆるクラスのオブジェクトは共通の「new」キーワードを使って生成されます。しかし、このキーワードだけでは、どのクラスのインスタンスを作成すればよいのかを判別することはできません。そのため、オブジェクトを生成すべき対象のクラスを正確に識別するための情報が必要になります。この課題を解決するために、「コンストラクター名は必ずクラス名と一致させる」というルールが設けられています。クラス名とコンストラクター名が同一であれば、newキーワードに続けて書かれた名前をもとに、どのクラスのコンストラクターを呼び出してオブジェクトを初期化すべきかを明確

  2. Javaのメソッドオーバーライドとは?仕組みとサンプルコードを解説

    オーバーライドとはオーバーライド(Override)とは、サブクラスが親クラスから継承したメソッドを、自身の要件に合わせて再定義できる機能です。これにより、サブクラスはその型に固有の振る舞いを実装することができます。オブジェクト指向の観点で言えば、オーバーライドとは「既存のメソッドの機能を上書きする」ことを意味します。オーバーライドの例具体的な例を見てみましょう。以下のコードでは、Animal クラスの move() メソッドを、Dog クラスがオーバーライドしています。class Animal {    public void move() {&nbs