本文へスキップ
totonoe.tech

プログラミング言語を整える

中級

Java Silver を整える。

= Java Silver(SE 17)の試験範囲を、章ごとの練習問題で確かめる

Java Silver が初めての方は、先に そもそも Java Silver とは・どんな場面で役立つか をどうぞ。

入門の資格は Java Bronze を整える にあります。

試験の概要

試験名
Java SE 17 Programmer I
試験番号
1Z0-825-JPN
資格
Oracle Certified Java Programmer, Silver SE 17
形式
選択問題
時間
90分
問題数
60問
合格ライン
65%
配信
2027年2月28日に配信終了。SE 25 対応の試験は2026年11月下旬から配信予定(試験番号・範囲は未発表)

出典:Oracle の公式ページ(2026年11月3日時点)。試験の条件や日程は変わることがあるので、申し込む前に公式ページで最新の情報を確かめてください。

いつ・どれを受ける?

受験予定日から、受けられる試験を引く

Java の日本語試験は、バージョンごとに配信の終わる日が決まっています。受験予定日を入れると、その日に受けられるものが出ます。

配信が終わっても、取得済みの資格がすぐに失効するわけではありません。

配信が終わる日の一覧(日付を入れなくても見られます)
  • Bronze(1Z0-818-JPN):配信は続きます。
  • Silver SE 11(1Z0-815-JPN):2026年11月30日に配信終了。
  • Silver SE 17(1Z0-825-JPN):2027年2月28日に配信終了。
  • Silver SE 25 対応:2026年11月下旬から配信予定。試験番号と範囲は未発表です。

Java 資格の試験の切り替わり(NOBORIBA®研修サービスのお知らせ)に、版の切り替わりの詳しい案内があります。

試験範囲マップ

6つの章ごとに、覚えることと練習問題への入口を並べました。範囲の言葉は Oracle の試験内容チェックリストに沿っています。

SE 17 で加わった の印は、SE 11 の試験にはなく、SE 17 の試験で加わった範囲です。

