個人事業主の方必見!確定申告のお悩み解決

「すでに開かれている」の意味を教えてください。

java.lang.System.outをリファレンスで確認したところ、
『「標準」出力ストリームです。このストリームはすでに開いていて・・・』
という記述がありました。
「すでに開いている」とは、インスタンス化されているということでしょうか?

もし開かれていない場合、
java.lang.System.out g = new PrintStream();
なることをしてPrintStreamsをインスタンス化し、g.println()として使用しなければならないということでしょうか?これらが暗黙的に行われているという認識でいいのですか?

意味が分からないことになっていますか?
何かヒントがあればよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

java.lang.System.outに結びつけられている出力ストリームは使用開始準備が整っていて、すぐにそのストリームへ出力ができるということです。

当然、その出力ストリームのインスタンスが存在しています。

> java.lang.System.out g = new PrintStream();

こういう書き方はできません。java.lang.System.outはフィールド名であってクラス名や型名ではないので、それを以て変数gを宣言することはできません。
java.lang.System.outに結びつけられている出力ストリームを別のもので取り替えたい場合には、java.lang.System.setOut()メソッドを使います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
確かにフィールドなので、そのように宣言することはできませんね。
> java.lang.System.out g = new PrintStream();
java.lang.System.out = new PrintStream();
上記のように宣言しているということでしょうか?

お礼日時:2010/06/26 13:58

eclipse上でSystemクラスの中を見てみると、以下のようになってました。



private static native void setOut0(PrintStream out);

private static void initializeSystemClass() {

//途中省略

FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);

//途中省略

setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));

//途中省略

}

initializeSystemClassというのが、直接どこからも呼ばれてなさそうなので、これ以上詳しくはわかりませんが、(自動で呼ばれるようになってる?)初期化の時点で、インスタンスを設定しているのは間違い有りません。
気になるなら、Systemクラスや、上記のinitializeSystemClassのメソッドで使われているFileDescriptorクラスのコードを読んでみるといいでしょう。
ただ、ソースを追っていっても、nativeなメソッドに突き当たってしまうと思うので、全体の動きを理解するのは難しいと思いますが、なんとなくイメージはつかめると思います。

http://www3.ea.u-tokai.ac.jp/~sakata/jdk5/docs/j …
http://e-words.jp/w/E38395E382A1E382A4E383ABE383 …
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング