オブジェクト指向プログラミングでは「静的」「動的」という言葉がよく登場します。今日は「静的な」の意味をもつstatic修飾子に関する問題です。

問題 - static修飾子「難易度:高」

次のように、static修飾子をつけたメンバ変数nameをもつPersonクラスがあります。

public class Person() {
static String name;

このクラスを使って次のプログラムを記述しました。

Person yamada = new Person();
yamada.name = "山田太郎";
Person tanaka = new Person();
tanaka.name = "田中一郎";

さて、次の2つの出力結果はどうなるでしょうか?

【1】 System.out.println(yamada.name);
【2】 System.out.println(tanaka.name);

オブジェクト指向プログラミングでは「静的」「動的」という言葉がよく登場します。今日は「静的な」の意味をもつstatic修飾子に関する問題です。

問題 - static修飾子「難易度:高」

次のように、static修飾子をつけたメンバ変数nameをもつPersonクラスがあります。

public class Person() {
static String name;

このクラスを使って次のプログラムを記述しました。

Person yamada = new Person();
yamada.name = "山田太郎";
Person tanaka = new Person();
tanaka.name = "田中一郎";

さて、次の2つの出力結果はどうなるでしょうか?

【1】 System.out.println(yamada.name);
【2】 System.out.println(tanaka.name);

解答

【1】【2】ともに出力結果は「田中一郎」。

解説

Personクラスのメンバ変数nameにはstatic修飾子がついています。static修飾子のついたメンバ変数はクラスメンバ変数と呼ばれ、生成したオブジェクトごとに割り当てられるのではなく、クラスに1つだけ割り当てられる変数です。 今回の場合は、Personクラスからyamadaとtanakaという2つのオブジェクトを生成しましたが、yamada.nameとtanaka.nameはともにクラスに1つだけの同じクラスメンバ変数nameを参照しているので、結果はともに後から代入された「田中一郎」となります。

クラスメンバ変数はどんなときに使うと便利なのか、ひまなときに考えてみてね。