Java Bronzeでは、コードが短いから簡単とは限りません。型、初期化、演算子、if/for、配列、メソッド、クラスが数行に重なると、実行順を一つ飛ばしただけで答えが変わります。

更新日 2026-10-05

Java SE Bronze 攻略ガイド

Javaを初めて学ぶとき、画面に値が表示されれば「動いた」と安心しがちです。Bronzeの学習では、その一歩先へ進みます。なぜコンパイルが通り、どの順番で変数が変わり、最後に何が表示されるのかを、短いコードから説明できるようにします。

Bronzeでは、難しいライブラリを増やすより、型・分岐・繰り返し・配列・メソッド・オブジェクトの基本をつなぐことが大切です。このガイドは、小さなプログラムを予測してから動かす学び方を中心に組み立てています。

このページ内のミニケース、コード、計算例は、学習方法を説明するために資格合格.webが独自に作成したものです。実際のJava SE Bronzeの非公開試験問題を転載・再現したものではありません。

最初の一歩は「コンパイル」と「実行」を分けること

ソースコードは、そのまま順番に実行されるわけではありません。まず宣言や型などの規則を満たすかが確認され、その後で実行時の処理へ進みます。問題で値を追い始める前に「このコードは実行まで進めるか」を確認してください。

読む箇所最初に確かめること起こり得る問題
ローカル変数使用する前に値を代入したか初期化していない変数の使用はコンパイルエラー
代入右辺の型を左辺へ入れられるか必要な型変換がなければコンパイルエラー
ブロック変数を宣言した範囲内か範囲外からの使用はコンパイルエラー
配列アクセス配列の実体と添字は有効かコンパイルが通っても実行時に例外

コンパイル可否→実行結果

コンパイル可否→実行結果。宣言とスコープ:宣言位置と使用範囲を確認。範囲外の変数は使用できない。 初期化と代入の型:ローカル変数は読む前に代入する。右辺を左辺の型へ代入できるか確認。 コンパイル判定:規則違反があれば実行結果を追わず停止。すべて成立したコードだけ実行へ。 実行時の値と例外:処理順に値を追う。配列のnull参照や範囲外アクセスは実行時に例外。

  1. 宣言とスコープ宣言位置と使用範囲を確認。範囲外の変数は使用できない。
  2. 初期化と代入の型ローカル変数は読む前に代入する。右辺を左辺の型へ代入できるか確認。
  3. コンパイル判定規則違反があれば実行結果を追わず停止。すべて成立したコードだけ実行へ。
  4. 実行時の値と例外処理順に値を追う。配列のnull参照や範囲外アクセスは実行時に例外。
宣言・初期化・型の検査を通ったコードだけ、実行時の値と例外を追う。 資格合格.web独自図。

ミニケース:初期値の規則を一緒にしない

クラスのフィールドである int count; と、メソッド内のローカル変数である int count; は、見た目が同じでも初期化の規則が違います。フィールドには初期値が与えられますが、ローカル変数を未代入のまま読み出すことはできません。

復習では「intの初期値は0」とだけ書かず、「フィールドかローカル変数か」を必ず添えます。迷ったときは変数の宣言位置を囲み、実行結果を考える前に、その変数を使用できる根拠を書きます。

割り算の答えは、代入先より先に決まる

次の各文はメソッドの中へ置いて確認できます。実行前に、右辺を計算する時点の型を書いてください。

int total = 7;
int people = 2;
double a = total / people;
double b = (double) total / people;
double c = (double) (total / people);
System.out.println(a + ":" + b + ":" + c);

出力は 3.0:3.5:3.0 です。a では整数同士の割り算が先に行われます。b は割り算の前に片方を double にするため小数部分が残ります。c は整数除算の結果を変換するので、失われた小数部分は戻りません。

基本型変換

基本型変換。代入先はdouble:total=7、people=2はint。a・b・cの違いは、割り算より前に型が変わるか。 a:整数除算の後に代入:total / peopleはintの3。その後doubleへ変換して3.0。 b:除算前にキャスト:(double) total / peopleは7.0 / 2.0。結果は3.5。 c:除算後にキャスト:(double) (total / people)は3を変換して3.0。失った小数部分は戻らない。

  1. 代入先はdoubletotal=7、people=2はint。a・b・cの違いは、割り算より前に型が変わるか。
  2. a:整数除算の後に代入total / peopleはintの3。その後doubleへ変換して3.0。
  3. b:除算前にキャスト(double) total / peopleは7.0 / 2.0。結果は3.5。
  4. c:除算後にキャスト(double) (total / people)は3を変換して3.0。失った小数部分は戻らない。
同じ7と2でも、キャストの位置により出力は3.0:3.5:3.0になる。 資格合格.web独自図。

ここで確認するのはキャストという文字の有無ではなく、どの演算より前に型が変わるかです。数字を9と4に置き換えてもう一度予測し、同じ説明が使えるか確かめます。

