インポート文で他のパッケージのクラスを使う

docs

パッケージって何だっけ?

前回の記事で、Javaのクラスを整理するためにパッケージがあるって話をしたよね。ちょうどファイルやフォルダみたいなもので、関係するクラスをまとめて管理する仕組みだった。

前回の記事はこちらから読めるよ。

Javaクラス整理術:パッケージを使いこなそう | ToolDocs

今回は、そのパッケージをまたいだクラスの利用方法、つまりインポート文について見ていこう。

「インポート」ってどういうこと?

例えば、君が「道具箱A」に「ドライバー」と「ペンチ」を入れていたとする。別の日に「道具箱B」で作業をしていたら、急にドライバーが必要になった! 道具箱Aまで取りに行くのは面倒だし、使いたい場所から「ドライバー、こっち来て!」って呼び出せたら便利だよね?

Javaの世界でも全く同じことが起きるんだ。自分が今書いているクラス(作業している場所)とは別のパッケージにあるクラス(別の道具箱にある道具)を使いたい時、「そのクラス、ここで使わせてね!」って宣言するのがインポート文なんだ。

インポート文がないと、Javaは「え、そのクラスってどこにあるの?」って迷子になっちゃう。だから、使う前にきちんと「あそこのパッケージにある、あのクラスだよ」って教えてあげる必要があるんだ。

インポート文の書き方

インポート文は、いつも書くpackage宣言のすぐ下に書くよ。

Java

package com.example.myapp; // あなたのパッケージ宣言

import com.example.library.MyUtility; // ここがインポート文!

public class MyMainClass {
    public static void main(String[] args) {
        // ここにコードを書く
    }
}

基本の形はこれだけ。importの後に、使いたいクラスが属しているパッケージ名クラス名.(ドット)でつなげて書くんだ。

どんな時に使うの?具体例を見てみよう!

Javaには、僕たちがよく使う便利な機能がたくさん詰まったクラスが、あらかじめたくさんのパッケージに分類されて用意されているんだ。これを標準ライブラリと呼ぶよ。

例えば、キーボードから何かを入力したい時や、日付を扱いたい時、リストを作りたい時なんかに、標準ライブラリのクラスを使うことになる。

例1:キーボードから入力したい!Scannerクラス

前に一度出てきたかもしれないけど、キーボードから文字を読み込むにはScannerというクラスを使うのが一般的だよ。このScannerクラスは、java.utilというパッケージに入っているんだ。

インポート文がないと、こんなエラーになっちゃう。

Java

// インポート文なし
public class InputExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // エラー!
        System.out.println("名前を入力してください:");
        String name = scanner.nextLine();
        System.out.println("こんにちは、" + name + "さん!");
        scanner.close();
    }
}

このコードを実行すると、「Scannerが見つからないよ!」って怒られるはず。そこで、Scannerクラスの居場所を教えてあげるのがインポート文だ。

paizaで実行した結果

Java

import java.util.Scanner; // ★ここがポイント!

public class InputExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in); // エラーが出なくなる!
        System.out.println("名前を入力してください:");
        String name = scanner.nextLine();
        System.out.println("こんにちは、" + name + "さん!");
        scanner.close();
    }
}

これで無事にScannerクラスを使えるようになったね!

paizaで実行した結果

例2:今日の日付を知りたい!LocalDateクラス

「今日って何月何日だっけ?」ってプログラムに聞きたい時もあるよね。そんな時に便利なのがLocalDateクラスだ。このクラスもjava.timeというパッケージに入っているんだ。

Java

import java.time.LocalDate; // ★ここがポイント!

public class DateExample {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now(); // 今日の日付を取得
        System.out.println("今日は " + today + " です。");
    }
}

インポート文のおかげで、簡単に今日の日付を取得して表示できたね。

paizaで実行した結果

例3:たくさんのデータをまとめて管理したい!ArrayListクラス

