「Java17の新機能って、試験ではどこがどう狙われるの?」「recordやsealedは名前は知っているけど、引っかけがわからない」——Java Gold(1Z0-829)の学習を進めていて、そう感じている方に向けた記事です。

Java17 新機能の試験対策で最優先すべきは、record(レコード)とsealedクラスの2つです。この2つに加えて、switch式(アロー構文・yield)、text block(テキストブロック)、instanceofのパターンマッチング、varの局所変数型推論を押さえれば、新機能まわりの出題の大半をカバーできます。いずれも「文法の細かいルール」を突く引っかけ問題が中心なので、書き方の可否を1つずつ正確に覚えるのが合格への近道です。

この記事では、バックエンドエンジニアとして実務でJavaを扱い、Java Gold・ORACLE MASTER Gold を保有する筆者が、Java SE 17で問われる新機能の出題ポイントと、間違えやすい引っかけを、できるだけ正確に・網羅的に解説します。断定しすぎず、「試験仕様として確定している事実」と「対策上のコツ」を分けて書きます。

※ 本記事はJava SE 17(試験コード 1Z0-829)を前提にした学習情報です。試験範囲・出題形式・受験料・合格ラインなどの試験制度は改定されることがあります。 制度面は執筆時点(2026年)の一般的な理解にもとづくため、申込前には必ず Oracle認定資格の公式サイトおよびピアソンVUE で、自分が受ける試験の最新情報をご確認ください。

この記事で分かること
  • Java Gold(1Z0-829)とJava17新機能の位置づけ(どのバージョンの機能が出るか)
  • record(レコード)の出題ポイントと引っかけ
  • sealedクラスの出題ポイントと引っかけ
  • switch式(アロー構文・yield)の狙われ方
  • text block(テキストブロック)の細かいルール
  • instanceofパターンマッチングとvarの注意点
  • 新機能を効率よく仕上げる勉強法


Java17新機能とJava Gold(1Z0-829)の位置づけ

Java Gold(1Z0-829)はJava SE 17を対象とした試験で、Java 17はLTS(長期サポート)版です。そのため、Java 9〜17で正式化された機能が「累積して」出題対象になります。「17で追加された機能」だけを追うのではなく、比較的新しいバージョンで正式化された言語機能を、17時点で確定した仕様としてまとめて押さえる、という視点が大切です。

主要な新機能が「どのバージョンで正式化されたか」を整理すると、次のようになります。

機能 正式化バージョン 試験での重要度(体感)
record(レコード) Java 16 ◎ 最頻出
sealedクラス Java 17 ◎ 最頻出
switch式(アロー・yield) Java 14 ○ 頻出
text block(テキストブロック) Java 15 ○ 頻出
instanceof パターンマッチング Java 16 ○ 頻出
var(局所変数型推論) Java 10 △ 定番

横にスクロールできます

⚠️ 上表の「重要度」は筆者の学習・受験経験にもとづく体感であり、公式が公表する配点ではありません。出題比率は試験のバージョン更新で変わり得ます。正式な試験範囲(対象トピック)は必ずOracle公式の最新情報でご確認ください。

ポイントは、これらが「新機能」という独立した1トピックではなく、クラス設計・switch・文字列・型といった従来の分野に溶け込んで出ることです。たとえばrecordは「クラスとインターフェース」の文脈で、switch式は「制御構文」の文脈で問われます。だからこそ、機能ごとに文法の可否を正確に切り分けておく必要があります。

Javaの資格全体をどの順で取るか迷っている方は、Java資格の取得順序Java Goldの難易度・勉強法もあわせて読むと、Gold(1Z0-829)の位置づけがつかみやすくなります。


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;明示的な代入を書かなくても、末尾でフィールドへ自動代入される。この「代入を書かない」感覚は最初つまずきやすいので、実際に手を動かして確かめておくと確実です。


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 は「封印を意図的に解く」ためのキーワードで、試験ではハイフン付きの正しい綴りnonsealednon sealed ではない)まで問われることがあります。

その他の頻出ルール

  • 同一モジュール/パッケージ:許可サブクラスは、封印クラスと同一モジュール内にある必要があります(無名モジュールの場合は同一パッケージ)。
  • permitsの省略:許可サブクラスをすべて同じソースファイルに書く場合、permits 句を省略できます(コンパイラが推論します)。
  • recordとの組み合わせ:recordは暗黙的にfinalなので、sealedの許可サブクラスとしてそのまま使えます(recordに final を書き足す必要はない、という点も引っかけになります)。
  • インターフェースもsealedにできるsealed interface として、実装クラスを permits で限定できます。

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式の文脈ではキーワードのように働く、という点も細かい出題対象になり得ます。


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)も、新機能まわりの定番出題です。どちらも「使える場所・スコープ」が狙われます。

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-829)に対応した最新版かを必ず確認してください。古い版だと、正式化前の挙動(プレビュー機能時代の仕様)で書かれていることがあります。


