「Java17の新機能って、試験ではどこがどう狙われるの?」「recordやsealedは名前は知っているけど、引っかけがわからない」。Java Gold(1Z0-826)の学習を進めていて、そう感じている方に向けた記事です。
Java 17 の新機能(record・sealed・switch 式・テキストブロック・instanceof のパターンマッチング)は、日本の認定では Silver SE 17 の出題範囲に置かれています。
record・sealed・switch 式・テキストブロック・instanceof のパターンマッチングは、Oracle 日本の出題範囲では Silver SE 17(1Z0-825-JPN)に含まれ、Gold(1Z0-826-JPN)のチェックリストには独立した項目がありません。Oracle 日本は Gold について『新機能だけにフォーカスを当てた出題は行っていない』としています(2026年9月30日確認)。Gold のコード問題に前提知識として現れる可能性はあるため、Silver 範囲の復習として押さえておきます。
いずれも「文法の細かいルール」で、コンパイルが通るかどうかが分かれる機能です。書き方の可否を1つずつ正確に覚えておくと、Silver の対策にも、Gold のコードを読む前提知識にもなります。
この記事では、バックエンドエンジニアとして実務でJavaを扱い、Java Gold・ORACLE MASTER Gold を保有する筆者が、Java SE 17 の新機能の要点と、間違えやすい引っかけを、できるだけ正確に・網羅的に解説します。断定しすぎず、「試験仕様として確定している事実」と「対策上のコツ」を分けて書きます。
筆者が保有している Java Gold は Java SE 11 世代のものです。本記事で扱う Java SE 17 の Gold 試験(1Z0-826。日本語試験の申込番号は 1Z0-826-JPN)は受験していないため、試験の仕様・範囲については Oracle が公開している一次情報にもとづいて整理しています。
※ 本記事はJava SE 17 の Java Gold(試験番号 1Z0-826。日本語試験の申込番号は 1Z0-826-JPN)を前提にした学習情報です。同じ世代の英語試験 1Z0-829 で受験した場合は、Java Gold には同時認定されません。試験範囲・出題形式・受験料・合格ラインなどの試験制度は改定されることがあります。 制度面は執筆時点(2026年)の一般的な理解にもとづくため、申込前には必ず Oracle認定資格の公式サイトおよびピアソンVUE で、自分が受ける試験の最新情報をご確認ください。
- Java Gold(1Z0-826)とJava17新機能の位置づけ(Silver SE 17 の範囲と Gold での扱い)
- record(レコード)の要点と引っかけ
- sealedクラスの要点と引っかけ
- switch式(アロー構文・yield)の引っかけ
- text block(テキストブロック)の細かいルール
- instanceofパターンマッチングとvarの注意点
- 新機能を効率よく仕上げる勉強法
Java17新機能とJava Gold(1Z0-826)の位置づけ
Java Gold(1Z0-826)はJava SE 17を対象とした試験で、Oracle 日本は、出題トピックに関連する API は Java SE 17 ベースで出題するとしています。一方、以下の新機能は、Oracle 日本の出題範囲では Silver SE 17(1Z0-825-JPN)の項目です。「17で追加された機能」だけを追うのではなく、比較的新しいバージョンで正式化された言語機能を、17時点で確定した仕様としてまとめて押さえる、という視点が大切です。
主要な新機能が「どのバージョンで正式化されたか」を整理すると、次のようになります。
| 機能 | 正式化バージョン | Oracle 日本での扱い |
|---|---|---|
| record(レコード) | Java 16 | Silver SE 17 の項目(Gold は前提知識) |
| sealedクラス | Java 17 | Silver SE 17 の項目(Gold は前提知識) |
| switch式(アロー・yield) | Java 14 | Silver SE 17 の項目(Gold は前提知識) |
| text block(テキストブロック) | Java 15 | Silver SE 17 の項目(Gold は前提知識) |
| instanceof パターンマッチング | Java 16 | Silver SE 17 の項目(Gold は前提知識) |
| var(局所変数型推論) | Java 10 | Silver SE 17 の項目(Gold は前提知識) |
横にスクロールできます
⚠️ 上表の「Oracle 日本での扱い」は、Oracle 日本のSilver SE 17(1Z0-825-JPN)の試験ページとGold(1Z0-826-JPN)の試験ページの試験内容チェックリストにもとづきます(2026年9月30日確認)。Gold のチェックリストには、これらの独立した項目はありません。試験範囲は改定されることがあるため、必ずOracle公式の最新情報でご確認ください。
Gold のコードにこれらが現れるとすれば、「新機能」という独立した1トピックとしてではなく、クラス設計・switch・文字列・型といった従来の分野のコードの中に前提知識として現れると考えるのが自然です。たとえばrecordは「クラスとインターフェース」の文脈で、switch式は「制御構文」の文脈で出てきます。だからこそ、機能ごとに文法の可否を正確に切り分けておく必要があります。
Javaの資格全体をどの順で取るか迷っている方は、Java資格の取得順序やJava Goldの難易度・勉強法もあわせて読むと、Gold(1Z0-826)の位置づけがつかみやすくなります。
record(レコード)の要点
record(レコード)は、データを保持するためのクラスを簡潔に書ける仕組みで、Java 16で正式化されました。引っかけになりやすいのは「暗黙的に生成されるもの」と「できる/できないの線引き」です。
recordの基本形はこう書きます。
public record Point(int x, int y) { }
この1行だけで、コンパイラが次を暗黙的に用意します。
- privateかつfinalなフィールド
x,y - 正準(canonical)コンストラクタ(全コンポーネントを受け取る)
- アクセサメソッド
x(),y()(getX()ではない) equals()/hashCode()/toString()の実装
引っかけになりやすい「できない」こと
recordは制約が多く、そこが引っかけの宝庫です。次はやってはいけない/できないこととして覚えます。
- 他のクラスを継承できない:recordは暗黙的に
java.lang.Recordを継承しているため、extendsで別のクラスを継承させようとするとコンパイルエラーになります。 - 暗黙的にfinal:recordクラス自体を他のクラスが継承することもできません。
abstractも付けられません。 - インスタンスフィールドを追加できない:ヘッダで宣言したコンポーネント以外に、非staticのインスタンスフィールドを本体に足すことはできません。
- アクセサ名を勘違いさせる:
getX()を呼ぶ選択肢はほぼ誤り。正しくはx()です。
引っかけになりやすい「できる」こと
一方で、できることを「できない」と誤認させる問題もあります。次は可能です。
- インターフェースの実装:
record Point(int x, int y) implements Comparable<Point>のように実装できます(継承は不可でも実装は可)。 - staticフィールド・staticメソッド・インスタンスメソッドの追加:本体に足せます。
- 追加コンストラクタの宣言:ただし最終的に正準コンストラクタへ委譲(
this(...))する必要があります。
コンパクトコンストラクタの引っかけ
recordで特につまずきやすいのがコンパクトコンストラクタです。引数リストを書かずに、検証や正規化だけを記述できます。
public record Point(int x, int y) {
public Point { // 引数リストが無い(コンパクト)
if (x < 0) throw new IllegalArgumentException();
// this.x = x; の代入は書かない(末尾で自動代入される)
}
}
ここでの引っかけは2点です。①コンパクトコンストラクタは引数リスト (int x, int y) を書かない(書くと通常の正準コンストラクタ扱いになる)。②本体で this.x = x; の明示的な代入を書かなくても、末尾でフィールドへ自動代入される。この「代入を書かない」感覚は最初つまずきやすいので、実際に手を動かして確かめておくと確実です。
この感覚が入ったかどうかは、recordのコンパクトコンストラクタと自動生成メンバーを問う演習問題で確かめられます。
sealedクラスの要点
sealedクラス(封印クラス)は、そのクラスを継承・実装できる相手を明示的に限定する仕組みで、Java 17で正式化されました。いちばんの引っかけは「許可したサブクラスに何を付けなければならないか」です。
基本形はこう書きます。
public sealed class Shape permits Circle, Square { }
permits で許可したサブクラス(Circle, Square)以外は、Shape を継承できません。
許可サブクラスには修飾子が必須(最重要の引っかけ)
sealedで最も間違えやすいのが、許可されたサブクラス側の宣言ルールです。permits で許可したサブクラスは、次のいずれかを必ず付けなければコンパイルエラーになります。
final:それ以上継承させないsealed:さらに継承先を限定する(自身もpermitsを持つ)non-sealed:封印を解除し、誰でも継承できるようにする
public final class Circle extends Shape { } // OK
public non-sealed class Square extends Shape { } // OK
public class Triangle extends Shape { } // permitsにも無く修飾子も無い → NG
non-sealed は「封印を意図的に解く」ためのキーワードで、ハイフン付きの正しい綴り(nonsealed や non sealed ではない)も引っかけになりえます。
その他のルール
- 同一モジュール/パッケージ:許可サブクラスは、封印クラスと同一モジュール内にある必要があります(無名モジュールの場合は同一パッケージ)。
- permitsの省略:許可サブクラスをすべて同じソースファイルに書く場合、
permits句を省略できます(コンパイラが推論します)。 - recordとの組み合わせ:recordは暗黙的にfinalなので、sealedの許可サブクラスとしてそのまま使えます(recordに
finalを書き足す必要はない、という点も引っかけになります)。 - インターフェースもsealedにできる:
sealed interfaceとして、実装クラスをpermitsで限定できます。
実際にコンパイルするとどうなるか
ここまでのルールは、文章で覚えるだけなら数行で済みます。ただ冒頭に書いたとおり、筆者は SE 17 の Gold 試験(1Z0-826)そのものを受験していないため、「試験本番でこう出た」という話はできません。代わりにできるのは、このルールがコンパイラの側で本当に成立しているかを、実際に動かして見せることです。この記事を書くにあたって、筆者が2026年9月に手元の openjdk 26.0.1 で javac に通しました。その出力が次のものです。

