【Java SE17 Silver 模擬試験】B-31

Java SE17 Silver 模擬試験
Java SE17 Silver 模擬試験

問題

次のうち、正しいクラスの宣言はどれですか(2つ選択)

A)
lass C7 {
	int x = 1;

	public void method() {
		var x = "java";
		System.out.println(x);
	}
}
B)
class C6 {
	public void method() {
		var x = new ArrayList<>();
		x.add(10);
		x.add("30");
		System.out.println(x);
	}
}
C)
class C3 {
	public void method() {
		var a = 10;
		a = "30";
	}
}
D)
class C1 {
	var x = 100;
}
E)
class C2 {
	public void method(int x) {
		var x = 10;
	}
}
F)
class C5 {
	public void method() {
		var strVar = null;
	}
}
G)
record C4(var x, var y) {
}

解答

A)
lass C7 {
	int x = 1;

	public void method() {
		var x = "java";
		System.out.println(x);
	}
}
B)
class C6 {
	public void method() {
		var x = new ArrayList<>();
		x.add(10);
		x.add("30");
		System.out.println(x);
	}
}
C)
class C3 {
	public void method() {
		var a = 10;
		a = "30";
	}
}
D)
class C1 {
	var x = 100;
}
E)
class C2 {
	public void method(int x) {
		var x = 10;
	}
}
F)
class C5 {
	public void method() {
		var strVar = null;
	}
}
G)
record C4(var x, var y) {
}

解説

A)

class C7 {
int x = 1;

public void method() {
var x = "java";
System.out.println(x);
}
}
  • 正しい: var を使った局所変数の宣言は有効です。method 内の x はメソッド内でのローカル変数として宣言されています。

B)

class C6 {
public void method() {
var x = new ArrayList<>();
x.add(10);
x.add("30");
System.out.println(x);
}
}
  • 正しい: var を使用して ArrayList を初期化することは有効です。ただし、型安全性が失われるため、通常は具体的な型を指定することが推奨されますが、文法的には問題ありません。

C)

class C3 {
public void method() {
var a = 10;
a = "30";
}
}
  • 不正: var を使って初期化した変数 a の型は int になりますが、その後に String を代入しようとしているため、型の不一致が発生します。

D)

class C1 {
var x = 100;
}
  • 不正: var はメソッド内のローカル変数にしか使用できず、クラスのフィールドに使用することはできません。

E)

class C2 {
public void method(int x) {
var x = 10;
}
}
  • 不正: メソッドのパラメータ名と同じ名前のローカル変数 x を宣言していますが、これは不正です。シャドウイングが発生し、コンパイルエラーになります。

F)

class C5 {
public void method() {
var strVar = null;
}
}
  • 不正: var を使って null で初期化した場合、コンパイラは型を推論できません。そのため、コンパイルエラーになります。

G)

record C4(var x, var y) {
}
  • 不正: record 宣言のパラメータに var を使用することはできません。具体的な型を指定する必要があります。

前の問題へ SE17_B-30

次の問題へ SE17_B-32

対象資格:Java SE17 認定資格