Kodrill

Java の概要と簡単なJavaプログラムの作成

Java SE 17 Silver (1Z0-825-JPN) 試験

main メソッドを持つプログラム/コマンドラインでのコンパイルと実行/パッケージ宣言とインポート

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

ログインなしで試す

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

5 問を試す

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

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

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

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

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

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

Java の概要と簡単なJavaプログラムの作成の要点

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

この分野では、Java のプログラムを作って動かすための「入口」まわりの知識が問われます。Bronze と重なる内容もありますが、Silver では javac と java のオプション (-d・-cp)、ソースファイルモード、import が衝突したときの扱いなど、一歩踏み込んだ知識が必要です。

出題項目は「main メソッドを持つ実行可能な Java プログラムの作成」「コマンドラインでの Java プログラムのコンパイルと実行」「パッケージの使用 (パッケージ宣言とインポート)」の 3 つです。

main メソッドの条件

java コマンドがプログラムの実行を始めるエントリポイントは、public static void main(String[] args) の形のメソッドです。次の書き方も、すべて正しいエントリポイントになります。

・static public void main(String[] args) (修飾子の順番は自由) ・public static void main(String... args) (可変長引数) ・public static final void main(String[] a) (final を付けてもよい。引数名も自由) ・public static void main(String args[]) (配列の [] を変数名の後ろに書く)

一方、private を付けた main、static のない main、戻り値が int の main などもコンパイルは通りますが、Java SE 17 の java コマンドはエントリポイントとして認めず、実行時にエラーになります。「コンパイルエラー」と「実行時のエラー」を区別して覚えましょう。

main という名前でも、引数が違えば普通のメソッドとしてオーバーロードできます。java コマンドが最初に呼ぶのは、String 配列を受け取る main だけです。

Main.java
public class Main {    public static void main(String... args) {        System.out.println("main(String...)");        main(5);    }​    static void main(int n) {        System.out.println("main(int): " + n);    }}
ターミナル
java Main
main(String...)
main(int): 5

コマンドライン引数は、クラス名の後ろに空白で区切って書いた値が、String の配列として渡されます。引数を付けずに実行した場合は、null ではなく要素数 0 の配列が渡されます。

Main.java
public class Main {    public static void main(String[] args) {        System.out.println(args.length);        for (String a : args) {            System.out.println(a.toUpperCase());        }    }}
ターミナル
java Main silver gold
2
SILVER
GOLD

javac と java のオプション

javac の -d オプションは、クラスファイルの出力先を指定します。パッケージに属するクラスは、出力先の下にパッケージの階層どおりのディレクトリが作られて、そこに置かれます。ソースファイルがどのディレクトリにあるかは関係ありません。

Shell
# src/Main.java の先頭に package com.example.app; と書いてある場合javac -d classes src/Main.java# → classes/com/example/app/Main.class が作られる​java -cp classes com.example.app.Main

-cp (-classpath・--class-path も同じ意味) は、クラスファイルや JAR ファイルを探す場所 (クラスパス) を指定するオプションで、javac と java のどちらでも使えます。複数指定するときの区切りは、macOS・Linux では :、Windows では ; です。java に渡すのは、ディレクトリのパスではなく完全修飾名 (com.example.app.Main) です。

Java SE 11 からは、1 つのソースファイルで完結するプログラムを java Main.java のように直接実行できます (ソースファイルモード)。このモードでは、ソースはメモリ上でコンパイルされ、クラスファイルは作られません。ファイルに複数のクラスがある場合は、ファイルの最初に書かれたクラスの main が実行されます。ファイル名とクラス名が一致している必要もありません。

パッケージ宣言

package 宣言は、ソースファイルの最初の文として 1 つだけ書けます。その前にはコメントと空行しか書けません。import 文は package 宣言の後、クラス宣言の前に書きます。

Main.java
// コメントは package より前に書いてもよいpackage com.example.app;​import java.util.List;​public class Main {}

package 宣言のないクラスは、名前のない無名パッケージに属します。無名パッケージのクラスは、名前付きパッケージのクラスから import できません。

import の種類と優先順位

import には、クラス名まで書く単一型インポート (import java.util.List;) と、* でパッケージ内のクラスをまとめて使えるようにするオンデマンド・インポート (import java.util.*;) があります。* で使えるようになるのは、そのパッケージ直下のクラスだけで、サブパッケージ (java.util.function など) のクラスは含まれません。

java.lang パッケージ (String・Math・Integer・System など) と、自分と同じパッケージのクラスは、import なしで使えます。また、import はクラス名を短く書くための仕組みにすぎないので、java.util.List のように完全修飾名で書けば import は要りません。

同じ名前のクラスが複数のパッケージにある場合は注意が必要です。例えば Date は java.util と java.sql の両方にあります。両方をオンデマンド・インポートして Date と書くと、どちらか決められずコンパイルエラーになります。

Main.java
import java.util.*;import java.sql.*;​public class Main {    public static void main(String[] args) {        Date d = null;        System.out.println(d);    }}
ターミナル
javac Main.java

コンパイルエラー (6 行目): Date が java.util と java.sql のどちらのクラスか決まらない

このとき、どちらかを単一型インポートで指定すると解決します。単一型インポートはオンデマンド・インポートより優先されるためです。

Main.java
import java.util.*;import java.sql.*;import java.util.Date;​public class Main {    public static void main(String[] args) {        Date d = new Date(0);        System.out.println(d.getClass().getName());    }}
ターミナル
java Main
java.util.Date

import static を使うと、クラスの static なメンバーを、クラス名を付けずに使えるようになります (static インポート)。import static java.lang.Math.*; のように * でまとめて指定することもできます。

Main.java
import static java.lang.Math.max;​public class Main {    public static void main(String[] args) {        System.out.println(max(3, 7));    }}
ターミナル
java Main
7

試験でよくある引っかけ

  • コンパイルできても実行できない main

    private や static なしの main はコンパイルは通りますが、java コマンドで実行するとエラーになります。

  • 引数なしの args

    引数を付けずに実行しても args は null ではなく要素数 0 の配列です。

  • -d の出力先

    -d classes を付けると、パッケージの階層に合わせて classes/com/example/... にクラスファイルが作られます。ソースファイルの場所は関係ありません。

  • ソースファイルモードで実行されるクラス

    java Main.java で実行されるのは、ファイルの最初に書かれたクラスの main です。

  • オンデマンド・インポートの範囲

    import java.util.*; では java.util.function.Function などサブパッケージのクラスは使えません。

  • 同じ名前のクラスのインポート

    java.util.* と java.sql.* の両方で Date を使うとコンパイルエラーです。単一型インポートを追加すると、そちらが優先されます。

問題で確認する

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

出典・参考

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