通过Java IO流的形式实现键盘录入的疑问
巴扎黑
巴扎黑 2017-04-18 10:54:47
0
2
550

巴扎黑
巴扎黑

全員に返信(2)
左手右手慢动作

System.in は静的な InputStream インスタンスであるため、Java API ドキュメントで確認できます

いいねを押す +0
Peter_Zhu

まず、System.in は、InputStream 型のオブジェクトであり、ソース コードでは次のようになります。

リーリー

System.in は標準入力に属しており、キーボードまたはその他の方法でデータを入力できることがわかります。
しかし、ソース コードでは、このオブジェクトには (明示的な) 初期化メソッドがありません。ソース コードを読むと、次のメソッドが見つかります。 リーリー

コメントを読むと、このメソッドが setIn0(in) の設定に使用されていることがわかります。

setIn0(in) を調べると、このメソッドは基になるインターフェイスを呼び出すことで in の設定を実現していることがわかります。では、ソフトウェアの実行中にどのように初期化されるのでしょうか。
System クラスには次のコードがあります:
リーリー このコードから、ソフトウェアの実行時に、最初に静的コード ブロックが実行され、基礎となるメソッド registerNatives() が呼び出されて System クラスが初期化されることがわかります。このメソッドは、initializeSystemClass() メソッドを呼び出して System クラスを初期化します。これらの 2 つのステップは VM によって実装され、initializeSystemClass() メソッドを読み取ると、3 つのコードが setIn0、setOut0、および steErr0 と呼ばれ、標準入力、標準出力、および標準エラーの 3 つの出力ストリームを初期化することがわかります。 . この時点で、System.in、out、および err の初期化プロセスはすべてクリアです。

ネイティブとしてマークされたメソッドは、他のコードを呼び出す JVM によって実装される関数です。これは、ブートストラップ クラスローダーが実際には C で実装されているように感じられると思いますが、ロードするために JVM によって呼び出されます。それぞれの基本的な JAR クラス。

さらに、InputStream は抽象クラス (インターフェイス) であると述べましたが、実際には、すべてのインターフェイス クラスと抽象クラスはパラメーターとして使用できますが、それらによって実装されることは間違いなくありませんが、実装することはできます。結局のところ、親クラスが出現する場所は、サブクラスを置き換えることができるので、ここでは問題ありません

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート