はじめに
Java Bronze SEの試験は、限られた時間の中でどれだけ正確に解けるかがカギ!特に、簡単なプログラムを読む問題は確実に得点したいところ。でも、油断しているとひっかけ問題に引っかかることも…。今回は、実際の試験でよく出るポイントを押さえた練習問題を32問用意しました。解きながら自分の弱点も発見できるので、ぜひチャレンジしてみてください!
Java言語のプログラムの流れ
問題1
次のJavaプログラムの出力結果はどれですか?
javapublic class Main {
public static void main(String[] args) {
int x = 5;
if (x > 3) {
System.out.println("A");
} else {
System.out.println("B");
}
}
}
A. A
B. B
C. 何も表示されない
回答:A
解説:
変数xは5で、if文の条件「x > 3」は真となるため、「A」が出力されます。
問題2
次のコードを実行したときの出力として正しいものはどれですか?
javapublic class Main {
public static void main(String[] args) {
int[] ar = {1, 5, 3};
for (int i : ar) {
System.out.print(i + " ");
}
}
}
A. 1 5 3
B. 3 5 1
C. 1 3 5
回答:A
解説:
拡張for文は配列の先頭から順に要素を取り出します。したがって「1 5 3」と出力されます。
問題3
次のプログラムを実行した場合の結果として正しいものはどれですか?
javapublic class Main {
public static void main(String[] args) {
int a = 2;
int b = 3;
int c = a + b;
System.out.println(c);
}
}
A. 5
B. 23
C. コンパイルエラー
回答:A
解説:
a + b の計算結果は5。int型同士の加算なので「5」と表示されます。
問題4
次のコードの実行結果として正しいものはどれですか?
javapublic class Main {
public static void main(String[] args) {
int x = 0;
while (x < 3) {
System.out.print(x);
x++;
}
}
}
A. 012
B. 123
C. 0123
回答:A
解説:
xが0から2までループし、0,1,2が順に出力されます。
問題5
次のコードを実行したときの動作として正しいものはどれですか?
javapublic class Main {
public static void main(String[] args) {
Sample s = new Sample();
}
}
class Sample {
Sample(String str) {
System.out.println(str);
}
}
A. 何も表示されない
B. 空行が表示される
C. コンパイルエラーになる
回答:C
解説:
Sampleクラスには引数なしのコンストラクタが定義されていません。引数ありのコンストラクタのみ定義されている場合、デフォルトコンストラクタは自動生成されないため「new Sample()」でコンパイルエラーとなります。
データの宣言と使用
問題6
次のうち、正しくint型の変数を宣言して初期化しているものはどれですか?
A. int num = 10;
B. int num = “10”;
C. int num = 10.5;
回答:A
解説:
int型は整数値のみ格納できます。Aは整数10で正しい宣言と初期化です。Bは文字列、Cは小数なので不正です。
問題7
次のコードの出力結果として正しいものはどれですか?
javadouble d = 3.14;
System.out.println(d);
A. 3
B. 3.14
C. “3.14”
回答:B
解説:
double型は小数を扱うデータ型です。値3.14がそのまま表示されます。
問題8
次のうち、配列の宣言として正しいものはどれですか?
A. int[] arr = new int;
B. int arr = new int;
C. int arr[] = int;
回答:A
解説:
Aはint型の配列を宣言し、3つの要素を持つ配列を作成しています。BとCは構文エラーです。
問題9
次のコードを実行した場合の出力はどれですか?
javaString str = "Java";
System.out.println(str.length());
A. 3
B. 4
C. 5
回答:B
解説:
“Java”は4文字なので、str.length()は4を返します。
問題10
次のうち、boolean型の変数宣言として正しいものはどれですか?
A. boolean flag = true;
B. boolean flag = “true”;
C. boolean flag = 1;
回答:A
解説:
boolean型はtrueまたはfalseのみ格納できます。Aが正しい宣言です。Bは文字列、Cは数値なので不正です。
演算子と分岐文
問題11
次のコードを実行したときの出力結果はどれですか?
javapublic class Main {
public static void main(String[] args) {
System.out.println(5 + 10 + "5");
}
}
A. 155
B. 20
C. 5105
回答:A
解説:
演算は左から順に行われます。まず5+10で15となり、その後”5″(文字列)と連結されるため「155」と表示されます。
問題12
次のうち、if-else文の正しい構文はどれですか?
A. if 条件式 { … } else { … }
B. if (条件式) { … } else { … }
C. if {条件式} then { … } else { … }
回答:B
解説:
if文では条件式を必ず丸括弧()で囲む必要があります。Bが正しい構文です。
問題13
次のコードを実行した場合、出力される値はどれですか?
javaint a = 8;
int b = 3;
System.out.println(a % b);
A. 2
B. 3
C. 1
回答:A
解説:
「%」は剰余演算子です。8を3で割った余りは2なので、2が出力されます。
問題14
次のうち、switch文で正しいcaseの書き方はどれですか?
A. case 1:
B. case (1):
C. case = 1:
回答:A
解説:
switch文のcaseは「case 値:」の形式で記述します。Aが正しい書き方です。
問題15
次のコードを実行した場合、出力される値はどれですか?
javaint x = 4;
if (x > 2 && x < 6) {
System.out.println("OK");
} else {
System.out.println("NG");
}
A. OK
B. NG
C. 何も表示されない
回答:A
解説:
条件式「x > 2 && x < 6」は両方とも真なので、”OK”が出力されます。
ループ文
問題16
次のコードを実行したとき、出力される値はどれですか?
javaint count = 0;
while (count < 3) {
System.out.print(count);
count++;
}
A. 012
B. 123
C. 0123
回答:A
解説:
while文は条件がtrueの間繰り返します。countは0から2まで出力され、結果は「012」となります。
問題17
次のコードを実行したとき、出力される値はどれですか?
javafor (int i = 1; i <= 5; i++) {
System.out.print("*");
}
A. *****
B. ****
C. ******
回答:A
解説:
for文はiが1から5まで繰り返すので、5回「*」が出力されます。
問題18
次のうち、do-while文の特徴として正しいものはどれですか?
A. 条件がfalseでも必ず1回は実行される
B. 条件がfalseなら1度も実行されない
C. for文と同じ動作をする
回答:A
解説:
do-while文は、条件判定がループの最後に行われるため、必ず1回は処理が実行されます。
問題19
次のコードを実行したとき、出力される値はどれですか?
javafor (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 2; j++) {
System.out.print(i * j + " ");
}
}
A. 1 2 2 4 3 6
B. 1 2 3 4 5 6
C. 2 4 6 8 10 12
回答:A
解説:
外側のforが3回、内側のforが2回繰り返され、iとjの積が順に出力されます。11, 12, 21, 22, 31, 32の順です。
問題20
次のうち、拡張for文(for-each文)の正しい使い方はどれですか?
A. for (int i = 0; i < arr.length; i++) { … }
B. for (int num : arr) { … }
C. for arr (int num) { … }
回答:B
解説:
拡張for文は「for (型 変数 : 配列やコレクション)」の形式で使います。Bが正しい書き方です。
オブジェクト指向の概念
問題21
オブジェクト指向における「カプセル化」の説明として正しいものはどれですか?
A. データとその操作を1つの単位(クラス)にまとめること
B. 複数のクラスをまとめて1つのパッケージにすること
C. クラスを継承して新しいクラスを作ること
回答:A
解説:
カプセル化とは、データ(フィールド)とその操作(メソッド)を1つのクラスにまとめ、外部からのアクセスを制限する仕組みです。
問題22
次のコードを実行したとき、出力される内容はどれですか?
javaclass Animal {
void speak() {
System.out.println("Animal");
}
}
class Dog extends Animal {
void speak() {
System.out.println("Dog");
}
public static void main(String[] args) {
Animal a = new Dog();
a.speak();
}
}
A. Animal
B. Dog
C. コンパイルエラー
回答:B
解説:
オーバーライドされたメソッドは、参照型ではなく実際のインスタンス(Dog)が優先されるため「Dog」と出力されます。これはポリモーフィズムの基本です。
問題23
次のうち、「継承」に関する説明として正しいものはどれですか?
A. 1つのクラスが複数の親クラスを持つことができる
B. あるクラスの機能を引き継いで新しいクラスを作ること
C. クラスの中でメソッドを複数回定義すること
回答:B
解説:
継承とは、既存のクラス(親クラス)の機能を新しいクラス(子クラス)が引き継ぐ仕組みです。
問題24
次のうち、オーバーロードの説明として正しいものはどれですか?
A. 同じ名前で引数の型や数が異なるメソッドを複数定義すること
B. 親クラスのメソッドを子クラスで再定義すること
C. クラスの外からメソッドを呼び出すこと
回答:A
解説:
オーバーロードは、同じメソッド名で引数の型や数が異なるメソッドを複数定義することです。オーバーライドと混同しやすいので注意しましょう。
問題25
次のコードを実行したときの動作として正しいものはどれですか?
javaclass Sample {
static void methodA() {
System.out.println("A");
}
void methodB() {
System.out.println("B");
}
public static void main(String[] args) {
Sample s = new Sample();
s.methodA();
s.methodB();
}
}
A. Aのみ表示される
B. Bのみ表示される
C. AとBの両方が表示される
回答:C
解説:
staticメソッドもインスタンスメソッドも、インスタンスから呼び出すことができます(推奨はされませんが動作はします)。このため「A」「B」の両方が表示されます。
クラスの定義とオブジェクトの使用
問題26
次のうち、正しいクラス定義の記述はどれですか?
A. class Sample(int a) { }
B. class Sample { }
C. Sample class { }
回答:B
解説:
クラス定義は「class クラス名 { }」の形式で記述します。AとCは構文が誤っています。
問題27
次のコードを実行したときの出力結果として正しいものはどれですか?
javaclass Main {
public static void main(String[] args) {
Item item = new Item();
System.out.println(item.price);
}
}
class Item {
int price = 100;
}
A. 100
B. 0
C. コンパイルエラー
回答:A
解説:
Itemクラスのインスタンスを生成し、priceフィールドに100が代入されているため「100」と出力されます。
問題28
次のうち、オブジェクトの生成方法として正しいものはどれですか?
A. Sample s = Sample();
B. Sample s = new Sample;
C. Sample s = new Sample();
回答:C
解説:
オブジェクト生成は「new クラス名()」の形式で行います。Cが正しい書き方です。
問題29
次のコードを実行したときの出力結果として正しいものはどれですか?
javaclass Main {
public static void main(String[] args) {
Sample s1 = new Sample();
Sample s2 = s1;
s1.value = 10;
s2.value = 20;
System.out.println(s1.value);
}
}
class Sample {
int value;
}
A. 10
B. 20
C. 0
回答:B
解説:
s2はs1と同じオブジェクトを参照しているため、s2.valueを20にするとs1.valueも20になります。
問題30
次のうち、staticフィールドの宣言として正しいものはどれですか?
A. static int count;
B. int static count;
C. static private int count;
回答:AとC
解説:
staticフィールドは「static 型 フィールド名」または「static 修飾子 型 フィールド名」の順で記述します。AとCは正しいですが、Bは誤りです。
継承とポリモーフィズム
問題31
次のプログラムを実行したときの出力結果として正しいものはどれですか?
javapublic class Employee {
public void disp() {
System.out.println("Employee");
}
}
public class Manager extends Employee {
public void disp() {
System.out.println("Manager");
}
public static void main(String[] args) {
Manager m = new Manager();
Employee e = m;
e.disp();
}
}
A. Employee
B. Manager
C. EmployeeとManagerの両方
回答:B
解説:
変数eはEmployee型ですが、実際に参照しているインスタンスはManagerです。オーバーライドされたdispメソッドが呼ばれるため、「Manager」と表示されます。どのクラスのインスタンスが生成されているかに注目しましょう。
問題32
継承とポリモーフィズムのメリットとして最も適切なものはどれですか?
A. コードの再利用性が高まり、柔軟な拡張や保守がしやすくなる
B. プログラムの実行速度が必ず速くなる
C. 変数やメソッドの数が自動的に減る
回答:A
解説:
継承を使うことで親クラスの機能を再利用しつつ、新しい機能を追加できます。また、ポリモーフィズムにより同じメソッド名でも異なる動作を実現できるため、柔軟な設計や保守が可能になります。
コメント