文字列連結も計算順を飛ばせません。1 + 2 + "点" は 3点、"点" + 1 + 2 は 点12 です。+ を左から追い、その時点で数値演算か文字列連結かを判断します。結果の文字だけ覚えると、括弧が一つ加わった問題で迷います。

ループは「条件を調べた瞬間」の表を作る

繰り返し文は、開始値・継続条件・更新を別々に読みます。頭の中で回数だけ数えると、continue や更新式が加わったときにずれやすくなります。

int sum = 0;
for (int i = 0; i < 4; i++) {
    if (i == 2) continue;
    sum += i;
}
System.out.println(sum);
条件確認時のi本体で起きること更新後のisum
00を足す10
11を足す21
2continueで加算を飛ばす31
33を足す44
4条件がfalseで終了更新しない4

ループ回数トレース

ループ回数トレース。i=0・1:通常の加算:初期sum=0。i=0でsum=0、更新後i=1。i=1でsum=1、更新後i=2。 i=2:continue:sum += iを飛ばしsum=1のまま。forの更新式i++は実行しi=3へ。 i=3:最後の加算:条件i < 4はtrue。sum=1+3=4となり、更新後i=4。 i=4:条件がfalse:本体も更新式も実行せず終了。出力は4。breakならループ自体を抜ける。

  1. i=0・1:通常の加算初期sum=0。i=0でsum=0、更新後i=1。i=1でsum=1、更新後i=2。
  2. i=2:continuesum += iを飛ばしsum=1のまま。forの更新式i++は実行しi=3へ。
  3. i=3:最後の加算条件i < 4はtrue。sum=1+3=4となり、更新後i=4。
  4. i=4:条件がfalse本体も更新式も実行せず終了。出力は4。breakならループ自体を抜ける。
本文のfor文を条件確認時のiとsumで追い、continue後にも更新式へ進むことを確認する。 資格合格.web独自図。

通常の for 文では、continue の後も更新式へ進みます。break に置き換えたら、そのループから抜けるので答えは変わります。while 文へ書き換える練習では、更新処理をどこへ置いたかも確認してください。

短絡評価にも「実行されない処理」があります。false && 条件式 では右辺を評価しません。右辺に変数の更新があれば、その更新も行われません。ループの表に加えて、式ごとに「評価した/しなかった」を記すと、値の変化を見落としにくくなります。

配列の長さと最後の添字を分けて書く

要素数が3の配列では、添字は0・1・2です。length は最後の添字ではなく、要素数を表します。最初に 0 <= 添字 < length と書くと、<= と < の違いが具体的になります。

配列境界

配列境界。長さを確認:scores={60,70,80}のlengthは3。添字の有効範囲は0 <= 添字 < 3。 先頭と末尾を区別:先頭はscores[0]=60、末尾はscores[2]=80。最後の添字はlength-1。 範囲外を判定:scores[3]やscores[-1]は実行時に配列境界の例外。length自体を添字にしない。 境界と共有は別問題:same=scoresなら同じ配列を参照。same[1]=95の後はscores[1]も95。

  1. 長さを確認scores={60,70,80}のlengthは3。添字の有効範囲は0 <= 添字 < 3。
  2. 先頭と末尾を区別先頭はscores[0]=60、末尾はscores[2]=80。最後の添字はlength-1。
  3. 範囲外を判定scores[3]やscores[-1]は実行時に配列境界の例外。length自体を添字にしない。
  4. 境界と共有は別問題same=scoresなら同じ配列を参照。same[1]=95の後はscores[1]も95。
配列の長さ3と有効添字0〜2を分け、境界違反と参照共有を別々に確認する。 資格合格.web独自図。
int[] scores = {60, 70, 80};
int[] same = scores;
same[1] = 95;
System.out.println(scores[1]);

出力は 95 です。配列変数を代入しても、要素が別の配列へ自動でコピーされるわけではありません。この例では二つの変数が同じ配列を参照します。「変数の箱」と「配列の実体」を分けて描くと理解しやすくなります。

次に same = new int[3]; を代入してから same[1] = 95; を実行する例へ変更します。今度は参照先が分かれるため、元の scores の値は変わりません。配列の復習では、境界違反と参照の共有を別のミスとして記録します。

メソッドの選択と、処理の中身を分ける

同名メソッドを用意するオーバーロードでは、引数の個数や型などで区別します。戻り値の型だけを変えても、別のメソッドとして定義できません。

オーバーロード選択

オーバーロード選択。候補の宣言:show(int value)とshow(double value)は引数型が違うため併存できる。 intの呼び出し:show(3)の引数はint。ここではshow(int)が選ばれる。 doubleの呼び出し:show(3.0)の引数はdouble。ここではshow(double)が選ばれる。 選択と処理を分離:選ばれたメソッドの本体を実行する。戻り値型だけ違う同名・同引数の宣言は不可。

  1. 候補の宣言show(int value)とshow(double value)は引数型が違うため併存できる。
  2. intの呼び出しshow(3)の引数はint。ここではshow(int)が選ばれる。
  3. doubleの呼び出しshow(3.0)の引数はdouble。ここではshow(double)が選ばれる。
  4. 選択と処理を分離選ばれたメソッドの本体を実行する。戻り値型だけ違う同名・同引数の宣言は不可。
