Java APIについて、まとめてみました

## はじめに
Java API（Application Programming Interface）は、Javaプログラミング言語で開発されたアプリケーションが他のソフトウェアやサービスとやり取りするための一連の定義やプロトコルです。Java APIは、Javaプラットフォームの一部として提供される標準ライブラリや、サードパーティのライブラリを含む広範な機能を提供します。今回は、このJava APIについて、まとめてみました。

## Java APIの基本概念

1. **パッケージ**
Java APIは、関連するクラスやインターフェースをまとめたパッケージとして提供されます。例えば、`java.util`パッケージには、コレクションフレームワークや日付・時間の操作に関するクラスが含まれています。

2. **クラスとインターフェース**
APIは、クラスやインターフェースの形で提供されます。クラスはオブジェクトの設計図であり、インターフェースはクラスが実装すべきメソッドのセットを定義します。

3. **メソッド**
クラスやインターフェースには、特定の機能を実行するためのメソッドが含まれています。メソッドは、APIを通じて提供される機能を実際に利用するための手段です。

## 主要なJava API

### 1. **java.lang**
Javaプログラムの基本的なクラスを提供します。`String`, `Math`, `Integer`, `System`などが含まれます。
例：`String`クラスを使用して文字列操作を行う。

```java
String message = "Hello, World!";
int length = message.length();
System.out.println("Message length: " + length);
```

### 2. **java.util**
コレクションフレームワーク、日付・時間の操作、ランダム数生成などのユーティリティクラスを提供します。
例：`ArrayList`を使用してリストを操作する。

```java
import java.util.ArrayList;

ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");

for (String fruit : list) {
    System.out.println(fruit);
}
```

### 3. **java.io**
入出力操作をサポートするクラスを提供します。ファイルの読み書き、ストリーム操作などが含まれます。
例：ファイルからテキストを読み取る。

```java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}
```

### 4. **java.nio**
非ブロッキングI/O操作をサポートするクラスを提供します。ファイルチャネル、バッファ、セレクタなどが含まれます。
例：NIOを使用してファイルを読み取る。

```java
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

try {
    List<String> lines = Files.readAllLines(Paths.get("example.txt"));
    for (String line : lines) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}
```

### 5. **java.net**
ネットワーク操作をサポートするクラスを提供します。ソケット通信、URL操作などが含まれます。
例：URLからデータを読み取る。

```java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;

try {
    URL url = new URL("http://example.com");
    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
    String inputLine;
    while ((inputLine = in.readLine()) != null) {
        System.out.println(inputLine);
    }
    in.close();
} catch (IOException e) {
    e.printStackTrace();
}
```

### Java APIの利用方法