javac を実行した結果(openjdk 26.0.1・2026年9月)。上が、permits に書いていない Triangle が Shape を継承しようとした場合。下が、record Point のフィールド x へ代入した場合。どちらも実行時ではなくコンパイルで止まっている。上半分がsealedです。エラー文は「クラスはシール・クラスSealed.Shapeを拡張できません('permits'句に指定されていないためです)」と、理由まで書いてくれています。ここで見ておきたいのは、エラーになっている Triangle に final は付いているという点です。つまり「許可サブクラスには final / sealed / non-sealed のいずれかが要る」と「permits に名前が載っていなければならない」は別々の条件で、片方だけ満たしてもコンパイルは通りません。修飾子の3択ばかり覚えていると、このpermits側の条件を落とします。
下半分がrecordです。record Point(int x, int y) に対して p.x = 99; と書くと、「final変数xに値を割り当てることはできません」と言われます。recordの章で「privateかつfinalなフィールドが暗黙的に用意される」と書いたことが、コンパイラのメッセージの側から確認できる形です。アクセサが x() になるのも、フィールドが書き換えられないのも、同じ「暗黙のfinal」から来ています。
そしてsealedとrecordに共通するのは、どちらも実行時の例外ではなく、コンパイルの段階で止まることです。ここが設問での分かれ目になります。選択肢に ClassCastException や IllegalStateException、あるいは「実行時に例外が発生する」が並んでいたら、その時点で誤答だと判断できます。逆にいえば、新機能まわりの設問は処理を最後まで追わなくても、コンパイルが通るかどうかだけで答えが決まるものが少なくありません。
なお、実行に使った openjdk 26.0.1 は、試験が対象とする Java SE 17 よりも新しいバージョンです。バージョン間で挙動が変わりうる項目については、冒頭に書いたとおり Oracle 認定資格の公式ページで出題範囲をご確認ください。
sealedとrecordは、後述するswitchのパターンマッチングと組み合わせて出ることもあります。単体のルールを固めたうえで、組み合わせの挙動も確認しておくと安心です。
switch式(アロー構文・yield)の引っかけ
switch式は、switchを「値を返す式」として使える構文で、アロー構文(->)とyieldがJava 14で正式化されました。引っかけになりやすいのは「フォールスルーの有無」「yieldとreturnの違い」「網羅性(exhaustiveness)」です。
アロー構文はこう書きます。
int days = switch (month) {
case 1, 3, 5, 7, 8, 10, 12 -> 31;
case 4, 6, 9, 11 -> 30;
case 2 -> 28;
default -> throw new IllegalArgumentException();
};
引っかけになりやすいポイント
- アロー構文はフォールスルーしない:従来の
case X:(コロン)はbreakが無いと次のcaseへ流れますが、アロー構文case X ->は自動でbreakされ、次のcaseへ流れません。この違いが定番の引っかけです。 - コロンとアローは混在できない:1つのswitch内で
case X:とcase X ->を混ぜるとコンパイルエラーです。 - ブロックの値はyieldで返す:アローの右側で複数行のブロックを書く場合、値は
yieldで返します。returnではありません(returnはメソッド全体から抜けてしまいます)。
int size = switch (fruit) {
case APPLE -> {
int base = 10;
yield base * 2; // ← ブロックからの戻り値は yield
}
default -> 0;
};
- 式として使うなら網羅性が必須:switchを「値を返す式」として使う場合、すべてのケースを網羅しなければコンパイルエラーになります。enumを対象にして全定数をカバーするか、
defaultを付ける必要があります。
yield は変数名としては使えるものの、switch式の文脈ではキーワードのように働く、という点も細かい引っかけになりえます。
網羅性の扱いまで含めて試すなら、アロー構文のswitch式とyieldを問う演習問題が手頃です。
text block(テキストブロック)のルール
text block(テキストブロック)は、複数行の文字列を """(三連ダブルクォート)で書ける記法で、Java 15で正式化されました。引っかけになりやすいのは「開始デリミタの直後に文字を置けない」「付随する空白(インデント)の除去」です。
基本形はこうです。
String html = """
<html>
<body>Hello</body>
</html>
""";
引っかけになりやすいポイント
- 開始の
"""の直後は改行が必須:開始デリミタ"""の後ろに文字を続けるとコンパイルエラーになります。"""<html>のように同じ行にテキストを書くのはNGで、"""の後で改行してから内容を書きます。 - 付随的な空白(incidental white space)の除去:各行の先頭にある共通のインデントは、コンパイラが自動で取り除きます。どこまで削られるかは、終了デリミタ
"""の位置が基準になります。この「終了デリミタの位置でインデントが決まる」挙動が引っかけになります。 - 行末の空白は削られる:各行の末尾(trailing)の空白は原則として除去されます。意図的に空白を残したいときは
\s(スペースのエスケープ)を使います。 \による行連結:行末に\を置くと、その行と次の行が改行なしで連結されます(改行を入れたくない長い文字列で使います)。
text blockは「見た目どおりの文字列になるとは限らない」点が肝で、インデントの除去ルールを知らないと出力結果を選ぶ問題で外します。実際に System.out.println で出力して、削られる空白を目で確認しておくのがおすすめです。
instanceofパターンマッチングとvar
instanceofのパターンマッチング(Java 16正式化)とvarによる局所変数型推論(Java 10)も、Silver SE 17 の項目です。どちらも「使える場所・スコープ」が引っかけになります。
instanceofパターンマッチング
従来はキャストが必要だった書き方が、パターン変数で簡潔になります。
if (obj instanceof String s) {
System.out.println(s.length()); // sは自動でString型
}
引っかけになりやすいのはパターン変数のスコープ(フロースコープ)です。パターン変数 s が使えるのは「instanceofが真であることが確定している範囲」に限られます。
if (obj instanceof String s && s.length() > 3) { ... } // OK:&&の右で s が使える
if (obj instanceof String s || s.length() > 3) { ... } // NG:||の右では真が確定していない
&& の右側では s を使えるが、|| の右側では使えない。この違いが典型的な引っかけです。
var(局所変数型推論)
var は右辺から型を推論する局所変数専用の書き方です。「使える場所」の制限が引っかけになります。
- 使える:メソッド内のローカル変数、for文の変数、拡張for文の変数。
- 使えない:インスタンスフィールド・メソッドの引数・戻り値の型・catch節などには使えません。
- 初期化子が必須:
var x;(初期化なし)やvar y = null;(型が決まらない)はコンパイルエラーです。 - varは予約語ではない:
varは「予約された型名」であり、変数名やメソッド名としては使える(ただしクラス名には使えない)、という細かい点も押さえておきます。
これらは「知っていれば取れる」タイプの問題です。あいまいなままだとコードを読み違えやすいので、可否の線引きを一覧で覚えておきましょう。
新機能を効率よく仕上げる勉強法
新機能のセクションは、範囲が狭いわりに「文法の細部」を突かれるため、手を動かして挙動を確かめるのが最も効率的でした。筆者がJava Goldの学習で有効だと感じた進め方は次のとおりです。
- ①機能ごとに最小コードを自分で書いて動かす:recordのアクセサ名、sealedの修飾子必須、switchのyield、text blockのインデント除去は、実際にコンパイルして「通る/通らない」を体で覚えるのが最短です。JDK 17をローカルに入れて、短いコードで試すのが効きます。
- ②「コンパイルエラーになる書き方」を集める:新機能まわりの設問は「これはコンパイルできるか?」を問う形になりやすいです。正しい書き方より、エラーになるパターンを先に潰すほうが得点に直結します。
- ③問題集でアウトプット中心にする:知識を入れたら、Gold相当の問題集でシナリオ・コード読解に慣れます。間違えた問題は「どのルールを知らなかったか」をメモして潰します。
- ④従来分野との接続を意識する:recordは「クラスとインターフェース」、switch式は「制御構文」の延長として捉えます。新機能だけを孤立させず、既存トピックの延長として復習すると定着します。
学習時間の全体像や難易度の感覚はJava Goldの難易度・勉強法で、資格をどの順に取るかはJava資格の取得順序で補えます。Javaと並行してデータベース系(ORACLE MASTER)まで視野に入れたい方はORACLE MASTER Gold の勉強法と難易度も参考になります。
⚠️ 教材・問題集は試験バージョンの更新に合わせて改訂されます。購入時は、自分が受ける試験(1Z0-826)に対応した最新版かを必ず確認してください。古い版だと、正式化前の挙動(プレビュー機能時代の仕様)で書かれていることがあります。
Java17新機能・試験のよくある質問(FAQ)
Java17の新機能は Java Gold の出題範囲ですか?
Java Gold(1Z0-826)はJava SE 17が対象ですか?他バージョンの新機能も出ますか?
record(レコード)の引っかけはどこですか?
sealedクラスの引っかけはどこですか?
switch式のyieldとreturnの違いは何ですか?
yield を使います。return を書くとswitchではなくメソッド全体から抜けてしまうため、switch式の戻り値としては誤りになります。また、アロー構文(case X ->)は自動でbreakされフォールスルーしない点、式として使うなら全ケースの網羅(default含む)が必要な点もセットで押さえます。text block(テキストブロック)で間違えやすい点はどこですか?
""" の直後に文字を書けず、必ず改行が必要な点が、いちばん間違えやすい点です。また、各行先頭の共通インデント(付随的な空白)は終了デリミタ """ の位置を基準に自動で除去され、行末の空白も原則削られます。出力結果を選ぶ問題では、この空白除去ルールを知らないと外しやすいので、実際に出力して確認するのが確実です。まとめ:Java17 新機能の要点と試験での位置づけ
Java17の新機能の要点を整理します。
- 位置づけ:これらは Oracle 日本の出題範囲では Silver SE 17 の項目。Gold には独立した項目がなく、Gold のコードを読む前提知識として押さえる。
- recordとsealed:recordはアクセサ名(
x())・暗黙final・コンパクトコンストラクタ、sealedは許可サブクラスへのfinal/sealed/non-sealed必須が引っかけ。 - switch式:アローはフォールスルーしない・ブロックの戻り値は
yield・式として使うなら網羅性が必須。 - text block:開始
"""の直後は改行必須・付随的な空白は終了デリミタ基準で除去。 - instanceofパターン/var:パターン変数のスコープ(
&&は可・||は不可)、varは局所変数専用で初期化子必須。 - 勉強法:最小コードを自分で動かし、「コンパイルエラーになる書き方」を先に潰すのが最短。
- 試験制度は改定されるため、申込前に必ずOracle認定資格・ピアソンVUEの公式で最新情報を確認する。
新機能は範囲が狭く、文法の可否を正確に覚えれば、Silver SE 17 の得点源にも、Gold のコードを読む前提知識にもなります。1つずつ手を動かして「通る/通らない」を確かめれば、引っかけに強くなります。学習全体の設計はJava Goldの難易度・勉強法やJava資格の取得順序、資格を市場価値につなげる視点はエンジニアのスキルアップ・ロードマップもあわせてどうぞ。同じ Java Gold(1Z0-826)の対策として、1Z0-829 と 1Z0-819 の違い(どちらも英語試験)とJava Gold 問題集おすすめ|1Z0-826(SE 17)対応も参考になります。
免責:本記事は筆者の実務・学習経験および執筆時点で一般に公開されている情報にもとづく学習情報であり、特定の合格・成果を保証するものではありません。Javaの言語仕様は原則としてJava SE 17時点の確定仕様にもとづいて記述していますが、試験範囲・出題形式・受験料・合格基準などの認定制度は改定されることがあります。受験前には必ずOracle認定資格の公式サイトおよびピアソンVUEで、自分が受ける試験(1Z0-826)の最新情報をご確認ください。最終的な判断はご自身の責任で行ってください。
