Javaの歴史と特徴

編集

Javaは、1995年にSun Microsystems(現在はOracle)によって開発されたプログラミング言語です。「一度書けば、どこでも動く」(Write Once, Run Anywhere)というスローガンに象徴されるように、プラットフォームに依存しない高い移植性を特徴としています。エンタープライズシステム、Android開発、組み込みシステムなど、幅広い分野で活用されています。

基本的な文法と構造

編集

基本的なプログラム構造

編集

典型的なJavaプログラムの構造は以下のようになります:

public class HelloWorld {
    public static void main(String[] args) {
        // 最初のJavaプログラム
        System.out.println("こんにちは、世界!");
        
        // 変数と型
        int age = 30;
        double height = 170.5;
        char initial = 'J';
        boolean isStudent = true;
        
        // 文字列補完
        String message = String.format(
            "年齢: %d, 身長: %.1f", age, height
        );
        System.out.println(message);
    }
}

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

編集

Javaの強力なオブジェクト指向機能:

// 基本的なクラス定義
public class Person {
    // プライベートフィールド
    private String name;
    private int age;
    
    // コンストラクタ
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    // メソッド
    public void introduce() {
        System.out.printf(
            "こんにちは、私は%sです。%d歳です。\n", 
            name, age
        );
    }
    
    // ゲッターメソッド
    public String getName() {
        return name;
    }
}

// 継承
public class Student extends Person {
    private String school;
    
    public Student(String name, int age, String school) {
        super(name, age);
        this.school = school;
    }
    
    @Override
    public void introduce() {
        super.introduce();
        System.out.println("学校: " + school);
    }
}

コレクションとジェネリクス

編集

型安全なデータ構造の実装:

import java.util.*;

public class CollectionDemo {
    public static void main(String[] args) {
        // リスト
        List<String> fruits = new ArrayList<>();
        fruits.add("リンゴ");
        fruits.add("バナナ");
        fruits.add("オレンジ");
        
        // ストリーム操作
        fruits.stream()
              .filter(f -> f.length() > 4)
              .forEach(System.out::println);
        
        // マップ
        Map<String, Integer> ageMap = new HashMap<>();
        ageMap.put("田中", 30);
        ageMap.put("佐藤", 25);
        
        // マップのイテレーション
        for (Map.Entry<String, Integer> entry : ageMap.entrySet()) {
            System.out.println(
                entry.getKey() + ": " + entry.getValue() + "歳"
            );
        }
    }
}

例外処理

編集

堅牢なエラーハンドリング:

import java.io.*;

public class ExceptionHandlingDemo {
    public static void main(String[] args) {
        try {
            // ファイル読み込み
            BufferedReader reader = new BufferedReader(
                new FileReader("example.txt")
            );
            String line = reader.readLine();
            System.out.println(line);
            reader.close();
        } catch (FileNotFoundException e) {
            System.out.println("ファイルが見つかりません");
        } catch (IOException e) {
            System.out.println("読み込みエラーが発生しました");
        } finally {
            System.out.println("処理が完了しました");
        }
    }
}

マルチスレッドプログラミング

編集

並行処理の実装:

import java.util.concurrent.*;

public class ThreadDemo {
    public static void main(String[] args) {
        // スレッドプール
        ExecutorService executor = Executors.newFixedThreadPool(3);
        
        // タスクの実行
        for (int i = 0; i < 5; i++) {
            final int taskId = i;
            executor.submit(() -> {
                try {
                    System.out.printf(
                        "タスク %d が実行中\n", taskId
                    );
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
        }
        
        // シャットダウン
        executor.shutdown();
        try {
            executor.awaitTermination(
                5, TimeUnit.SECONDS
            );
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

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

編集

モダンな関数型プログラミング:

import java.util.*;
import java.util.stream.*;

public class LambdaDemo {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        
        // ラムダを使用した操作
        List<Integer> squared = numbers.stream()
            .map(x -> x * x)
            .collect(Collectors.toList());
        
        // フィルタリング
        List<Integer> evenNumbers = numbers.stream()
            .filter(x -> x % 2 == 0)
            .collect(Collectors.toList());
        
        // カスタム関数型インターフェース
        MathOperation add = (a, b) -> a + b;
        MathOperation multiply = (a, b) -> a * b;
        
        System.out.println("加算: " + add.operate(5, 3));
        System.out.println("乗算: " + multiply.operate(5, 3));
    }
    
    // 関数型インターフェース
    @FunctionalInterface
    interface MathOperation {
        int operate(int a, int b);
    }
}

ネットワークプログラミング

編集

簡単なソケット通信:

import java.net.*;
import java.io.*;

public class NetworkDemo {
    public static void main(String[] args) {
        try {
            // シンプルなHTTPリクエスト
            URL url = new URL("https://example.com");
            try (BufferedReader reader = new BufferedReader(
                new InputStreamReader(url.openStream())
            )) {
                String inputLine;
                while ((inputLine = reader.readLine()) != null) {
                    System.out.println(inputLine);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

おわりに

編集

Javaは、その堅牢性、移植性、そして豊富なエコシステムにより、エンタープライズシステムから組み込みシステム、モバイルアプリケーションに至るまで、幅広い用途で活用されています。オブジェクト指向プログラミング、関数型プログラミング、そして並行処理のサポートにより、複雑なソフトウェアシステムを効率的に開発できる言語です。

継続的な学習と実践が、Javaプログラマーとしての成長の鍵となるでしょう。