Javaのimport文のやさしい入門
知らない場所にある道具を使うとき、住所がわからないと取りに行けませんよね。Javaでも同じで、他の「場所(パッケージ)」にあるクラスを使うときは、どこにあるかを伝える必要があります。その「場所の指定」を短くするのが import 文です。
パッケージとクラス名の関係
- パッケージ: クラスをしまっておく「フォルダ」のようなもの(例:
java.time)。 - 完全修飾名: 「パッケージ名+クラス名」を全部書くこと(例:
java.time.LocalDate)。 - import文: よく使うクラスの住所を先に宣言しておくことで、短く呼び出せる仕組み。
基本の書き方と動き方
- 特定のクラスを1つだけ使う
import java.time.LocalDate; // LocalDateの住所を宣言
public class Main {
public static void main(String[] args) {
LocalDate today = LocalDate.now(); // クラス名だけで使える
System.out.println(today);
}
}
Javaポイント: LocalDateを使うために、先に「住所」を教えておく。以降は短い名前でOK。
- 完全修飾名で毎回書く(importなし)
public class Main {
public static void main(String[] args) {
java.time.LocalDate today = java.time.LocalDate.now();
System.out.println(today);
}
}
Javaポイント: これは毎回住所を書くやり方。動くけど、長くて読みづらい。
- 同じパッケージ全体をまとめて使う(ワイルドカード)
import java.util.*; // java.util内のクラスをまとめて宣言
public class Main {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
System.out.println(fruits);
}
}
Javaポイント: java.utilにあるクラス(List, ArrayList, Randomなど)をまとめて使える。
注意: java.util.concurrentのような「下の階層の別パッケージ」は含まれない。
よくある特別ルール(覚えておくと楽)
- java.langは自動で使える
String,System,Mathなどは importなしで使える。- 例:
public class Main {
public static void main(String[] args) {
String name = "Tokyo";
System.out.println(name.toUpperCase());
}
}
Java- 同名クラスの衝突(名前がかぶる)
import java.sql.Date;
import java.util.Date; // 同じ「Date」クラス名が2つ!
public class Main {
public static void main(String[] args) {
// どっちのDateかわからなくなるので、完全修飾名で明示する
java.sql.Date sqlDate = new java.sql.Date(System.currentTimeMillis());
java.util.Date utilDate = new java.util.Date();
System.out.println(sqlDate);
System.out.println(utilDate);
}
}
Javaポイント: 名前が同じクラスが複数あるときは、混乱防止のため「完全修飾名」を使う。
練習で身につける(例題つき)
例題1: 今日の日付を表示する
- 目標:
LocalDateをimportして、今日の日付を表示。 - 書いてみよう:
import java.time.LocalDate;
public class Main {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
System.out.println("Today is " + today);
}
}
Java- 学び: 「住所を宣言→短い名前で使う」の基本形。
例題2: ランダムな数を3つ表示する
- 目標:
Randomを使って、0〜9の乱数を3回表示。 - 書いてみよう:
i
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random rand = new Random();
for (int i = 0; i < 3; i++) {
int n = rand.nextInt(10); // 0〜9
System.out.println(n);
}
}
}
Java- 学び: よく使うクラスは個別importが読みやすい。
例題3: まとめてimportして、複数クラスを使う
- 目標:
ListとArrayListを使って、文字列を管理。 - 書いてみよう:
import java.util.*;
public class Main {
public static void main(String[] args) {
List<String> cities = new ArrayList<>();
cities.add("Tokyo");
cities.add("Osaka");
cities.add("Fukuoka");
for (String city : cities) {
System.out.println(city);
}
}
}
Java- 学び: ワイルドカードは便利だけど、使いすぎると「どのクラスがどこから来たか」が見えにくくなる。
実務でのちょうどいい使い方
- 個別importが基本: 読む人に「何を使ってるか」を明確に伝えられる。
- ワイルドカードは限定的に: 多数のクラスを同パッケージから使うときだけにする。
- 衝突しそうなら完全修飾名: 保守性が上がる。
つまずきポイントと解決のコツ
- 「Cannot find symbol」エラーが出る
- 原因: import忘れ、スペルミス、パッケージ違い。
- 対策: そのクラスの「住所(パッケージ)」を確認して、正しくimportする。
- 「下位パッケージが含まれない」罠
- 例:
import java.util.*;でもjava.util.concurrentは含まれない。 - 対策: 必要なら
import java.util.concurrent.*;と別途宣言。
- 例:
まとめの指針
- 最初は個別import(1クラスずつ)で慣れる。
- 必要に応じてワイルドカードを使うが、使いすぎない。
- 同名クラスは完全修飾名でハッキリさせる。
- java.langは気にせず使ってOK。

