Javaの基本構造と実装手法

Javaのデータ型は基本型と参照型に分類されます。

基本データ型

  • byte: 1バイト、範囲 -128~127
  • short: 2バイト、範囲 -32768~32767
  • int: 4バイト、範囲 -2147483648~2147483647
  • long: 8バイト、範囲 -9223372036854775808~9223372036854775807
  • float/double: 浮動小数点数
  • char: 文字型
  • boolean: 真偽値

参照型(オブジェクト型)

インスタンス化が必要で、メモリ上の参照(ポインタ)を保持します。

文字列処理

文字列は不変(イミュータブル)です。

String sample = "Hello";
String textA = new String("World");
char[] charArr = {'J','a','v','a'};
String textB = new String(charArr);

リテラルで定義した文字列は文字列プールで再利用され、メモリ効率が向上します。

文字列ビルダー

連結処理の効率を向上させるためのクラスです。

StringBuilder builder = new StringBuilder();
builder.append("Java").append(" ").append("World");
String result = builder.toString();

内部実装では初期容量16バイトで管理され、超過時に自動拡張(元の容量×2+2)が行われます。

オブジェクト指向の基本

オブジェクトのメモリ構造

オブジェクト生成時、スタック領域にメソッド呼び出しが、ヒープ領域にオブジェクトが作成されます。

  1. クラス定義がメソッド領域にロードされる
  2. ヒープ領域にオブジェクト用のメモリが確保される
  3. コンストラクタで初期化が行われる

静的メソッドと変数

静的メンバーはインスタンスではなくクラスに属します。

public class Calculator {
    public static final double PI = 3.14159;
    
    public static int add(int a, int b) {
        return a + b;
    }
}

静的メソッドは静的メンバーのみアクセス可能です。インスタンス化せずにクラス名で呼び出せます。

抽象クラスとインターフェース

抽象クラスは実装を部分的に定義し、継承クラスに実装を強制します。

abstract class Shape {
    abstract double calculateArea();
}

interface Drawable {
    void draw();
}

インターフェースはデフォルトメソッドや静的メソッドを定義でき、JDK8以降の機能です。

コレクションフレームワーク

リストとセット

List<Integer> intList = new ArrayList<>();
intList.add(10);
intList.add(20);

Set<String> uniqueSet = new HashSet<>();
uniqueSet.add("Apple");
uniqueSet.add("Banana");

ArrayListは順序保持、HashSetは重複排除を特徴とします。

マップの実装

キーと値のペアを格納します。

Map<String, Integer> scoreMap = new HashMap<>();
scoreMap.put("Math", 95);
scoreMap.put("English", 88);

// マップの反復処理
scoreMap.forEach((subject, score) -> 
    System.out.println(subject + ": " + score));

TreeMapはキーの順序を維持するため、比較ロジックを指定できます。

ラムダ式の活用

関数型インターフェースの簡略化に使用されます。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(name -> System.out.println("Name: " + name));

ラムダ式は1つの抽象メソッドを持つインターフェースにのみ適用可能です。

メモリ管理のポイント

オブジェクトのライフサイクルは以下のように制御されます:

  1. new演算子でヒープメモリにオブジェクトが作成される
  2. 参照が無くなるとガベージコレクションで解放される
  3. 文字列リテラルは文字列プールで再利用される

タグ: JavaStatic JavaCollections JavaOOP JavaString JavaLambda

7月1日 16:18 投稿