序文
Javaの主な機能に非常に精通しています。 Java言語を学んだ人は誰でも、このプログラムのエントリ機能を巧みに書くことができると思います。ただし、主な関数がこのように記述される理由のために、各キーワードとはどういう意味ですか?おそらく誰もが簡単に答えることができないでしょう。また、勉強中にこの問題に遭遇しました。オンラインで情報を検索し、自分の練習を追加することで、ついにいくつかの経験を得ました。私はあえてそれを保持しないで、それを皆と共有するためにそれを書きました。
Javaのmain()メソッド
Java Virtual Machineは、メインメソッドを使用して開始する必要がある実行中のプログラムを見つけ、メイン関数が配置されているクラスがJava仮想マシンによってロードされているかどうかを確認します。ロードされていない場合は、クラスをロードして、関連するすべてのクラスをロードします。したがって、プログラムが実行されているとき、最初に実行する方法はmain()メソッドです。通常、クラスメソッドを実行する場合は、まずこのクラスのオブジェクトをインスタンス化してから、「オブジェクト名。メソッド名()を渡す必要があります。 「しかし、メインはプログラムのエントリポイントであるため、オブジェクトは現時点ではインスタンス化されていないため、メイン方法は静的として宣言されているため、この方法は「クラス名」を介して直接呼び出すことができます。メソッドname() "。
JavaのMain()メソッドを見る前に、まず最もシンプルなJavaアプリケーションHelloworldを見てみましょう。この例を使用して、Javaクラスのmain()メソッドの謎を説明します。プログラムのコードは次のとおりです。
/ *** Javaのmain()メソッドの詳細な説明*/ public class helloworld {public static void main(string args []){system.out.println( "hello world!"); }}1。最初にカテゴリについて話しましょう:
Helloworldクラスにはmain()メソッドがあります。つまり、これはJVMを開始および実行するJavaアプリケーションであることを意味します。
クラスであるため、Javaはクラスを公開キーワードの制約の対象にしないようにします。もちろん、クラスの定義は、パブリックまたは無制限のキーワード(デフォルト)にのみ制限できます。
2。メイン()メソッドについて説明しましょう
main()メソッドは次のように宣言されます: public static void main(String args[]) 。このように定義する必要があります。これはJava仕様です。
なぜこのように定義されているのですか? JVMの操作と関係があります。
クラスにmain()メソッドがある場合、コマンド「Javaクラス名」を実行すると、仮想マシンが起動してクラスのメインメソッドを実行します。
JVMは、このJavaアプリケーションを実行するときに最初にメインメソッドを呼び出すためです。呼び出すと、このクラスのオブジェクトはインスタンス化されていませんが、クラス名を介して直接呼び出されるため、public staticに制限する必要があります。
Javaの主な方法では、JVMには制限があり、返品値を持つことができないため、返品値の種類は無効です。
また、メインメソッドには入力パラメーターがあります。これは、Java仕様でもある型文字列[]でもあります。 main()メソッドにはエントリパラメーターが必要で、クラスの詳細はString[]でなければなりません。文字列アレイの名前については、これは自分で設定できます。習慣によれば、この文字列配列の名前は一般に、Sun Java仕様の例のMianパラメーターの名前と一致しており、Argsという名前が付けられています。
したがって、 main()メソッド定義は次のものでなければなりません:「 public static void main(String 字符串数组参数名[]) 」。
3.メイン()メソッドは例外をスローできます
したがって、 main()メソッドで例外をスローでき、 main()メソッドで例外を宣言することもできます。
たとえば、以下は正しいです。
public class testmain {public static void main(string [] args)throws exception {system.out.println( "hahahahahahahaha");新しい例外をスロー( ""); }}Running result: hahahahaha Exception in thread "main" java.lang.Exception: at maintainest.TestMain.main(TestMain.java:11) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.delegatingmethodaccessorimpl.invoke(Delegatingmethodaccessorimpl.java:25)at java.lang.reflt.method.invoke(method.java:585)at com.intellij.rt.execution.application.apmain.mainの完成(90)
4。main()メソッドの文字列パラメーター配列の関数
main()メソッドでは、文字列パラメーター配列がコマンドライン入力パラメーターを受信するように関数、コマンドラインのパラメーターはスペースによって分離されます。
この配列を初期化して使用する方法を確認する例を次に示します。
/ ***メインメソッドの入力パラメーターを印刷*/ public class testmain {public static void main(string args []){system.out.println( "メインメソッドの印刷入力パラメーター!"); for(int i = 0; i <args.length; i ++){system.out.println(args [i]); }}}実行方法と操作結果
D:/Study/Basetest/src> Javac testmain.java D:/Study/Basetest/Src> Java Testmain 1 2 3メインメソッドの入力パラメーターを印刷してください! 1 2 3
5. Helloworldの別のバージョンを指定します
/ *** helloworld.hehe*/ public class helloworld2の倒錯バージョン{static {system.out.println( "hello wordld!"); } public static void main(string args []){system.exit(0); }} main()メソッドは、プログラムを正常に終了する目的で、文のコンテンツ「 System.exit(0); 」を実行します。 「Helloworld!」から印刷しますか?秘密は静的に印刷されます。これは、静的コードブロックの内容がメインコールの前に呼び出されるためです。
vi。例
仮想マシンは、指定されたクラスのメソッドメソッドを呼び出し、メインの文字列配列パラメーターに渡すことから始まり、指定されたクラスがロードされ、クラスで使用される他のタイプをリンクして初期化します。たとえば、プログラムの場合:
public class helloapp {public static void main(string [] args){system.out.println( "hello world!"); for(int i = 0; i <args.length; i ++){system.out.println(args); }}}コンパイル後、コマンドラインモードを入力:Java helloapp run仮想マシン
Java Virtual Machineは、HelloAppのMethod Mainmeを呼び出すことにより開始され、3つの文字列「実行」、「仮想」、および「マシン」を含むメインに渡されます。次に、HelloAppを実行するときに仮想マシンがとる可能性のある手順を簡単に説明します。
私はHelloAppクラスの主な方法を実行しようとし始めましたが、クラスにロードされていないことがわかりました。つまり、仮想マシンには現在、クラスのバイナリ代表が含まれていません。そのため、仮想マシンはクラスローダーを使用して、そのようなバイナリ代表を見つけようとしました。このプロセスが失敗した場合、例外がスローされます。クラスがロードされた後、メインメソッドが呼び出される前に、クラスのhelloAppを他のタイプにリンクして初期化する必要があります。リンクは、検査、準備、解析の3つの段階で構成されています。ロードされたメインクラスのシンボルとセマンティクスを検証し、クラスまたはインターフェイスの静的ドメインを作成し、これらのドメインを標準のデフォルト値に初期化する準備をします。解析は、メインクラスの象徴リファレンスを他のクラスまたはインターフェイスにチェックする責任があります。このステップではオプションです。クラスの初期化は、静的初期化関数の実行と、クラスで宣言された静的ドメインの初期化コンストラクターです。クラスの親クラスは、初期化される前に初期化する必要があります。
プロセス全体が次のとおりです。
要約します
特別な仕様として、主な方法は通常の方法とは大きく異なり、多くの制限があります。その原則を理解するには、JVM関連の知識を学ぶ必要があります。これは、Javaで学習するための大きな障害です。上記は、編集者が編集したメインの原則と使用の要約です。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。