アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっております。

標準入力についての質問です。

標準入力からデータを入力し、そのデータを表示させる以下のプログラムを作りました。

------
import java.io.*;

class InputTest{
public static void main(String args[]) throws IOException{
String moji;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
System.out.print("文字列を入力してください。 文字 = ");
moji = br.readLine();
System.out.println("\n入力した文字列は" + moji + "です。");
}
}
------

上記のソースの「System.in」なのですが、私が参考にしているテキストには
「InputStream クラスのオブジェクト」という説明になっていました。

これまで、オブジェクトは new 演算を使って生成しないと使えないと思っていたのですが…
ここでは、事前に java.io を import しているから使えるのでしょうか?

それとも、in は System クラスのフィールド(=定数?) なので、使えるのでしょうか?
(java.lang のクラスである System クラスは、明示的に import しなくても使えるから)

いずれにしても、「java.lang.System.in が、java.io.InputStream のオブジェクト」
ということが理解できません。

分かりにくい説明で申し訳ありませんが、ご教授お願い致します。

A 回答 (2件)

>ということは、


>System.in は、InputStream のオブジェクトとして作りつけられているということなのでしょうか?

はい、そうです。JavaのAPIドキュメントを見るとわかりますが、
クラスSystemの「フィールド」の中に、in、out、errがあります。
inはInputStream、outとerrはPrintStreamとして宣言されています。

なお、「フィールド」でも、通常のフィールドはnewの必要がありますが、
Systemのinやoutは、APIドキュメントに「すでに開いていて」とあるとおり、
プログラムが動いた時点でもう初期化とオープンが済んでいる約束になっているのです。

>でも、明示的に import しなくても使えるのは、java.lang 配下にあるからなんですよね…?

そうです。「java.langの(publicな)クラスは自動的にインポートされる」ためです。
    • good
    • 0
この回答へのお礼

liar_adan さん、ご回答ありがとうございました。
大変参考になりました。

Java では、API がいろいろと便利なものを用意してくれていて、
それを利用することでプログラムが効率的に組めたりする、
ということは十分承知しているのですが…

お恥ずかしながら、イマイチ API の有効的な使い方(調べ方)が分かっていません。

慣れの問題なのでしょうか、もっと頑張って勉強しようと思います。

ありがとうございました。

お礼日時:2003/02/17 09:50

>それとも、in は System クラスのフィールド(=定数?) なので、使えるのでしょうか?


>(java.lang のクラスである System クラスは、明示的に import しなくても使えるから)

その通りです。System.in、System.outは、すでに作りつけなので
newしなくても使えるのです。
    • good
    • 0
この回答へのお礼

liar_adan さん、早速のご回答ありがとうございます。

System.in が new 演算子で生成しなくても使える理由は分かりました。
もともと「作りつけ」なので、新たに生成する必要がない、ということですよね?

ということは、
System.in は、InputStream のオブジェクトとして作りつけられているということなのでしょうか?

でも、明示的に import しなくても使えるのは、java.lang 配下にあるからなんですよね…?

申し訳ありません、よろしければ補足説明頂けますでしょうか。
宜しくお願い致します。

お礼日時:2003/02/13 19:23

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