SE 25 対応の試験の範囲は、試験の開始時に Oracle から発表される予定です。発表され次第、このページを更新します。このページの範囲と練習問題は SE 17 の試験のものです。

  1. 1

    Java の概要と簡単なJavaプログラムの作成

    • ・mainメソッドを持つ実行可能なJavaプログラムの作成
    • ・コマンドラインでのJavaプログラムのコンパイルと実行
    • ・パッケージの使用 (パッケージ宣言とインポート)

    ここで覚えることpackage 宣言は import より前、ファイルの先頭に1つだけ書きます。同じ名前のクラスを持つパッケージを *(ワイルドカード)で両方 import すると、使うときに曖昧でエラーになります。

    第1章の練習問題(4問)へ

  2. 2

    Javaの基本データ型と文字列の操作

    • ・変数の宣言および初期化と変数のスコープ
    • ・ローカル変数型推論 (var) SE 17 で加わった
    • ・文字列の作成と操作 (テキスト・ブロックを含む) SE 17 で加わった
    • ・配列 (一次元配列、二次元配列)の宣言、インスタンス化、初期化および使用
    • ・ArrayList の使用

    ここで覚えることvar は右辺の型で決まり、あとから別の型には変えられません。String は不変で、メソッドは新しい文字列を返すだけです。ArrayList の remove は、int を渡すと添字、オブジェクトを渡すと要素の指定になります。

    第2章の練習問題(5問)へ

  3. 3

    演算子と制御構造

    • ・分岐文 (if、if/else、switch) の使用
    • ・繰り返し文 (do/while、while、for文および拡張for文) の使用
    • ・break、continue を使用した制御
    • ・switch 式の使用 SE 17 で加わった

    ここで覚えることswitch 式は値を返し、case の中に複数の文を書くときは yield で値を返します。値を取る switch 式は、すべての場合を網羅する必要があります。従来の switch 文は break が無いと次の case へ続きます。

    第3章の練習問題(5問)へ

  4. 4

    クラスの定義とインスタンスの使用

    • ・Javaクラスの定義とインスタンス化とオブジェクトのライフサイクル
    • ・メソッドとコンストラクタの作成
    • ・メソッドのオーバーロード
    • ・static変数とstaticメソッド
    • ・アクセス修飾子の使用
    • ・instanceof のパターン・マッチング SE 17 で加わった
    • ・レコード・クラスの作成と使用 SE 17 で加わった

    ここで覚えることinstanceof のパターン変数は、一致したと確実に言える範囲でだけ使えます。レコードは toString・equals・アクセサを自動で作ってくれる、値を運ぶためのクラスです。コンストラクタの引数名とフィールド名が同じときは this を付けます。

    第4章の練習問題(5問)へ

  5. 5

    継承とインタフェースの使用

    • ・スーパークラスとサブクラスの作成と使用
    • ・抽象クラスの作成と継承
    • ・メソッドのオーバーライド
    • ・参照型のキャストとポリモーフィックなメソッド呼び出し
    • ・final クラスの作成と使用
    • ・インタフェースの作成と実装
    • ・デフォルト・メソッドとプライベート・メソッドの使用
    • ・シール・クラスの作成と使用 SE 17 で加わった

    ここで覚えることメソッドは実体のクラスで選ばれますが、フィールドは変数の型で決まります。同じ default メソッドを持つ2つのインタフェースを実装したら、自分で上書きして解決します。sealed の permits に無いクラスは継承できません。

    第5章の練習問題(5問)へ

  6. 6

    例外処理

    • ・例外処理の仕組みとチェック例外、非チェック例外、エラーの違い
    • ・try-catch文による例外処理
    • ・try-with-resources 文による例外処理
    • ・カスタム例外の作成
    • ・multi-catch 句の使用

    ここで覚えることcatch は上から順に調べるので、親クラスを先に書くと子の catch に届かずエラーです。チェック例外は、catch するか throws で宣言しないとコンパイルが通りません。try-with-resources は、開いた順と逆に close します。

    第6章の練習問題(5問)へ

章ごとの練習問題(出力当て)

短い Java のコードを読んで、実行すると何が表示されるかを選びます(全29問)。選ぶと正解と理由が出ます。答えはどこにも送られず、記録もしません。問題はすべてオリジナルで、試験の実際の問題ではありません。

出力は OpenJDK 17 で実際にコンパイル・実行して、答えと一字一句同じになることを確かめたものです(OpenJDK 17.0.21)。「コンパイルエラー」「実行時に例外」が答えの問題も、本物の javac と java で確かめています。

第1章 Java の概要と簡単なJavaプログラムの作成

0/4 問正解 (答えた問題:0/4)

問1

import java.util.List;
package app;

public class Main {
    public static void main(String[] args) {
        System.out.println("hi");
    }
}

実行すると何が表示される?

問2

public class Main {
    public static void main(String[] args) {
        String name = args[0];
        System.out.println("Hello, " + name);
    }
}

条件:コマンドライン引数を付けずに java Main で実行したとき

実行すると何が表示される?

問3

import java.util.*;
import java.sql.*;

public class Main {
    public static void main(String[] args) {
        Date today = null;
        System.out.println(today);
    }
}

実行すると何が表示される?

問4

public class Main {
    static {
        System.out.println("A");
    }

    public static void main(String[] args) {
        System.out.println("B");
    }

    static {
        System.out.println("C");
    }
}

実行すると何が表示される?

第2章 Javaの基本データ型と文字列の操作

0/5 問正解 (答えた問題:0/5)

問5

public class Main {
    public static void main(String[] args) {
        var count = 10;
        count = 2.5;
        System.out.println(count);
    }
}

実行すると何が表示される?

問6

public class Main {
    public static void main(String[] args) {
        String s = "abc";
        s.toUpperCase();
        s.concat("def");
        System.out.println(s);
    }
}

実行すると何が表示される?

問7