Java17新機能・試験のよくある質問(FAQ)

Java17の新機能は試験(Java Gold)でどこが狙われますか?

A. record(レコード)とsealedクラスが二大頻出です。加えてswitch式(アロー構文・yield)、text block(テキストブロック)、instanceofのパターンマッチング、varの局所変数型推論が繰り返し問われます。いずれも「文法の細かいルール」を突く引っかけ問題が中心なので、書き方の可否を1つずつ正確に押さえるのが対策の軸になります。

Java Gold(1Z0-829)はJava SE 17が対象ですか?他バージョンの新機能も出ますか?

A. 1Z0-829はJava SE 17を対象とした試験です。Java 17はLTS(長期サポート)で、Java 9〜17で正式化された機能が累積して問われます。たとえばrecordはJava 16、text blockはJava 15、switch式はJava 14、sealedクラスはJava 17で正式化された機能で、いずれも17時点で確定した仕様として出題対象になります。試験範囲は改定されることがあるため、申込前にOracleとピアソンVUEの公式で最新の範囲を確認してください。

record(レコード)で試験に狙われるポイントは何ですか?

A. アクセサがgetX()ではなくx()である点、暗黙的にfinalで他クラスを継承できない点、インスタンスフィールドを追加できない点、コンパクトコンストラクタに引数リストが無くフィールド代入が自動である点が定番の引っかけです。インターフェースの実装は可能で、staticメンバは追加できる、という「できる/できない」の線引きが問われます。

sealedクラスの試験での引っかけはどこですか?

A. permitsで許可したサブクラスは、final・sealed・non-sealedのいずれかを必ず付けなければコンパイルエラーになる、という点が最大の引っかけです。許可サブクラスが同一モジュール(無名モジュールなら同一パッケージ)にある必要がある点、同一ファイルにまとめればpermitsを省略できる点もあわせて狙われます。

switch式のyieldとreturnの違いは試験で問われますか?

A. はい、頻出です。switch式のブロックから値を返すときは yield を使います。return を書くとswitchではなくメソッド全体から抜けてしまうため、switch式の戻り値としては誤りになります。また、アロー構文(case X ->)は自動でbreakされフォールスルーしない点、式として使うなら全ケースの網羅(default含む)が必要な点もセットで問われます。

text block(テキストブロック)で間違えやすい点はどこですか?

A. 開始デリミタ """ の直後に文字を書けず、必ず改行が必要な点が最頻出の引っかけです。また、各行先頭の共通インデント(付随的な空白)は終了デリミタ """ の位置を基準に自動で除去され、行末の空白も原則削られます。出力結果を選ぶ問題では、この空白除去ルールを知らないと外しやすいので、実際に出力して確認するのが確実です。

まとめ:Java17 新機能 試験対策のポイント

Java17の新機能が試験でどう狙われるかを整理します。

  • 最優先はrecordとsealed:recordはアクセサ名(x())・暗黙final・コンパクトコンストラクタ、sealedは許可サブクラスへの finalsealednon-sealed 必須が二大引っかけ。
  • switch式:アローはフォールスルーしない・ブロックの戻り値は yield・式として使うなら網羅性が必須。
  • text block:開始 """ の直後は改行必須・付随的な空白は終了デリミタ基準で除去。
  • instanceofパターン/var:パターン変数のスコープ(&& は可・|| は不可)、varは局所変数専用で初期化子必須。
  • 勉強法:最小コードを自分で動かし、「コンパイルエラーになる書き方」を先に潰すのが最短。
  • 試験制度は改定されるため、申込前に必ずOracle認定資格・ピアソンVUEの公式で最新情報を確認する。

新機能のセクションは範囲が狭く、文法の可否を正確に覚えれば得点源にできる分野です。1つずつ手を動かして「通る/通らない」を確かめれば、引っかけに強くなります。学習全体の設計はJava Goldの難易度・勉強法Java資格の取得順序、資格を市場価値につなげる視点はエンジニアのスキルアップ・ロードマップもあわせてどうぞ。


免責:本記事は筆者の実務・学習経験および執筆時点で一般に公開されている情報にもとづく学習情報であり、特定の合格・成果を保証するものではありません。Javaの言語仕様は原則としてJava SE 17時点の確定仕様にもとづいて記述していますが、試験範囲・出題形式・受験料・合格基準などの認定制度は改定されることがあります。受験前には必ずOracle認定資格の公式サイトおよびピアソンVUEで、自分が受ける試験(1Z0-829)の最新情報をご確認ください。最終的な判断はご自身の責任で行ってください。