# Javaとは Javaは「Write once, run anywhere(1度書けばどこでも動く)」を理念として 1995年にSun Microsystems(現Oracle)から登場しました。 C/C++の強力さと安全性・移植性を両立させることを狙った汎用オブジェクト指向言語です。 * 開発元: Oracle(元Sun) * ランタイム: JVM(Java Virtual Machine) * GUI: Swing / JavaFX * Web: Spring Boot / Jakarta EE ## 実行モデル .javaソースを javacでコンパイル →.class バイトコード生成 .class を JVM が実行(JITコンパイルでマシンコード化) ``` [ソースコード] → javac → [バイトコード] → JVM → [実行] ``` これにより、Windows / macOS / Linux どこでも同じ .class を動かせます。 ## 基本構文 ```java public class Main { public static void main(String[] args) { System.out.println("Hello Java!"); } } ``` ## Javaバージョン進化の要点 2025年時点での主流は Java 17 または 21。 | バージョン | 主な特徴 | | ---------- | ----------------------------------- | | Java 8 | Stream API, Lambda, Date/Time | | Java 11 | LTS, 新HTTP Client | | Java 17 | LTS, sealed class, record | | Java 21 | LTS, virtual thread(軽量スレッド) | ## 主要フレームワーク(現代開発) | 分野 | フレームワーク | 備考 | | --------- | ------------------- | -------------------------------- | | Webアプリ | **Spring Boot** | ほぼデファクト。DI, REST, DB統合 | | DB ORM | Hibernate / JPA | Springと併用多い | | テスト | JUnit5 | C#のxUnit/nUnitに近い | | ビルド | Maven / Gradle | 依存管理・パッケージ構築 | | クラウド | Micronaut / Quarkus | 軽量Javaランタイム対応 | ## JDKの全体図 ```plantuml @startuml title JDK / JRE / JVM の入れ子構造 skinparam shadowing false skinparam defaultFontName Noto Sans skinparam packageStyle rectangle skinparam rectangleStyle rounded rectangle "JDK(Java Development Kit)\n← 開発者用" as JDK { rectangle "JRE(Java Runtime Environment)\n← 実行環境" as JRE { rectangle "JVM(Java Virtual Machine)\n← バーチャルマシン" as JVM } } @enduml ``` ## 実際に動かしてみる ### Linux ```sh mkdir -p ~/java-play && cd ~/java-play docker run --rm -it -v "$PWD":/workspace -w /workspace eclipse-temurin:21-jdk bash ``` ### Windows ```bat mkdir java-play; cd java-play docker run --rm -it -v "${PWD}:/workspace" -w /workspace eclipse-temurin:21-jdk bas ``` ### Dockerfileを活用する場合