このJavaのコードでは、クラスSample
があり、その中にはint
型の変数a
とb
が定義されています。また、このクラスにはSample
コンストラクタとinit
メソッドがあります。これらの動作を説明します。
1. public class Sample { // Sampleクラスの定義
2. int a, b; // クラス内の変数aとbを定義
3. public Sample(int a, int b) { // コンストラクタ
4. init(a, b); // initメソッドを呼び出し
5. }
6. public void init(int a, int b) { // initメソッドの定義
7. this.a = a * a; // 渡された引数aの二乗をthis.aに代入
8. this.b = b * b; // 渡された引数bの二乗をthis.bに代入
9. }
10. public static void main(String[] args) { // mainメソッド
11. int a = 2, b = 3; // ローカル変数aとbを定義し、それぞれ2と3で初期化
12. Sample s = new Sample(a, b); // Sampleクラスのインスタンスを生成
13. System.out.println(a + ", " + b); // ローカル変数aとbの値を出力
14. }
15. }
解説
-
main
メソッドが実行されると、a
とb
というローカル変数が2と3で初期化されます。 -
Sample
クラスのインスタンスs
が生成され、コンストラクタが呼ばれます。 - コンストラクタは
init
メソッドを呼び出し、引数としてローカル変数a
とb
(値は2と3)を渡します。 -
init
メソッドでは、引数a
とb
がそれぞれ自身の二乗に更新され、クラスのフィールドa
とb
に格納されます。つまり、this.a = 4
、this.b = 9
。 - 最後に、
main
メソッドでSystem.out.println(a + ", " + b);
が実行されます。ここで出力されるのはmain
メソッド内のローカル変数a
とb
の値であるため、結果は2, 3
です。
このため、答えはC. [2, 3] と表示される、となります。
追記
System.out.println
で使われる値が、コンストラクタやinit
メソッドで更新されたクラスのフィールドa
とb
ではなく、main
メソッドのローカル変数a
とb
である理由は、スコープの違いに基づいています。
Javaでは、変数のスコープ(つまりその変数が有効な範囲)が重要な役割を果たします。main
メソッド内で定義されたa
とb
(値は2と3)は、そのメソッドのローカルスコープに限定されています。これらの変数はメソッドの中でのみ有効で、メソッドの実行が終了すると、これらの変数への参照も終了します。
一方で、Sample
クラスのインスタンスが持つa
とb
はクラスのフィールドです。これらはinit
メソッドによってその値が変更され(2の二乗と3の二乗)、インスタンスが生存している限り、どこからでも参照される可能性があります。
System.out.println(a + ", " + b);
の行で出力されるのは、main
メソッドのローカル変数a
とb
の値です。クラスのフィールドを参照するには、そのインスタンスを通じてアクセスする必要があります。例えば、System.out.println(s.a + ", " + s.b);
と記述すれば、Sample
クラスのフィールドa
とb
の更新された値(4と9)が出力されます。
Top comments (0)