もし、色々な人の名前をたくさんリストで管理したい、なんて時があればどうする? そんな時に便利なのがArrayListというクラスだ。これもjava.utilパッケージに入っているよ。

Java

import java.util.ArrayList; // ★ここがポイント!
import java.util.List;     // ★これも便利なので一緒にインポート!

public class ListExample {
    public static void main(String[] args) {
        // String型のデータを入れられるArrayListを作る
        List<String> names = new ArrayList<>();

        names.add("アリス");
        names.add("ボブ");
        names.add("チャーリー");

        System.out.println("登録されている名前:");
        for (String name : names) {
            System.out.println(name);
        }
    }
}

この例ではArrayListListをインポートしているけど、ListArrayListの親戚みたいなもの(インターフェースって言うんだけど、今は「そういうものか」でOK)で、一緒に使うことが多いから覚えておくといいよ。

paizaで実行した結果

*(アスタリスク)でまとめてインポート

もし同じパッケージから複数のクラスを使いたい場合、いちいち全部書くのが面倒だなって思うよね? そんな時に便利なのが、*(アスタリスク)を使ったワイルドカードインポートだ。

例えば、java.utilパッケージからScannerArrayListも使いたい時、こう書けるよ。

Java

import java.util.Scanner;
import java.util.ArrayList;
import java.util.List; // これは別のインポート文が必要

これをまとめて書くとこうなる。

Java

import java.util.*; // java.utilパッケージの全てのクラスをインポート!

public class WildcardImportExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("メッセージを入力してください:");
        String message = scanner.nextLine();
        System.out.println("入力されたメッセージ: " + message);
        scanner.close();

        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("りんご");
        fruits.add("バナナ");
        System.out.println("フルーツリスト: " + fruits);
    }
}

これならスッキリするよね! ただし、*を使うのは、そのパッケージの全てのクラスをインポートすることになるから、使わないクラスまで読み込んでしまって、かえってコードが分かりにくくなることもある。基本的には必要なクラスだけを個別にインポートするのが推奨されているよ。

paizaで実行した結果

自分で作ったクラスをインポートする

もちろん、標準ライブラリのクラスだけでなく、自分で作った別のパッケージのクラスもインポートできるよ。

例えば、com.mycompany.modelsパッケージにUserというクラスを作ったとする。

ファイル名: User.java

Java

// com/mycompany/models/User.java
package com.mycompany.models;

public class User {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void displayUserInfo() {
        System.out.println("名前: " + name + ", 年齢: " + age);
    }
}

このUserクラスを、com.mycompany.appパッケージにあるMainAppクラスで使いたい場合。

ファイル名: MainApp.java

Java

// com/mycompany/app/MainApp.java
package com.mycompany.app;

import com.mycompany.models.User; // ★自分で作ったクラスもインポート!

public class MainApp {
    public static void main(String[] args) {
        User user1 = new User("田中", 30);
        user1.displayUserInfo();

        User user2 = new User("佐藤", 25);
        user2.displayUserInfo();
    }
}

これで、パッケージをまたいで自分の作ったクラスも使えるようになったね!

まとめ

インポート文は、Javaで他のパッケージにあるクラスを利用するための「おまじない」のようなもの。

  • package宣言のすぐ下に書く。
  • import パッケージ名.クラス名; の形で書く。
  • java.util.Scanner; のように、Javaが用意してくれている便利なクラスを使うときによく使う。
  • 同じパッケージから複数のクラスを使いたい場合は、import パッケージ名.*; とまとめてインポートすることもできるけど、必要なものだけ個別にインポートするのがオススメだよ。
  • もちろん、自分で作った別のパッケージのクラスもインポートして使える。

インポート文を理解すると、Javaの標準ライブラリや他の人が作った便利なクラスを自分のプログラムで活用できるようになるから、開発の幅がぐっと広がるはず!

コメント

タイトルとURLをコピーしました