いつもお世話になっております。
標準入力についての質問です。
標準入力からデータを入力し、そのデータを表示させる以下のプログラムを作りました。
------
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 のオブジェクト」
ということが理解できません。
分かりにくい説明で申し訳ありませんが、ご教授お願い致します。
No.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な)クラスは自動的にインポートされる」ためです。
liar_adan さん、ご回答ありがとうございました。
大変参考になりました。
Java では、API がいろいろと便利なものを用意してくれていて、
それを利用することでプログラムが効率的に組めたりする、
ということは十分承知しているのですが…
お恥ずかしながら、イマイチ API の有効的な使い方(調べ方)が分かっていません。
慣れの問題なのでしょうか、もっと頑張って勉強しようと思います。
ありがとうございました。
No.1
- 回答日時:
>それとも、in は System クラスのフィールド(=定数?) なので、使えるのでしょうか?
>(java.lang のクラスである System クラスは、明示的に import しなくても使えるから)
その通りです。System.in、System.outは、すでに作りつけなので
newしなくても使えるのです。
liar_adan さん、早速のご回答ありがとうございます。
System.in が new 演算子で生成しなくても使える理由は分かりました。
もともと「作りつけ」なので、新たに生成する必要がない、ということですよね?
ということは、
System.in は、InputStream のオブジェクトとして作りつけられているということなのでしょうか?
でも、明示的に import しなくても使えるのは、java.lang 配下にあるからなんですよね…?
申し訳ありません、よろしければ補足説明頂けますでしょうか。
宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IPアドレスのクラスAを取得して...
-
共通で使う関数を集めたクラス...
-
java eclipse 型に解決できません
-
標準モジュールとクラスモジュ...
-
配列の重複する値とその個数を...
-
eclipse でクラスに色
-
BSアンテナのサイズ(札幌)に...
-
main()を持つクラスが2つ以上...
-
ATLとMFCの違いは何でしょうか?
-
コンボボックスのマウスホイー...
-
eclipeでクラス作成ができない
-
1 つのヘッダファイルに複数の...
-
同じクラスにならない確率を教...
-
Lsit<LabelValueBean>について
-
シングルページでのカレント表...
-
JPEGのサムネール表示について
-
C#で OpenSSLで3DES
-
修学旅行での演芸大会の出し物...
-
「エンクロージング型」と「外...
-
tomcat上でのpropertiesファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
java eclipse 型に解決できません
-
配列の重複する値とその個数を...
-
どこからも呼ばれていない無意...
-
同一パッケージにあるクラスが...
-
A・B・Cクラスとは?
-
同じクラスにならない確率を教...
-
dllと同じプロジェクトにする方法
-
IPアドレスのクラスAを取得して...
-
eclipse でクラスに色
-
main()を持つクラスが2つ以上...
-
コンボボックスのマウスホイー...
-
3年間同じクラスになる確率
-
自作のクラスファイルがインポ...
-
共通で使う関数を集めたクラス...
-
VBAもしくはVB6:クラスの中で...
-
重複エラーを解決するには
-
複数のクラスで共通した関数を...
-
「天声人語」をインターネット...
-
string formatについて
-
1 つのヘッダファイルに複数の...
おすすめ情報