いつもお世話になっております。
標準入力についての質問です。
標準入力からデータを入力し、そのデータを表示させる以下のプログラムを作りました。
------
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で質問しましょう!
似たような質問が見つかりました
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java java final 1 2022/06/10 22:49
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- その他(プログラミング・Web制作) このpythonコードの意味教えて下さい! 2 2022/08/26 00:52
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グローバルIPとプライベートIP...
-
java eclipse 型に解決できません
-
言語[C#、Java]..クラスの扱い...
-
オブジェクト指向プログラミン...
-
packageとimport の違いって?
-
「天声人語」をインターネット...
-
IPアドレスのクラスAを取得して...
-
河合塾のクラス分けについて
-
ATLとMFCの違いは何でしょうか?
-
JSPでclassのimport
-
EclipseでJSPのコンパイルエラー
-
Javaの継承についてです。 この...
-
1 つのヘッダファイルに複数の...
-
プライベートIPの数
-
"secret" "classified" "confid...
-
eclipse でクラスに色
-
「エンクロージング型」と「外...
-
JAVAで他ライブラリのクラスを...
-
過去の辛いことや叫びたくなる...
-
エクセルVBAでのwitheventsにつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
河合塾のクラス分けについて
-
同じクラスにならない確率を教...
-
3年間同じクラスになる確率
-
「天声人語」をインターネット...
-
グローバルIPとプライベートIP...
-
配列の重複する値とその個数を...
-
java eclipse 型に解決できません
-
同一パッケージにあるクラスが...
-
私はクラスLINEにまだ入れてな...
-
老い先短い ジジィ が ふと 思う...
-
自作のクラスファイルがインポ...
-
どこからも呼ばれていない無意...
-
main()を持つクラスが2つ以上...
-
数学の計算問題。 3年間同じク...
-
クラス見てから 女の子5人 ネタ...
-
javaのコンパイルができません...
-
1 つのヘッダファイルに複数の...
-
重複エラーを解決するには
-
IPアドレスの3バイト目の呼び方
-
packageとimport の違いって?
おすすめ情報