84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
System.in は静的な InputStream インスタンスであるため、Java API ドキュメントで確認できます
まず、System.in は、InputStream 型のオブジェクトであり、ソース コードでは次のようになります。
System.in は標準入力に属しており、キーボードまたはその他の方法でデータを入力できることがわかります。 しかし、ソース コードでは、このオブジェクトには (明示的な) 初期化メソッドがありません。ソース コードを読むと、次のメソッドが見つかります。 リーリー
setIn0(in) を調べると、このメソッドは基になるインターフェイスを呼び出すことで in の設定を実現していることがわかります。では、ソフトウェアの実行中にどのように初期化されるのでしょうか。 System クラスには次のコードがあります: リーリー このコードから、ソフトウェアの実行時に、最初に静的コード ブロックが実行され、基礎となるメソッド registerNatives() が呼び出されて System クラスが初期化されることがわかります。このメソッドは、initializeSystemClass() メソッドを呼び出して System クラスを初期化します。これらの 2 つのステップは VM によって実装され、initializeSystemClass() メソッドを読み取ると、3 つのコードが setIn0、setOut0、および steErr0 と呼ばれ、標準入力、標準出力、および標準エラーの 3 つの出力ストリームを初期化することがわかります。 . この時点で、System.in、out、および err の初期化プロセスはすべてクリアです。
さらに、InputStream は抽象クラス (インターフェイス) であると述べましたが、実際には、すべてのインターフェイス クラスと抽象クラスはパラメーターとして使用できますが、それらによって実装されることは間違いなくありませんが、実装することはできます。結局のところ、親クラスが出現する場所は、サブクラスを置き換えることができるので、ここでは問題ありません
System.in は静的な InputStream インスタンスであるため、Java API ドキュメントで確認できます
まず、System.in は、InputStream 型のオブジェクトであり、ソース コードでは次のようになります。
リーリーSystem.in は標準入力に属しており、キーボードまたはその他の方法でデータを入力できることがわかります。
コメントを読むと、このメソッドが setIn0(in) の設定に使用されていることがわかります。しかし、ソース コードでは、このオブジェクトには (明示的な) 初期化メソッドがありません。ソース コードを読むと、次のメソッドが見つかります。 リーリー
setIn0(in) を調べると、このメソッドは基になるインターフェイスを呼び出すことで in の設定を実現していることがわかります。では、ソフトウェアの実行中にどのように初期化されるのでしょうか。
ネイティブとしてマークされたメソッドは、他のコードを呼び出す JVM によって実装される関数です。これは、ブートストラップ クラスローダーが実際には C で実装されているように感じられると思いますが、ロードするために JVM によって呼び出されます。それぞれの基本的な JAR クラス。System クラスには次のコードがあります:
リーリー このコードから、ソフトウェアの実行時に、最初に静的コード ブロックが実行され、基礎となるメソッド registerNatives() が呼び出されて System クラスが初期化されることがわかります。このメソッドは、initializeSystemClass() メソッドを呼び出して System クラスを初期化します。これらの 2 つのステップは VM によって実装され、initializeSystemClass() メソッドを読み取ると、3 つのコードが setIn0、setOut0、および steErr0 と呼ばれ、標準入力、標準出力、および標準エラーの 3 つの出力ストリームを初期化することがわかります。 . この時点で、System.in、out、および err の初期化プロセスはすべてクリアです。
さらに、InputStream は抽象クラス (インターフェイス) であると述べましたが、実際には、すべてのインターフェイス クラスと抽象クラスはパラメーターとして使用できますが、それらによって実装されることは間違いなくありませんが、実装することはできます。結局のところ、親クラスが出現する場所は、サブクラスを置き換えることができるので、ここでは問題ありません