ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
概要
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=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?