public class Main {
    public static void main(String[] args) {
        String t = """
            Hello
              World
            """;
        System.out.print(t);
    }
}

実行すると何が表示される?

問8

public class Main {
    public static void main(String[] args) {
        int[][] grid = new int[2][];
        System.out.println(grid.length);
        System.out.println(grid[0]);
    }
}

実行すると何が表示される?

問9

import java.util.*;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>(List.of(10, 20, 30));
        list.remove(1);
        list.remove(Integer.valueOf(10));
        System.out.println(list);
    }
}

実行すると何が表示される?

第3章 演算子と制御構造

0/5 問正解 (答えた問題:0/5)

問10

public class Main {
    public static void main(String[] args) {
        int day = 3;
        String type = switch (day) {
            case 1, 7 -> "off";
            case 2, 3, 4 -> {
                String t = "work";
                yield t + "!";
            }
            default -> "?";
        };
        System.out.println(type);
    }
}

実行すると何が表示される?

問11

public class Main {
    public static void main(String[] args) {
        int x = 2;
        switch (x) {
            case 1:
                System.out.print("A");
            default:
                System.out.print("B");
            case 3:
                System.out.print("C");
                break;
            case 4:
                System.out.print("D");
        }
    }
}

実行すると何が表示される?

問12

public class Main {
    public static void main(String[] args) {
        int level = 2;
        String label = switch (level) {
            case 1 -> "low";
            case 2 -> "mid";
        };
        System.out.println(label);
    }
}

実行すると何が表示される?

問13

public class Main {
    public static void main(String[] args) {
        outer:
        for (int i = 1; i <= 3; i++) {
            for (int j = 1; j <= 3; j++) {
                if (j == 2) continue outer;
                System.out.println(i + "-" + j);
            }
        }
    }
}

実行すると何が表示される?

問14

public class Main {
    public static void main(String[] args) {
        int x = 5;
        x += 3.7;
        byte b = 10;
        b += 5;
        System.out.println(x + " " + b);
    }
}

実行すると何が表示される?

第4章 クラスの定義とインスタンスの使用

0/5 問正解 (答えた問題:0/5)

問15

public class Main {
    public static void main(String[] args) {
        Object o = "hello";
        if (o instanceof String s && s.length() > 3) {
            System.out.println(s.toUpperCase());
        } else {
            System.out.println("no");
        }
    }
}

実行すると何が表示される?

問16

public class Main {
    public static void main(String[] args) {
        Object o = "hello";
        if (o instanceof String s || s.length() > 3) {
            System.out.println("yes");
        }
    }
}

実行すると何が表示される?

問17

record Point(int x, int y) {}

public class Main {
    public static void main(String[] args) {
        Point p = new Point(1, 2);
        Point q = new Point(1, 2);
        System.out.println(p);
        System.out.println(p.equals(q) + " " + (p == q));
    }
}

実行すると何が表示される?

問18

record Age(int value) {
    Age {
        if (value < 0) {
            throw new IllegalArgumentException("negative: " + value);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        Age a = new Age(20);
        System.out.println(a.value());
        Age b = new Age(-1);
        System.out.println(b.value());
    }
}

実行すると何が表示される?

問19

class Person {
    String name;

    Person(String name) {
        name = name;
    }
}

public class Main {
    public static void main(String[] args) {
        Person p = new Person("Aki");
        System.out.println(p.name);
    }
}

実行すると何が表示される?

第5章 継承とインタフェースの使用

0/5 問正解 (答えた問題:0/5)

問20

class Parent {
    String name = "parent";
    String who() { return "Parent.who"; }
}

class Child extends Parent {
    String name = "child";
    String who() { return "Child.who"; }
}

public class Main {
    public static void main(String[] args) {
        Parent p = new Child();
        System.out.println(p.name + " " + p.who());
    }
}

実行すると何が表示される?

問21

final class Base {
    void hi() { System.out.println("hi"); }
}

class Sub extends Base {
}

public class Main {
    public static void main(String[] args) {
        new Sub().hi();
    }
}

実行すると何が表示される?

問22

interface A {
    default String hello() { return "A"; }
}

interface B {
    default String hello() { return "B"; }
}

class C implements A, B {
}

public class Main {
    public static void main(String[] args) {
        System.out.println(new C().hello());
    }
}

実行すると何が表示される?

問23

interface Greeter {
    default String greet(String name) {
        return prefix() + name;
    }

