Java 主要 API クラスの仕様と実装例

Java API の基本概念

Java API は、開発者が標準で利用可能なクラスライブラリの仕様書です。これにより、文字列操作や配列処理、日付管理などの共通機能を実装せずに利用できます。例えば、文字列の長さ取得や特定インデックスの字符抽出などは、標準クラスを通じて行われます。

Object クラスの役割

java.lang.Object クラスは、Java におけるすべてのクラスの基底クラスです。配列を含む全てのオブジェクトは、このクラスを継承しており、ここで定義されたメソッドを利用可能です。Object 型の変数には任意のクラスのインスタンスを代入できるため、多態性の実現に不可欠です。

オブジェクトを出力する際、システムは暗黙的に toString() メソッドを呼び出します。オーバーライドされていない場合、Object クラスの実装が実行され、ハッシュコードを含む十六進数の文字列が返されます。オブジェクトの状態を分かりやすく表示するには、toString() をオーバーライドする必要があります。

equals メソッドによる比較

equals(Object obj) メソッドは、オブジェクトの論理的な同等性を判定します。デフォルト実装では参照アドレス(==)を比較しますが、多くのクラスでは内容の比較を行うように書き換えられます。


@Override
public boolean equals(Object obj) {
    if (this == obj) return true;
    if (!(obj instanceof User)) return false;
    User other = (User) obj;
    return this.age == other.age && this.name.equals(other.name);
}

このように実装することで、異なるインスタンスでも内部データが一致すれば true を返すようになります。

Arrays ユーティリティクラス

java.util.Arrays クラスは、配列操作に関する静的メソッドを提供します。

  • equals: 二つの配列の内容が完全に一致するか比較します。
  • copyOf: 既存の配列を指定した長さでコピーし、新しい配列を生成します。
  • fill: 配列の全要素に指定した値を代入します。
  • toString: 配列の内容を文字列形式で出力します。
  • binarySearch: 二分探索アルゴリズムを用いて値を検索します。
  • sort: 配列要素を昇順に並べ替えます。

カスタムオブジェクトの配列を排序するには、そのクラスが Comparable インターフェースを実装し、compareTo メソッドを定義する必要があります。


package com.example.core;
import java.util.Arrays;

public class ApiOverview {
    public static void main(String[] args) {
        User[] users = new User[3];
        users[0] = new User(20, "Tanaka");
        users[1] = new User(25, "Suzuki");
        users[2] = new User(18, "Sato");

        int[] nums1 = {1, 2, 3};
        int[] nums2 = {1, 2, 3};
        System.out.println(Arrays.equals(nums1, nums2)); // true

        int[] extended = Arrays.copyOf(nums1, 5);
        System.out.println(Arrays.toString(extended));

        Arrays.fill(nums2, 5);
        Arrays.sort(users); // User クラスが Comparable を実装している前提
        System.out.println(Arrays.toString(users));
    }
}

基本データ型のラッパークラス

Java の基本型(int, char など)はオブジェクトではありませんが、対応するラッパークラス(Integer, Character など)を用いることでオブジェクトとして扱えます。これにより、変換メソッドや定数を利用可能になります。

Integer クラスの活用

数値の進数変換や比較を行う静的メソッドが用意されています。


System.out.println(Integer.toBinaryString(10)); // 2 進数
System.out.println(Integer.toHexString(255));   // 16 進数
System.out.println(Integer.compare(5, 10));     // 比較結果

基本型とラッパークラスの間では、自動_boxing_と_unboxing_が発生します。Integer.valueOf() による自動ボックス化では、-128 から 127 の範囲にある値はキャッシュされたインスタンスが返されるため、同一性の比較には equals メソッドを使用することが推奨されます。

String クラスの特性

java.lang.String は不変(immutable)なクラスです。一度生成されたインスタンスの内容を変更することはできません。連結操作などを行うと、内部で新しいオブジェクトが生成されます。

  • リテラル生成: 文字列プールを参照し、同一値があれば既存オブジェクトを返します。
  • new 演算子: ヒープ領域に常に新しいオブジェクトを生成します。

主要なメソッドには、getBytes() によるバイト配列変換、toCharArray() による字符配列変換、equalsIgnoreCase() による大文字小文字を無視した比較、contains() による部分文字列検索などがあります。

部分文字列の取得には substring(start, end) を使用し、置換には replace() や replaceAll()(正規表現対応)を利用します。trim() メソッドは前後の空白を削除します。

Character クラスの補助機能

字符型の判定や変換に利用します。


char c = 'a';
System.out.println(Character.isLowerCase(c)); // true
System.out.println(Character.toUpperCase(c)); // 'A'

可変文字列クラス

頻繁な文字列操作を行う場合、StringBuffer または StringBuilder を使用します。

  • StringBuffer: メソッドが同期されており、マルチスレッド環境で安全です。
  • StringBuilder: 同期処理がないため単一スレッド环境下で高速に動作します。

どちらも append(), insert(), delete(), reverse() などのメソッドを持ち、内部配列を変更することでオブジェクトの再生成を防ぎます。

正規表現によるパターンマッチ

文字列が特定の規則に合致するかを判定するには、matches メソッドと正規表現を使用します。

  • [0-9]*: 数字が 0 回以上
  • [0-9]+: 数字が 1 回以上
  • \d: 数字 1 文字
  • {3,6}: 直前の要素が 3 回以上 6 回以下

String input = "12345";
System.out.println(input.matches("\\d{3,6}")); // true

数学・乱数生成ユーティリティ

Math クラスは、絶対値(abs)、平方根(sqrt)、べき乗(pow)、最大値(max)などの計算機能を提供します。random() メソッドは 0.0 以上 1.0 未満の double 値を返します。

より複雑な乱数生成には java.util.Random クラスを使用します。nextInt(), nextBoolean() などのメソッドで様々な型の乱数を取得できます。

日付と時刻の処理

java.util.Date クラスは、特定の時刻をミリ秒単位で表します。getTime() メソッドでエポック時間からの経過毫秒を取得可能です。

java.util.Calendar クラスは、抽象クラスであり getInstance() メソッドを通じてインスタンスを取得します。年、月、日、曜日などのフィールドを操作できます。月は 0 から始まる点に注意が必要です。


Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH); // 0-11

SimpleDateFormat クラスを用いることで、日付オブジェクトと文字列の相互変換が行えます。パターン文字列(yyyy-MM-dd など)を指定してフォーマットを定義します。


SimpleDateFormat fmt = new SimpleDateFormat("yyyy/MM/dd");
String dateStr = fmt.format(new Date());
Date parsedDate = fmt.parse("2023/01/01");

タグ: Java-API object-class string-buffer date-calendar wrapper-class

6月30日 22:14 投稿