Java | import文の使い方

Java Java
スポンサーリンク

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して、複数クラスを使う

  • 目標: ListArrayListを使って、文字列を管理。
  • 書いてみよう:
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。
タイトルとURLをコピーしました