| この記事の要点 |
|
概要
Java は、Sun Microsystems の James Gosling らが 1991 年に「Oak」という名前で開発を始め、1995 年 5 月 23 日に「Java」として正式公開された静的型付けオブジェクト指向言語です。Sun が 2010 年に Oracle に買収されて以降、現在は Oracle が管理しています。最大の特徴は「Write Once, Run Anywhere(一度書けばどこでも動く)」というスローガンに表れているとおり、JVM(Java Virtual Machine)上でバイトコードを実行することで OS 差異を吸収する点です。
ソースファイルの拡張子は .java、コンパイルすると .class という JVM バイトコードのファイルが生成され、JVM がこれを解釈・実行(または JIT コンパイル)します。複数の .class とリソース(画像・設定ファイルなど)をまとめた配布形式が .jar(Java ARchive)で、その実体は ZIP アーカイブです。unzip foo.jar で中身を取り出せます。Web アプリ向けには .war(Web ARchive)、エンタープライズ向けには .ear(Enterprise ARchive)もあり、これらもすべて ZIP ベースです。
Java の型システムには ジェネリクスがありますが、「型消去(type erasure)」方式で実装されています。これは List<String> も List<Integer> も実行時には単なる List として扱われることを意味します。後方互換性のため採用された設計ですが、new T() ができない・プリミティブ型をジェネリクスに使えないなどの制約を生んでいます。
用途は エンタープライズ Web アプリ(Spring / Spring Boot)・Android(公式は Kotlin に移行中だが既存は Java)・ビッグデータ基盤(Hadoop / Kafka / Cassandra / Elasticsearch)・金融系基幹システム など極めて幅広く、世界の Web サービスの裏側で最も多く動いている言語のひとつです。半年ごとにリリースされる現行版(OpenJDK 21 LTS, 17 LTS, 11 LTS)が広く使われています。
ファイル種類とビルド成果物
| 拡張子 | 役割 | 変換ステップ |
|---|---|---|
.java | ソースコード | 入力 |
.class | JVM バイトコード(クラスごとに 1 ファイル) | javac File.java |
.jar | 複数 .class + リソースを ZIP 圧縮した配布形式 | jar cf app.jar -C target/classes . |
.war | Web アプリ用 JAR(WEB-INF/web.xml 構造) | Tomcat 等に配置 |
.ear | エンタープライズ JAR(EJB コンテナ用) | JBoss / WildFly 等 |
MANIFEST.MF | JAR 内のメタ情報(Main-Class など) | META-INF/ 直下 |
ビルドフロー: Hello.java → javac Hello.java → Hello.class → jar cfe hello.jar Hello Hello.class → java -jar hello.jar。最終的に JVM がバイトコードを実行(JIT で機械語に変換)します。
「Hello, World」
// Hello.java
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, World");
// ジェネリクスの例
java.util.List<String> names = new java.util.ArrayList<>();
names.add("Java");
names.add("Kotlin");
for (String n : names) {
System.out.println(n);
}
}
}
$ javac Hello.java # Hello.class が生成される
$ java Hello # JVM で実行
Hello, World
# JAR にまとめる
$ jar cfe hello.jar Hello Hello.class
$ java -jar hello.jar
Hello, World
パッケージ管理・ビルドツール
Java のビルドツールは長らく Apache Maven(XML ベース pom.xml)と Gradle(Groovy / Kotlin DSL)が二大勢力で、依存は Maven Central から取得します。
<!-- pom.xml (Maven) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.2.0</version>
</dependency>
// build.gradle (Gradle / Groovy DSL)
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web:3.2.0'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
mvn clean package # Maven: ビルド + テスト + JAR 生成
mvn spring-boot:run # Spring Boot 起動
gradle build # Gradle: ビルド
gradle bootRun # Spring Boot 起動
関連言語との比較
| 項目 | Java | Kotlin | C# | Go |
|---|---|---|---|---|
| 実行環境 | JVM | JVM(および JS / Native) | .NET CLR | ネイティブ |
| Null 安全 | なし(NPE 多発) | あり(String?) | あり(string?) | nil チェック必要 |
| ジェネリクス | 型消去 | 型消去(reified 例外) | 具象化(実行時に型保持) | 1.18+ 型パラメータ |
| 記述量 | 多い(冗長) | 少ない | 中程度 | 少ない |
| Android | レガシー採用 | 公式推奨 | — | — |
注意点・落とし穴
- NullPointerException(NPE):null チェック忘れで頻発。
Optional<T>や Kotlin 移行が対策。 - 型消去によるジェネリクス制約:
new T()やT.classが書けない。Class<T>をパラメータで渡す回避策が必要。 - checked exception の伝染:
throws IOExceptionが呼び出し元に波及し、ボイラープレートが増える。 - JAR Hell / classpath 地獄:同名クラスが複数 JAR に存在するとロード順で挙動が変わる。モジュールシステム(JPMS, Java 9+)が対策だが普及途上。
- 起動時間とメモリ:JVM 起動コストが大きく、CLI 用途には不向き。GraalVM Native Image で改善可。
関連リンク
- プログラミング・スクリプト(親カテゴリ)
- ファイル拡張子とは(概論)
- プログラミング言語(カテゴリ)
- アーカイブ・圧縮形式(.jar は ZIP)
- Kotlin(.kt / .kts)
- Go(.go)
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09