Kodrill

Java言語のプログラムの流れ

Java SE Bronze (1Z0-818-JPN) 試験

Javaプログラムのコンパイルと実行/Javaテクノロジーの特徴/Javaプラットフォーム各エディションの特徴

問題数
18 問
合格ライン
60%
この分野の要点を読む6 章・約 10 分。実行して確かめたコード例と、試験でよくある引っかけをまとめています

ログインなしで試す

無料の 5 問を、1問ごとに正誤と解説を見ながら解けます。解答は保存されません。

5 問を試す

無料登録して学習を記録する

学習履歴・ダッシュボード・ブックマーク・模試モードが使えます。

★ 残り 13 問はプレミアム会員限定です

無料プランでは先頭 5 問まで解けます。プレミアムなら全問題・苦手問題の復習・広告非表示が使えます。
料金プランを見る

問題と解説を見る (無料)

登録しなくても、次の5問は問題文と解説をそのまま読めます。

Java言語のプログラムの流れの要点

内容の確認日: 2026-10-03

この分野では、Java のプログラムを「書いて → コンパイルして → 実行する」までの流れと、Java という技術そのものの特徴が問われます。コードの細かい文法より、javac と java コマンドの使い分けや、JVM・JDK といった用語の意味を正確に覚えているかがポイントです。

出題項目は「Javaプログラムのコンパイルと実行」「Javaテクノロジーの特徴」「Javaプラットフォーム各エディションの特徴」の 3 つです。暗記で解ける問題が多い一方、選択肢の言い回しが紛らわしいので、なぜその答えになるのかまで理解しておきましょう。

コンパイルと実行の流れ

Java のプログラムは、ソースファイル (.java) を javac コマンドでコンパイルしてクラスファイル (.class) を作り、java コマンドで実行します。クラスファイルの中身は、特定の OS や CPU に依存しないバイトコードです。

Shell
javac Main.java   # Main.java をコンパイルして Main.class を作るjava Main         # クラス Main を実行する (.class は付けない)

javac に渡すのはファイル名 (拡張子 .java まで書く)、java に渡すのはクラス名です。java Main.class と書くと「Main.class という名前のクラス」を探してしまい、メインクラスが見つからないエラーになります。試験ではこの違いが繰り返し問われます。

パッケージに属するクラスは、java com.example.Main のようにパッケージ名を含めた完全修飾名で指定します。このとき、カレントディレクトリ (クラスパス) の下に com/example/Main.class が置かれている必要があります。

Java SE 11 からは、1 つのファイルで完結するプログラムなら、javac を使わずに java Main.java とソースファイルを直接指定して実行することもできます。この場合はメモリ上でコンパイルされ、クラスファイルは作られません。

main メソッドの条件とコマンドライン引数

java コマンドで実行を始める場所 (エントリポイント) になるのは、次の条件をすべて満たす main メソッドです。

・public である ・static である ・戻り値が void である ・String の配列を 1 つ受け取る

修飾子 public と static の順番は入れ替えても構いません。引数の名前も args である必要はなく、String... args のような可変長引数でも条件を満たします。

Main.java
public class Main {    static public void main(String[] a) {        System.out.println("static public の順でも実行できます");    }}
ターミナル
java Main
static public の順でも実行できます

java Main Java Bronze のようにクラス名の後ろに文字列を並べると、それがコマンドライン引数として main メソッドの配列に入ります。区切りは空白で、クラス名そのものは配列に含まれません。

Main.java
public class Main {    public static void main(String[] args) {        System.out.println("引数の数: " + args.length);        System.out.println("1つ目: " + args[0]);    }}
ターミナル
java Main Java Bronze
引数の数: 2
1つ目: Java

引数を渡さずに java Main と実行すると、配列は null ではなく長さ 0 の配列になります。そのため args[0] を読んだところで例外が発生します。直前の args.length の出力までは実行される点にも注意してください。

Main.java
public class Main {    public static void main(String[] args) {        System.out.println("引数の数: " + args.length);        System.out.println("1つ目: " + args[0]);    }}
ターミナル
java Main
引数の数: 0

実行時に例外が発生: ArrayIndexOutOfBoundsException

ソースファイル名とクラスのルール

public なクラスは、クラス名と同じ名前のソースファイルに書く必要があります。public class MyApp なら MyApp.java です。大文字・小文字も一致していなければならず、違うとコンパイルエラーになります。