    private String prefix() {
        return "Hello, ";
    }
}

class Jp implements Greeter {
}

public class Main {
    public static void main(String[] args) {
        System.out.println(new Jp().greet("Aki"));
    }
}

実行すると何が表示される?

問24

sealed interface Shape permits Circle, Square {}

record Circle(double r) implements Shape {}

record Square(double s) implements Shape {}

final class Triangle implements Shape {}

public class Main {
    public static void main(String[] args) {
        Shape s = new Circle(1);
        System.out.println(s);
    }
}

実行すると何が表示される?

第6章 例外処理

0/5 問正解 (答えた問題:0/5)

問25

public class Main {
    public static void main(String[] args) {
        try {
            int[] a = new int[1];
            a[2] = 1;
        } catch (Exception e) {
            System.out.println("E");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("A");
        }
    }
}

実行すると何が表示される?

問26

public class Main {
    static int f() {
        try {
            return 1;
        } finally {
            System.out.println("F");
        }
    }

    public static void main(String[] args) {
        System.out.println(f());
    }
}

実行すると何が表示される?

問27

class Res implements AutoCloseable {
    private final String name;

    Res(String name) {
        this.name = name;
        System.out.println("open " + name);
    }

    public void close() {
        System.out.println("close " + name);
    }
}

public class Main {
    public static void main(String[] args) {
        try (Res a = new Res("A"); Res b = new Res("B")) {
            System.out.println("body");
        }
    }
}

実行すると何が表示される?

問28

public class Main {
    static void risky() throws Exception {
        throw new Exception("boom");
    }

    public static void main(String[] args) {
        risky();
        System.out.println("done");
    }
}

実行すると何が表示される?

問29

public class Main {
    public static void main(String[] args) {
        try {
            String s = null;
            System.out.println(s.length());
        } catch (ArithmeticException | NullPointerException e) {
            System.out.println("caught " + e.getClass().getSimpleName());
        } finally {
            System.out.println("end");
        }
    }
}

実行すると何が表示される?

よくある勘違い

  • var は何でも入れられる変数、と思ってしまう。var は右辺から型を決めるだけで、決まった型はあとから変わりません。var count = 10; のあとに 2.5 は入れられません。
  • String のメソッドは自分自身を書き換える、と思ってしまう。String は不変なので、toUpperCase や concat は新しい文字列を返すだけです。返り値を受け取らないと何も変わりません。
  • 値を返す switch 式の default は省略できる、と思ってしまう。int や String では、すべての場合を網羅する必要があり、default が無いとコンパイルエラーです。
  • instanceof で取り出した変数は、そのあとどこでも使える、と思ってしまう。一致したと確実に言える範囲(&& の右側や if の中など)でだけ使えます。|| の右側では使えません。
  • フィールドもメソッドと同じようにオーバーライドされる、と思ってしまう。メソッドは実体のクラスで選ばれますが、フィールドは変数の型で決まります。
  • catch は書く順番を気にしなくてよい、と思ってしまう。親クラスの例外を先に書くと、あとの子クラスの catch には届かず、コンパイルエラーになります。
  • レコードのフィールドは、あとから書き換えられる、と思ってしまう。レコードの成分は final なので、作ったあとで書き換えることはできません。

そもそも Java Silver とは

Java の基本文法とオブジェクト指向を、一通り使いこなせることを示す資格。

Java Silverは、Oracle が行っている Java の認定資格で、入門の Bronze の次にあたります。変数と文字列、条件分岐とループ、クラスとインスタンス、継承とインタフェース、例外処理までが範囲です。

Bronze と違って、Java の特定のバージョンに結びついた試験です。SE 11 の試験は2026年11月30日に、SE 17 の試験は2027年2月28日に配信が終わり、その先は SE 25 に対応した試験が配信される予定です。このページの範囲と練習問題は SE 17 の試験のものです。SE 25 対応の試験の範囲は、試験の開始時に発表される予定なので、発表され次第、更新します。

Bronze・Silver・Gold の位置づけ

