ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
1. ファイル単位の構造
Java のソースは .java ファイル単位で管理されます。1 ファイルの中身は必ず次の順序です。
// 1. package 宣言 (省略可、ただし実務では必ず書く)
package com.example.demo;
// 2. import 宣言
import java.util.List;
import java.util.ArrayList;
import static java.lang.Math.PI; // static import
// 3. 型宣言 (class / interface / enum / record)
public class Hello {
// フィールド
private static final String GREETING = "Hello, World!";
// メソッド
public static void main(String[] args) {
System.out.println(GREETING);
}
}
2. ファイル名と public class 名のルール
public な型は 1 ファイルに 1 つだけ、かつファイル名と完全一致させる必要があります。
// Hello.java
public class Hello { } // ✅ ファイル名と一致
// Hello.java
public class GoodBye { } // ❌ コンパイルエラー
// class GoodBye is public, should be declared
// in a file named GoodBye.java
// 同じファイルに非 public クラスは複数置ける
public class Hello { }
class HelloHelper { } // OK (package-private)
class HelloUtil { } // OK
3. パッケージとディレクトリ
package com.example.demo はディレクトリ階層 com/example/demo/ と一致させます。これは慣習ではなく仕様です。
src/main/java/
└── com/
└── example/
└── demo/
├── Hello.java # package com.example.demo;
├── GoodBye.java
└── util/
└── DateUtil.java # package com.example.demo.util;
4. main メソッド: 実行エントリ
public static void main(String[] args) {
// public : JVM から呼べる必要がある
// static : インスタンス化前に呼ぶので static
// void : 戻り値なし
// String[]: コマンドライン引数
System.out.println("args.length = " + args.length);
for (String a : args) System.out.println(a);
}
// Java 21+ では簡略版 (preview) も登場
// void main() {
// System.out.println("simpler");
// }
5. コンパイル → 実行
# 単一ファイル
javac Hello.java # → Hello.class が生成される
java Hello # 実行 (拡張子なし)
# パッケージ付き
javac -d build src/main/java/com/example/demo/Hello.java
java -cp build com.example.demo.Hello
# Java 11+ は javac 不要で直接実行できる (シングルファイル)
java Hello.java
# 引数を渡す
java Hello arg1 arg2
6. classpath とは
JVM が .class ファイルや .jar を探しに行くパスのこと。複数指定はコロン (Unix) / セミコロン (Windows) 区切り。
# Unix
java -cp build:lib/commons-lang3.jar:lib/guava.jar com.example.demo.Hello
# Windows
java -cp build;lib\commons-lang3.jar;lib\guava.jar com.example.demo.Hello
# 環境変数でも指定可能 (実務では推奨しない)
export CLASSPATH=build:lib/*
java com.example.demo.Hello
7. 配布単位: JAR / WAR / EAR
| 形式 | 中身 | 用途 |
|---|---|---|
.jar | クラス + リソース (ZIP) | ライブラリ / 単体アプリ |
.war | Web App (WEB-INF/web.xml 等) | Tomcat 等にデプロイ |
.ear | JAR + WAR + アプリディスクリプタ | Java EE アプリサーバ用 (現代では稀) |
# 自作 JAR
jar cf hello.jar -C build .
jar cfe hello.jar com.example.demo.Hello -C build . # Main-Class 指定
java -jar hello.jar
# 中身を見る
jar tf hello.jar
8. module-info.java (Java 9+)
JPMS (Java Platform Module System)。アプリやライブラリをモジュールとして宣言できます。
// src/main/java/module-info.java
module com.example.demo {
requires java.sql; // 依存モジュール
requires transitive java.logging; // 推移的に再エクスポート
exports com.example.demo.api; // 公開パッケージ
opens com.example.demo.internal // リフレクション開放
to spring.core;
provides com.example.spi.Driver
with com.example.demo.MyDriver;
}
9. ビルドツールのディレクトリ規約
Maven / Gradle の標準ディレクトリレイアウト。手動より楽なので新規プロジェクトはツール前提。
my-app/
├── pom.xml or build.gradle(.kts)
├── src/
│ ├── main/
│ │ ├── java/ # 本体コード
│ │ │ └── com/example/demo/Hello.java
│ │ └── resources/ # 設定 (application.yml 等)
│ └── test/
│ ├── java/ # テストコード
│ │ └── com/example/demo/HelloTest.java
│ └── resources/
└── target/ or build/ # 出力先
Maven の例
<!-- pom.xml -->
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>1.0.0</version>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.14.0</version>
</dependency>
</dependencies>
</project>
10. Hello World を一行ずつ読み解く
package com.example.demo; // ← 名前空間
//
public class Hello { // ← 公開クラス (ファイル名と一致)
//
public static void main( // ← JVM が呼ぶ標準エントリ
String[] args) { // args はコマンドライン引数
//
System.out.println( // ← java.lang.System の標準出力
"Hello, World!"); // String リテラル
}
}
FAQ
Q: 1 ファイルに複数の public class を置けない理由は?
A: コンパイラがファイル名から型を引けるようにするためです。非 public なら 1 ファイルに複数置けます。
Q: package を書かないとどうなる?
A: 「無名パッケージ (default package)」になります。学習用には OK ですが、他パッケージから import できないので実務では必ず書きます。
Q: module-info.java は必須?
A: 必須ではありません。書かない場合は「unnamed module」として動きます。ライブラリ配布なら書いた方が良いです。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?