ObjectクラスのgetClassメソッドについて

 今日サンプルコードを写経したり、ところどころ変更して実行したりしているうちに気が付きましたが、getClassメソッドはインスタンスを明示して実行しなければならない場合と、そうでない場合があるようです。

 どういうことかというと、

System.out.println("".getClass()); //明示している
System.out.println(getClass()); //明示していない

 とできる場合と、できない場合があるということです。具体的にはstaticメソッド内ではインスタンスやクラスを明示する必要があり、インスタンスメソッド内では必要ありません。

 インスタンスメソッド内でgetClassを呼び出す場合は暗黙的に呼び出し元のインスタンスについてgetClassを実行しているようです。

 つまり、インスタンスメソッド内において

getClass();

 と、

this.getClass();

 は等価であるようです。

 全てのクラスはObjectクラスのサブクラスなので、考えてみれば当たり前の話なのですが、気付いた時はちょっと意外だったので整理のために書いてみました。