Java Silver試験対策：初心者エンジニアのための完全ガイド

## はじめに

Javaエンジニアを目指す皆さん、こんにちは！今回は、Java Silver試験の対策について詳しく解説していきます。15章に分けて、重要なポイントと練習問題を紹介します。それでは、さっそく始めましょう！

## 1. Javaプログラミングの基礎

Javaの基本構文や変数の扱い方を学びます。

**練習問題:**
次のコードの出力は何ですか？

```java
public class HelloWorld {
    public static void main(String[] args) {
        int x = 5;
        System.out.println(x++);
    }
}
```

a) 5
b) 6
c) コンパイルエラー
d) 実行時エラー

**答え: a) 5**
後置インクリメント演算子（x++）は、現在の値を返してから増加させます。

## 2. オブジェクト指向プログラミング

クラスとオブジェクトの概念を理解しましょう。

**練習問題:**
以下のコードで正しいのはどれですか？

```java
class Animal {
    void makeSound() {
        System.out.println("Some sound");
    }
}

class Dog extends Animal {
    void makeSound() {
        System.out.println("Woof");
    }
}
```

a) 継承の例である
b) オーバーロードの例である
c) カプセル化の例である
d) 多態性の例である

**答え: a) 継承の例である**
DogクラスがAnimalクラスを継承し、makeSoundメソッドをオーバーライドしています。

## 3. 配列と文字列

配列の操作と文字列の扱い方を学びます。

**練習問題:**
次のコードの出力は何ですか？

```java
String str = "Hello";
str.concat(" World");
System.out.println(str);
```

a) Hello
b) World
c) Hello World
d) コンパイルエラー

**答え: a) Hello**
Stringは不変オブジェクトです。concat()メソッドは新しい文字列を返しますが、元の文字列は変更されません。

## 4. 例外処理

try-catchブロックの使い方を理解しましょう。

**練習問題:**
以下のコードで適切な例外処理はどれですか？

```java
try {
    int[] arr = new int[5];
    arr[10] = 50;
} catch (___________) {
    System.out.println("Array index out of bounds!");
}
```

a) ArrayIndexOutOfBoundsException e
b) Exception e
c) RuntimeException e
d) IndexOutOfBoundsException e

**答え: a) ArrayIndexOutOfBoundsException e**
配列の範囲外にアクセスしようとした場合、ArrayIndexOutOfBoundsExceptionがスローされます。

## 5. ラムダ式と関数型インターフェース

Java 8以降の機能を学びます。

**練習問題:**
正しいラムダ式はどれですか？

```java
interface Calculator {
    int calculate(int x, int y);
}

Calculator add = ____________;
```

a) (x, y) -> x + y
b) (x, y) => x + y
c) (int x, int y) -> { return x + y; }
d) (x, y) -> return x + y;

**答え: a) (x, y) -> x + y**
これは最も簡潔で正しいラムダ式の書き方です。

## 6. ストリームAPI

コレクションの操作を効率的に行う方法を学びます。

**練習問題:**
次のコードの出力は何ですか？

```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
                 .filter(n -> n % 2 == 0)
                 .mapToInt(Integer::intValue)
                 .sum();
System.out.println(sum);
```

a) 15
b) 6
c) 9
d) 3

**答え: b) 6**
偶数（2と4）の合計が計算されます。

## 7. モジュールシステム

Java 9以降のモジュールシステムについて学びます。

**練習問題:**
モジュール定義ファイルの正しい名前は？

a) module-info.class
b) module-info.java
c) module.java
d) module.class

**答え: b) module-info.java**
モジュールを定義するファイルは「module-info.java」という名前で作成します。

## 8. ジェネリクス

型安全性を高めるジェネリクスの使い方を学びます。

**練習問題:**
次のコードで正しいのはどれですか？

```java
List<? extends Number> list = new ArrayList<Integer>();
list.add(10);
```

a) コンパイルエラー
b) 実行時エラー
c) 10が追加される
d) nullが追加される

**答え: a) コンパイルエラー**
「? extends Number」は読み取り専用となるため、要素を追加することはできません。

## 9. コレクションフレームワーク

ListやMapなどの基本的なコレクションの使い方を学びます。

**練習問題:**
HashMapの特徴として正しいのはどれですか？

a) 要素の順序を保持する
b) キーの重複を許可する
c) nullキーを1つだけ許可する
d) スレッドセーフである

**答え: c) nullキーを1つだけ許可する**
HashMapはnullキーを1つだけ許可し、順序を保持せず、スレッドセーフではありません。

## 10. 入出力処理

ファイルの読み書きや標準入出力の扱い方を学びます。

**練習問題:**
次のコードで適切なインポート文はどれですか？

```java
BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
```

a) import java.io.*;
b) import java.util.*;
c) import java.nio.*;
d) import java.lang.*;

**答え: a) import java.io.*;**
BufferedReaderとFileReaderは java.io パッケージに含まれています。

## 11. スレッドとマルチスレッディング

並行処理の基本を学びます。

**練習問題:**
スレッドセーフなクラスはどれですか？

a) ArrayList
b) HashMap
c) Vector
d) LinkedList

**答え: c) Vector**
Vectorはスレッドセーフなクラスです。他の選択肢はスレッドセーフではありません。

## 12. Java日付/時間API

Java 8以降の新しい日付/時間APIを学びます。

**練習問題:**
現在の日時を取得するための正しいコードは？

a) new Date()
b) LocalDateTime.now()
c) Calendar.getInstance()
d) System.currentTimeMillis()

**答え: b) LocalDateTime.now()**
これはJava 8以降で推奨される現在の日時を取得する方法です。

## 13. アノテーション

メタデータを追加するアノテーションの使い方を学びます。

**練習問題:**
次のアノテーションの意味は？

```java
@Override
public void someMethod() {
    // ...
}
```

a) メソッドをオーバーライドしていることを示す
b) メソッドを非推奨にする
c) メソッドを抑制する
d) メソッドをテストする

**答え: a) メソッドをオーバーライドしていることを示す**
@Overrideアノテーションは、メソッドがスーパークラスのメソッドをオーバーライドしていることを示します。

## 14. JDBC

データベース接続の基本を学びます。

**練習問題:**
JDBCドライバーを登録するための正しいコードは？

a) Class.forName("com.mysql.jdbc.Driver");
b) DriverManager.registerDriver("com.mysql.jdbc.Driver");
c) Connection.register("com.mysql.jdbc.Driver");
d) Database.loadDriver("com.mysql.jdbc.Driver");

**答え: a) Class.forName("com.mysql.jdbc.Driver");**
これは従来のJDBCドライバーを登録する一般的な方法です。

## 15. Java SECの基礎

セキュリティ関連の機能を学びます。

**練習問題:**
安全なパスワード保存方法として適切なのは？

a) 平文で保存
b) MD5でハッシュ化
c) bcryptでハッシュ化
d) Base64でエンコード

**答え: c) bcryptでハッシュ化**
bcryptは現在、パスワードのハッシュ化に推奨されるアルゴリズムの1つです。

以上が、Java Silver試験対策の15章です。各章の練習問題を解きながら、理解を深めていってください。この記事を参考に、しっかりと準備を進めてください。Java Silver試験合格を目指して、頑張りましょう！