
基本的なことですが、普段、我々がJavaで開発するにあたり、デバッグする際は、当たり前のように「Sytem.out.println(変数)」というように使っていますが、このクラスは一体何なんでしょうか。細かく見ていきましょう。
System.out.printlnの役割
APIリファレンスを見ると、引数としてObject型を取り、渡されたオブジェクトの内容を画面に表示する役割ですが、細かく見ていきましょう。
Systemクラス
Objectクラスを継承しています。
outフィールド
Systemクラスのフィールドとして、PrintStreamクラス型の「out」フィールドを持っています。
printlnメソッド
色々な引数を取る、メソッドがありますが、いずれも出力をするためのメソッドのようです。
System.out.println()の引数にインスタンスを渡した場合
例えば、下記のように生成したインスタンスをそのまま、System.out.printlnを渡します。
引き渡すインスタンス
1 2 3 4 5 6 7 8 |
public class People { //自己紹介 void selfIntroduction() {; System.out.println("私は人です。"); } } |
呼んでいるクラス
1 2 3 4 5 6 7 8 9 10 |
public class Main { public static void main(String args[]) { People hito = new People(); System.out.println(hito); } } |
実行結果としては、下記のように変な出力結果なります。
これは、インスタンスの場合は、toString()メソッドが呼ばれています。
toStringメソッド
Objectクラスにある、インスタンスの内容がどのようなものなのか文字列表現を得るためのメソッドです。
デフォルトだと、「型名@英数字」という出力形式を取ります。
もし、上記のようなわけのわからない結果になりたくない場合は、下記のようにtoStringメソッドをクラスでオーバーライドしましょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
public class People { //自己紹介 void selfIntroduction() {; System.out.println("私は人です。"); } public String toString() { return "これは、人用のクラスです。"; } } |
すると、下記のように意図した文字列が出力されるようになります。
用途が複雑なクラスほど、後で見たときにわからなくなるので、いくつもの情報を持つクラスの場合は、是非toStringメソッドをオーバーライドして、そのインスタンスに関する情報を出力させてあげるようにしましょう。
この記事へのコメントはありません。