System.out.printlnの意味がよくわかりません。
色々と参考書などを読むと、「Systemのフィールド変数outは、PrintStreamクラスのインスタンスを参照している。」との記述がありました。
ならばと、直接io パッケージからPrintStream 、outを呼び出すため、
“java.io.PrintStream.out. println();”と書きましたが、「outが不可視です」とのエラーが出ます。
このコマンドのどこが間違っているのでしょうか。
また、何故、Systemから、他のパッケージにあるメソッドを呼び出すのでしょうか。
わざわざSystemから、ioパッケージにあるout 、println() を呼び出す必要があるのでしょうか。
他の呼び出し方はないのでしょうか。;
No.1
- 回答日時:
まずprintln() がStatic な関数であれば呼び出せます。
上記のエラーですと、どうやらそうではないようですね。(ドキュメントを確認ください)この場合、コンソールに対する出力用としてPrintStream が最初から準備(インスタンス化されていて、出力先は標準出力コンソールに設定されている)という訳です。System.out がまさにそれです。
いわゆるStream 系は出力先やら設定を保持する必要があるので、オブジェクトをインスタンス化して使う事を想定しています。そしてSystem.out はデフォルトで用意(つまりJava サイドで勝手にインスタンス化)されているって事です。
あなたが別の出力先(例えばファイルなど)を指定したいのなら、インスタンス化したオブジェクトのprintln() を呼ぶ事になるでしょう。
No.2ベストアンサー
- 回答日時:
あなたは「フィールド」「インスタンス」「パッケージ」「メソッド」などをどのように認識しているのでしょうか? そして, 「オブジェクト指向」についてどの程度わかっているのでしょうか?
なんとなく曖昧になっているような気がします. まあ, 私自身も「オブジェクト指向とは何か」と聞かれると答えに困るわけですが....
No.4
- 回答日時:
まずAPIを読めば書いてありますが、PrintStreamのフィールドのoutはアクセス修飾子がprotectedです。
つまりPrintStreamを継承したクラスからしかアクセスできません。
そのためPrintStream.outと記述してもoutが見ることができないと怒られます。
また、System.outが参照しているのはPrintStreamのインスタンスでSystem.out.println()というのはPrintStreamnクラスのprintln()というメソッドを呼び出しています。
上のような記述だとPrintStreamクラスのフィールドのoutが参照しているインスタンスのprintln()メソッドを呼び出すという意味になります。
しかしながらPrintStreamクラスのフィールドのoutはOutputStreamクラスのインスタンスを参照しています。
このOutputStreamクラスにはprintln()メソッドは定義されていません。
したがってoutが例え可視の状態にあってもprintln()なんてないから呼び出せませんとコンパイラにエラーを出されてしまいます。
二番目の質問に対してですが、恐らくパッケージに対しての認識がちょっと間違っていると思いますので、参考書を読みながらしっかり理解されることをお勧めします。
SystemからPrintStreamのprintlnを呼び出すのは簡単に標準出力を行うためです。
PrintStreamのインスタンスを作ってprintln()を呼び出してという作業を自分でしなくてもSunが準備してくれたものを使えば簡単にできますよということです。
オブジェクト指向には一回作ったものを再利用しようという考え方があります。
よく使う処理を毎回毎回プログラマが作っていたら面倒ですよね?
それを回避するために最初から簡単にできるようなものをSunが作ってくれたってことです。
これらを理解するにはオブジェクト指向やJavaに対する知識がある程度必要なので、とりあえず今はおとなしくSystem.out.println()をつかっておいて、分かるようになってから考えればいいと思います。
頑張ってください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- 英語 この英文の意味を教えてください 3 2023/07/07 20:36
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- 英語 home where you've rented one out for a week? 4 2022/08/06 09:13
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- 英語 文の構造をご教示ください 2 2023/01/01 18:03
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- 英語 私は一週間のうち三日間働いています の英訳について I work three days out of 2 2023/01/28 11:32
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.out.printlnの意味がよ...
-
System.err. printlnとSystem.o...
-
Javaで改行などが出来ないのです。
-
1~100までの数字を表示し、か...
-
Eclipseのコンソールを常に表示...
-
System.out.printlnの出力先
-
javaのwhile文で九九の表
-
flush()とclose()について
-
Log4jで機能毎に別ファイルへ出...
-
文字の順番を昇順に
-
tomcatのstdout.logを停止したい。
-
Tomcatが無応答となる現象が起...
-
system.out.printが出力されない
-
Javaで任意のパスへ任意のファ...
-
大容量のテキストファイルの内...
-
【SQLServer接続のJSPの記述を...
-
Java 九九の表について
-
行列の表示
-
一定のスペースを空けて端を揃...
-
ArrayListによる計算表作成
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.err. printlnとSystem.o...
-
Log4jで機能毎に別ファイルへ出...
-
System.out.printlnの出力先
-
Eclipseのコンソールを常に表示...
-
Javaで改行などが出来ないのです。
-
flush()とclose()について
-
system.out.printが出力されない
-
1~100までの数字を表示し、か...
-
StringBufferで改ページ処理を...
-
InputStreamはreadが1回しかで...
-
JavaScriptの変数をjavaのメソ...
-
Tomcatが無応答となる現象が起...
-
1~100までの数字を表示したい
-
switch分が機能しません。
-
数字文字列をパック10進数に変...
-
VBSエラー"オブジェクト型の変...
-
Apache POI のログについて
-
System.out.printlnの意味がよ...
-
Javaの問題なのですが、 永久ル...
-
OpenSSL関数エラーについて
おすすめ情報