blog

メインメソッドのJavaは説明した

Javaのメインメソッドは、Javaアプリケーションへの入り口であり、どんなに複雑なJavaアプリケーションは巨大であるか、またはどのように小さいですが、限り、彼は実行可能なJavaプログラムであると...

Aug 14, 2020 · 4 min. read
シェア

メインメソッドのJavaは、入り口のJavaアプリケーションですが、どんなに複雑なJavaアプリケーションは、巨大な、またはどのように小さいですが、限り、彼はJavaプログラムは、メインメソッドが存在する必要があります実行することができます:

public class Demo {

public static void main(String[] args) {
	System.out.println("Hello Word");
}

1 2 3 4 5 1.なぜ公立なのか

ans1:Javaにはprivate、protected、publicといったアクセス可能な修飾子があります。それぞれの修飾子には対応するパーミッションがあり、publicのパーミッションは最大です。すると、JVMはmainメソッドにアクセスできなくなります。そのため、JVMがどのような場合でもmainメソッドにアクセスできるように、publicで変更します。ans2: Javaには、private、protected、publicといったアクセス修飾子が用意されています。 Javaでpublicと宣言されたメソッドや変数は、クラスの外部からアクセスすることができます。 そして、メインメソッドへのJVMアクセスは、明らかにクラス内部からアクセスされないので、メインメソッドはpublicとして定義される必要があります。

2.なぜ静的

staticは、JVMがオブジェクトを介さずにメイン・メソッドを呼び出すことを容易にします。staticキーワードについて知っておく必要があるのは、staticキーワードによって変更されたメソッドは、インスタンスを生成する代わりにクラス名で直接アクセスできるということです。また、静的に変更されたメソッドと変数は、ヒープ・メモリではなく、仮想マシンのメソッド領域に格納されます。同じことが仮想マシンにも当てはまります。メイン・メソッドが static として定義されている場合、アプリケーションの起動後にメイン・メソッドを呼び出すために仮想マシンがインスタンスを作成する必要はありません。

3.戻り値がない理由

voidは、mainメソッドに戻り値がないことを意味します。戻り値がない理由は、Javaではmainメソッドが終了情報をオペレーティング・システムに返す必要がないからです。mainメソッドが正常に終了した場合、Javaアプリケーション層シーケンスの終了コードは0となり、プログラムが正常に実行されたことを示します。

4.メイン

mainメソッドはプログラムの初期スレッドの起点となり、そこから他のスレッドが開始されます。JVM内には非ガード型とガード型の2種類のスレッドがあり、mainメソッドは非ガード型に属します。メイン・メソッドは非デーモン・スレッドで、デーモン・スレッドは通常、JVM自体によって使用され、Javaプログラムもそのスレッドがデーモン・スレッドであることを示すことができます。プログラム内のすべての非デーモン・スレッドが終了すると、JVMは終了します。終了するには、RuntimeクラスまたはSystem.exit()を使用することもできます。

5.文字列 [] 引数

String[]argsは、メインメソッドは、唯一の場所を変更することができますです! argsは、引数の略語であり、単に変数のデフォルト名は、慣習的にそれを書くが、命名規則限り、あなたが何に書き込むランダムと一致しているように、変更することができます。今日の統合開発ツールの使用では、文字列[]argsは、装飾のようなものです、多くの初心者は、実際には、その役割を知らない、それはパラメータグループに実行されるプログラムです。

public class TestSimple {

 public static void main(String... args) {
 System.out.println("hello world!"); 
 }

} 1 2 3 4 5 ps:単純なJavaプログラムでは、少なくとも5つのスレッドが開いています;

Attach Listener Attach Listener: Attach Listener スレッドは、外部コマンドを受信して実行し、その結果を送信者に返す役割を担います。通常、java -version、jmap、jstack などのように、 jvm に何らかのフィードバック情報を与えるように要求するコマンドを使用します。jvmの起動時にスレッドが初期化されていない場合、ユーザが最初にjvmコマンドを実行したときにスレッドが起動されます。

信号ディスパッチャー

Signal Dispatcher: 前述のように、最初の Attach Listener スレッドは、外部からの jvm コマンドを受信する役割を担っています。コマンドが正常に受信されると、そのコマンドは signal dispather スレッドに引き渡され、コマンドを処理して処理結果を返すためにさまざまなモジュールに分配されます。signal dispather スレッドは、外部の jvm コマンドを最初に受信したときにも初期化されます。

ファイナライザー

ファイナライザー:このスレッドもメインスレッドの後に優先度10で作成され、主にゴミ収集前にオブジェクトのfinalize()メソッドを呼び出すために使用されます:

1) finalize() メソッドが呼び出されるのは、ゴミ収集のラウンドが開始されたときだけです;

2) このスレッドはデーモン・スレッドでもあるため、VM内に他の非デーモン・スレッドがない場合、スレッドがfinalize()メソッドの実行を終了したかどうかにかかわらず、JVMも終了します;

  1. ゴミ収集のJVMは、オブジェクトへの参照がファイナライザーオブジェクトにラップされ、ファイナライザースレッドが処理するために、ReferenceQueueに入れられ、失われます;最後に、ファイナライザーオブジェクトの参照は、リサイクルするゴミコレクターによって、NULLに設定されます;

  2. なぜJVMはfinalize()メソッドを実行するために別のスレッドを使用するのですか?もしJVMのゴミ収集スレッドが自分自身でそれを行うと、finalize()メソッドの誤動作によってGCスレッドが停止したり制御不能になる可能性が高くなります;

リファレンスハンドラ

リファレンスハンドラ:リファレンスハンドラスレッドの作成にメインスレッドのVMは、その最優先は、10については、主に参照オブジェクト自体のごみ収集の問題に対処するために使用されます。

Read next

オープンサイン

feign リクエストのパラメータ解析 openFeign ファイルアップロード submit

Aug 14, 2020 · 1 min read