1 つのソースファイルには複数のクラスを書けますが、public にできるのは 1 つだけです。コンパイルすると、クラスごとに別々のクラスファイルが作られます。次のコードを javac Main.java でコンパイルすると、Main.class と Greeter.class の 2 つができます。

Main.java
class Greeter {    String greet(String name) {        return "Hello, " + name;    }}​public class Main {    public static void main(String[] args) {        Greeter g = new Greeter();        System.out.println(g.greet("Java"));    }}
ターミナル
java Main
Hello, Java

Java テクノロジーの特徴

プラットフォームに依存しない: javac が作るバイトコードはどの OS でも共通で、OS ごとに用意された JVM (Java 仮想マシン) がそれを実行します。一度書いたプログラムがどこでも動くことを「Write Once, Run Anywhere」と呼びます。JVM が実行するのはソースコードではなくバイトコードです。よく使われる部分は JVM の中の JIT コンパイラがネイティブコードに変換し、高速に実行します。

JDK と JRE: JDK (Java Development Kit) は javac などの開発ツールと実行環境をまとめたもので、プログラムを作るには JDK が必要です。JRE (Java Runtime Environment) は実行に必要な JVM と標準ライブラリだけで、コンパイラは含みません。

静的型付け: 変数や引数の型はコンパイル時にチェックされ、型の誤りはプログラムを動かす前にコンパイルエラーとして見つかります。

Main.java
public class Main {    public static void main(String[] args) {        int count = "10";        System.out.println(count);    }}
ターミナル
javac Main.java

コンパイルエラー (3 行目): 文字列 (String) は int 型の変数に代入できない

ガベージコレクション: どこからも参照されなくなったオブジェクトは、JVM が自動的にメモリを解放します。C 言語の free や C++ の delete のように、プログラマがメモリを解放する命令はありません。System.gc() はガベージコレクションの実行を JVM に要求するだけで、すぐに実行される保証はありません。

オブジェクト指向だが、すべてがオブジェクトではない: int・double・boolean などのプリミティブ型の値はオブジェクトではありません。クラスの継承は 1 つのクラスからだけ (単一継承) で、複数の型を持たせたいときはインタフェースを使います。

その他: ポインタ演算がない (メモリを直接操作できない)、言語と標準 API がマルチスレッドに対応している、といった点もよく選択肢に出ます。

Java プラットフォームのエディション

Java は用途に応じて 3 つのエディションに分かれています。

・Java SE (Standard Edition): 言語仕様・JVM・基本的な標準 API (java.lang、java.util など) を含む標準のエディション。デスクトップやコマンドラインのアプリケーションなど、一般的な開発に使う ・Java EE (Enterprise Edition): Java SE に、サーブレットやデータベース連携など、Web・企業向けのサーバーサイド開発の API を追加したもの。現在は Eclipse Foundation に移管され Jakarta EE という名前になっている ・Java ME (Micro Edition): 組み込み機器や小型デバイスなど、メモリや CPU の限られた環境向け

SE がすべての土台で、EE は SE の「上に」機能を足したもの、という関係を押さえておきましょう。「EE には SE の機能が含まれない」「ME はサーバー向け」といった選択肢は誤りです。

試験でよくある引っかけ

  • java コマンドに .class を付ける

    java Main.class はエラーです。java に渡すのはファイル名ではなくクラス名なので java Main と書きます。

  • javac に拡張子を付けない

    javac Main ではコンパイルできません。javac にはソースファイル名を .java まで書きます。

  • main メソッドの修飾子の順番

    static public void main(String[] args) も正しいエントリポイントです。一方、Java SE 11 では static のない main は、コンパイルはできても java コマンドで実行できません。

  • 引数がないときの args

    引数を渡さないと args は null ではなく長さ 0 の配列です。args.length は 0 になり、args[0] で例外が発生します。

  • System.gc() で必ずメモリが解放される

    System.gc() は実行の要求にすぎません。いつガベージコレクションが動くかは JVM が決めます。

  • ファイル名とクラス名の大文字・小文字

    public class MyApp を myapp.java に書くとコンパイルエラーです。大文字・小文字まで一致させます。

問題で確認する

この分野の問題を、解説つきで読めます (登録不要)。

出典・参考

コード例は、試験の対象バージョンで実際にコンパイル・実行して結果を確認しています。