  • Bronze

    入門。基本の文法が中心です。Java Bronze を整えるへ。

  • Silver

    Bronze の次。このページが対象です。

  • Gold

    Silver の上の資格です。このサイトではまだ扱っていません。

どんな場面で役立つか

  • 業務システム開発の現場に入る前に

    Java で作られた業務システムの保守や開発に配属される人が、基礎の抜けを確かめる目安にできます。

  • 新人研修の次の目標として

    Bronze のあとの目標にすると、継承や例外処理まで学ぶ道筋ができます。

  • 新しい文法を整理するときに

    var・switch 式・レコードなど、新しい版で加わった書き方を、体系的に学び直せます。

  • エラーの読み方を身につけたいときに

    コンパイルエラーになる理由や例外の出方を理解すると、実務のデバッグが楽になります。

言語そのものの紹介は Java を整える、情報処理の入口の国家資格は ITパスポートを整えるにあります。

あわせて見る

Oracle、Java は Oracle およびその関連会社の商標または登録商標です。このページは Oracle の公式のものではなく、試験の合格を保証するものでもありません。

このツールについて

Java Silver(SE 17)の試験範囲を、章ごとの練習問題で確かめます。出力当てが中心で、答えは本物の Java で確かめたものです。

Java Silver(SE 17)の試験範囲6章と、章ごとの練習問題29問。SE 17 で加わった範囲に印つき。SE 25 対応の試験は、範囲の発表後に更新します。

主な機能

  • 試験の基本(試験番号・形式・90分・60問・合格ライン65%)と Oracle 公式ページへのリンク
  • 「いつ・どれを受ける?」早見(SE 11 は2026/11/30、SE 17 は2027/2/28 に配信終了、SE 25 は配信予定)
  • 試験範囲マップ6章と、SE 17 で加わった範囲の印(var・テキスト・ブロック・switch 式・instanceof・レコード・シール・クラス)
  • 章ごとの練習問題29問(コンパイルエラー・例外・出力)
  • 章ごとの正答数表示(記録は保存しない)
  • よくある勘違い7つ
  • 出力は OpenJDK 17 で照合済み・送信ゼロ

よくある質問

Q. Java Silver の SE 11 と SE 17 の試験は、いつまで受けられますか?

A. 日本語の SE 11 の試験(1Z0-815-JPN)は2026年11月30日、SE 17 の試験(1Z0-825-JPN)は2027年2月28日に配信が終わります(2026年9月7日の Oracle の発表)。配信が終わっても、取得した資格がすぐに失効するわけではありません。

Q. SE 25 に対応した Silver の試験はありますか?

A. 2026年11月下旬から配信を始める予定とされています。試験番号と試験範囲は未発表で、試験の開始時に Oracle から発表される予定です。このページの範囲と練習問題は SE 17 の試験のもので、SE 25 の範囲が発表されたら更新します。

Q. Silver SE 17 の試験の形式を教えてください。

A. 選択問題で、試験時間は90分、問題数は60問、合格ラインは65%です(Oracle の公式ページで2026年11月3日に確認)。試験番号は 1Z0-825-JPN です。

入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

続けて整える

データの時点:2026年11月3日に確認(Oracle University『Java認定試験の提供予定』(2026/9/7))  次の更新予定:2026年11月ごろ

データの更新予定の一覧

totonoe.tech を運営する株式会社Koinobori は、法人向けの研修サービス「NOBORIBA®」も運営しています。 ここで手を動かした内容を、講師から教わる形の研修です。このページの道具は無料のまま、登録もいりません。

運営サイト

私たちが運営するサイト