ホームページ  >  に質問  >  本文

通过Java IO流的形式实现键盘录入的疑问

巴扎黑巴扎黑2742日前503

全員に返信(2)返信します

  • ringa_lee

    ringa_lee2017-04-18 10:56:47

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

    返事
    0
  • 天蓬老师

    天蓬老师2017-04-18 10:56:47

    まず、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
  • キャンセル返事