プログラミング/Java
表示
< プログラミング
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プログラマーとしての成長の鍵となるでしょう。