本文の二つのshow候補を引数型で比較し、候補の選択後に本体を追う。 資格合格.web独自図。

例えば show(int value) と show(double value) があるなら、show(3) は int の候補へ一致します。show(3.0) なら double です。候補を選んだ後に、そのメソッドの処理へ進みます。この二段階を混ぜずに追います。

メソッドの引数へ数値を渡した場合、呼び出し先の仮引数を書き換えても、呼び出し元の数値変数が自動で変わるわけではありません。配列を渡した場合も参照値のコピーが渡りますが、同じ配列の要素を書き換えれば、その配列を参照する呼び出し元からも変化が見えます。「値渡し」と「オブジェクトの共有」を対立する説明にしないことがポイントです。

クラスを読むときは、誰が値を持っているかを見る

static の値はクラスに属し、インスタンスの値は生成した各オブジェクトに属します。二つのオブジェクトを作ったとき、どちらも同じ数値から始まることと、同じ変数を共有することは違います。

コンストラクタの復習では、メソッドとの宣言の違いも見ます。コンストラクタには戻り値型を書きません。クラス名と同じ名前でも、void を付ければコンストラクタにはなりません。フィールド、コンストラクタ、メソッドを色分けし、「生成時に行う処理」と「呼び出したときに行う処理」を区別してください。

継承とカプセル化の用語も、一つのクラス図だけで済ませません。サブクラスが何を引き継ぐか、private のメンバーへどこからアクセスできるか、公開メソッドで何を操作させるかを、コードの宣言位置へ結び付けます。

一回の学習は、予測・実行・一箇所変更で終える

Bronze学習サイクル

Bronze学習サイクル。短いコードを書く:教材で一つの構文を読み、5〜10行で自分の例を作る。 実行前に予測:宣言と型からコンパイル可否を判定し、出力と途中の値をメモする。 動かして差を探す:予測と実行結果を比べ、最初に食い違った行と規則を特定する。 一箇所だけ変える:型・条件・参照先の一つを変更し、次の周回では実行前に再予測する。

  1. 短いコードを書く教材で一つの構文を読み、5〜10行で自分の例を作る。
  2. 実行前に予測宣言と型からコンパイル可否を判定し、出力と途中の値をメモする。
  3. 動かして差を探す予測と実行結果を比べ、最初に食い違った行と規則を特定する。
  4. 一箇所だけ変える型・条件・参照先の一つを変更し、次の周回では実行前に再予測する。
短い例を作る→予測→実行で照合→一箇所変更して再予測、の順に練習する。 資格合格.web独自図。

最初は教材で一つの構文を読み、5〜10行の例を自分で書きます。実行する前に、コンパイル可否と出力をメモします。その後で動かし、予測と違った最初の行を探します。最後に型、条件、参照先などを一箇所だけ変えて再予測します。

IDEが示すエラーを見て直す練習に加え、補完がない状態でも宣言を読めるかを確かめます。コマンドラインでのコンパイルと実行を一度経験すると、ソースファイルとクラス、コンパイルと実行の関係が整理できます。学習用JDKは使用中の教材に合わせ、このガイドの例はJava 17でも扱える基本構文に限定しています。

問題演習で間違えたら、答えを書き写す代わりに、次のような一行を残してください。

この記録なら、弱点分析で同じ分野が出ても、どの規則を復習するかが分かります。偶然正解したコードも、途中の値を書けなければ同じ記録の対象にします。

仕上げは「動かさなくても理由が言えるか」で測る

学習の前半は短いコードを実際に動かします。中盤では二つの似たコードを並べ、答えが変わる一行を説明します。仕上げでは実行環境を使わずに問題演習や模擬試験へ取り組み、コンパイル判定、型、実行順の順番が身に付いたか確認します。

時間がかかる問題では、紙に書く内容を増やしすぎず、変化する変数と配列要素だけを表にします。構文自体が分からない場合は学習教材へ戻り、手順を飛ばした場合は同じコードを一行ずつ再追跡してください。すべての間違いを「暗記不足」にすると、必要な練習が見えなくなります。

受験前に確認する公式情報

2026-10-05確認時点のOracle案内では、1Z0-818-JPNは選択問題・65分・60問です。料金、購入するチケット、受験方法は申込直前にOracleのBronze試験案内で確認してください。試験内容チェックリストと教材の範囲も照合します。

型変換の細かな根拠を確認したい場合は、Java言語仕様の型変換を参照できます。仕様を最初から読み通す必要はありません。自分が迷った代入や演算の規則を確認する辞書として使います。

次に取り組むこと

まだ変数やループを追うのが難しければ、学習教材で短いコードを一つずつ確認します。基礎が分かったら問題演習でコンパイル可否を先に判定し、繰り返す誤りは弱点分析へ残します。模擬試験では時間内に読む順番を保てるかを確かめ、資格情報ページから公式の受験案内へ進んでください。