1. **ドキュメントの参照**
Java APIのドキュメントは、公式サイト（[Oracle Java SE Documentation](https://docs.oracle.com/en/java/javase/11/docs/api/index.html)）で提供されています。クラスやメソッドの詳細な説明、活用例が記載されています。

2. **インポート**
必要なクラスやパッケージをインポートして使用します。`import`文を使用して、特定のクラスやパッケージ全体をインポートできます。

3. **インスタンスの作成**
クラスのインスタンスを作成し、メソッドを呼び出して機能を利用します。

## 指定された各クラスやインターフェースの主要なメソッド
Javaの標準ライブラリには、多くの便利なクラスとメソッドが含まれています。

### Mathクラスのメソッド
`Math`クラスは、基本的な数学演算を提供します。

- `abs(double a)`: 絶対値を返します。
- `max(double a, double b)`: 2つの値のうち大きい方を返します。
- `min(double a, double b)`: 2つの値のうち小さい方を返します。
- `pow(double a, double b)`: aのb乗を返します。
- `sqrt(double a)`: 平方根を返します。
- `random()`: 0.0以上1.0未満のランダムな値を返します。

### Comparatorクラスのメソッド
`Comparator`は、オブジェクトの順序付けを定義するためのインターフェースです。

- `compare(T o1, T o2)`: 2つのオブジェクトを比較します。
- `reversed()`: 逆順のComparatorを返します。
- `thenComparing(Comparator<? super T> other)`: 追加のComparatorを連鎖させます。

### Characterクラスのメソッド
`Character`クラスは、文字に関する操作を提供します。

- `isDigit(char ch)`: 文字が数字かどうかを判定します。
- `isLetter(char ch)`: 文字がアルファベットかどうかを判定します。
- `toLowerCase(char ch)`: 文字を小文字に変換します。
- `toUpperCase(char ch)`: 文字を大文字に変換します。
- `isWhitespace(char ch)`: 文字が空白かどうかを判定します。

### LocalDateクラスのメソッド
`LocalDate`クラスは、日付を表現するためのクラスです。

- `now()`: 現在の日付を取得します。
- `of(int year, int month, int dayOfMonth)`: 指定された年、月、日から日付を作成します。
- `plusDays(long daysToAdd)`: 指定された日数を追加します。
- `minusDays(long daysToSubtract)`: 指定された日数を減算します。
- `getDayOfWeek()`: 曜日を取得します。

### ArrayListクラスのメソッド
`ArrayList`は、可変長の配列を提供するクラスです。

- `add(E e)`: 要素を追加します。
- `get(int index)`: 指定された位置の要素を取得します。
- `remove(int index)`: 指定された位置の要素を削除します。
- `size()`: リストの要素数を取得します。
- `clear()`: リストの全要素を削除します。

### Arraysクラスのメソッド
`Arrays`クラスは、配列を操作するためのユーティリティメソッドを提供します。

- `sort(int[] a)`: 配列を昇順にソートします。
- `binarySearch(int[] a, int key)`: ソートされた配列からキーをバイナリ検索します。
- `copyOf(int[] original, int newLength)`: 配列を指定された長さにコピーします。
- `equals(int[] a, int[] a2)`: 2つの配列が等しいかどうかを判定します。
- `toString(int[] a)`: 配列の文字列表現を返します。

### Mapインターフェース
`Map`インターフェースは、キーと値のペアを保持するコレクションを定義します。

- `put(K key, V value)`: 指定されたキーに値を関連付けます。
- `get(Object key)`: 指定されたキーに関連付けられた値を取得します。
- `remove(Object key)`: 指定されたキーに関連付けられた値を削除します。
- `containsKey(Object key)`: 指定されたキーが存在するかどうかを判定します。
- `keySet()`: マップ内のすべてのキーのセットを取得します。

### HashMapクラス
`HashMap`は、`Map`インターフェースを実装したクラスで、ハッシュテーブルを使用してキーと値のペアを保持します。

- `put(K key, V value)`: 指定されたキーに値を関連付けます。
- `get(Object key)`: 指定されたキーに関連付けられた値を取得します。
- `remove(Object key)`: 指定されたキーに関連付けられた値を削除します。
- `containsKey(Object key)`: 指定されたキーが存在するかどうかを判定します。
- `keySet()`: マップ内のすべてのキーのセットを取得します。

### forEachメソッド
`forEach`メソッドは、コレクションの各要素に対して指定されたアクションを実行します。

- `forEach(Consumer<? super T> action)`: コレクションの各要素に対してアクションを実行します。

```java
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
list.forEach(System.out::println);
```

### メソッド参照
メソッド参照は、既存のメソッドを参照するための簡潔な方法です。

- **静的メソッド参照**：`ClassName::methodName`
- **インスタンスメソッド参照**：`instance::methodName`
- **コンストラクタ参照**：`ClassName::new`

```java
// 静的メソッド参照
Function<String, Integer> parseInt = Integer::parseInt;

// インスタンスメソッド参照
String str = "Hello";
Supplier<Integer> lengthSupplier = str::length;

// コンストラクタ参照
Supplier<ArrayList<String>> listSupplier = ArrayList::new;
```

これらのメソッドやクラスを活用することで、Javaプログラムの開発がより効率的かつ効果的になります。

参考文献
徹底攻略Java SE 11 Silver問題集［1Z0-815］対応
第九章　API
https://book.impress.co.jp/books/1118101186