System.out.printlnはどうやって作動してるのか
public class Main{ public static void main(String[] args) { System.out.println("hello world"); } }
最初にjavaを始めて書くコードをおそらく上記のものだろう
このコードを実行するとhehllo worldを出力される
ではこの中にあるSystem.out.printlnはなんなのか
出力をする記号とという認識からもうワンステップ理解を深めていきたい
System.out.printlnをよく見ると単語と単語を.で結んでいる
これはどこかで見たことがないだろうか・・・
そう、インスタンスの要素を呼び出すときに使うものと同じ流れである
つまりSystemクラスのoutメソッドのprintlnメソッドorフィールドを使っている?
半分正解である
一つ一つ要素を読み解いていこう
System
Systemは実はパッケージjava.langにあるSystemクラスを使用している
javaは自動的に幾つかのパッケージを持っているが上記コードではimport文は見られない
実は暗黙的に勝手にjava.langをimportしているのである
それでSystemクラスを使用することができる
Systemクラスの中身はよく分かんなかったので自分で確認してください
out
これはsystemクラスにあるフィールドを指している
Systemクラスの中身を見てみると下記文がある
public final static PrintStream out
つまりoutはfinal修飾子のPrintStream型にあるstatic領域に保存するフィールドである
println
上記で出てきたPrintStreamはパッケージjava.ioにあるクラスである
このクラスにあるのがprintlnメソッドである
printlinメソッドはそれぞれの型が受け取れるように幾つかのメソッドがある
今回はString型”hello world"を受け取っているのでprintln(String)メソッドを使用している
public void println(String x) { synchronized (this) { print(x); newLine(); } }
println(String)メソッドは上記のようになっている
ここにnewLineメソッドやsynchronized(this)メソッドもあるがこれを追うとかぎりがないので今回は追わない
なのでSystem.out.printlnはSystemクラスにあるout変数、つまりPrintStreamクラスにあるprintln(String)メソッドに"hello world"を呼び出していることになる