なんとなく使ってるimport文についてまとめます。
import文とは
import文は、異なるパッケージのクラスを使用する際に記述します。
import文を記述しなくても使用することは可能ですが、その場合は以下のようになり、コードが読みにくくなります。
// import文を使わない場合
java.util.ArrayList array = new java.util.ArrayList(5);
import文を使えば冗長せずすっきりしたコードになります。
//import文を使った場合
ArrayList array = new ArrayList(5);
import文便利そうだなと思えたかと思います。それではimport文の書き方を学んでいきましょう。
import文 構文 一覧
importをする時には、クラスをimporするだけでなくstaicなメソッドやフィールドだけをインポートすることもできます。それぞれの書き方を見てみましょう。
※package文があればそのあと、クラスを書く前に記述します。
package test;
import test.B;
class A{};
package文については以下でまとめています。
クラスをimportする 単独型
一番よく使われる書き方です。パッケージ名とクラス名をドット(.)で連結する書き方です。
import パッケージ名.クラス名;
実際に書くと以下のようになります。
import java.util.ArrayList;
「java.util」パッケージに属するArrayListクラスをimportしています。
クラスをimportする オンデマンド型
単独型と比べ、実際には推奨されていない書き方です。
import パッケージ名.*;
*(アスタリスク)は、そのパッケージにある全てのクラスをインポートするということを表します。
実際に書くと以下のようになります。
import java.util.*;
推奨されていない理由としてはオンデマンド型の場合、java.utilのパッケージに属する全てのクラスがインポートされるためです。そのためどのクラスが使用されるかがわかるづらくなるためです。
staticメソッドをimportする
staticメソッドimportの前にstaticメソッドに聞き馴染みのない方は以下も合わせて読んでいただければと思います。
staticなメソッドの構文です。
import static パッケージ.クラス名.メソッド名
サンプルコード
実際に書いてみると以下のようになります。
せっかくなのでパッケージ構造も踏まえたサンプルコードです。
■パッケージ構造
pack1
└ pack2 (pack1配下のパッケージ)
package pack2;
public class Test {
public static void disp() {
System.out.println(“Programmer-life.work”);
}
}
package pack1;
import static pack2.Test.disp;
public class Main {
public static void main(String[] args) {
disp(); // import文がない場合は 「pack2.Test.disp();」で呼出せます
}
}
staticフィールドをimportする
staticフィールドimportの前にstaticフィールドに聞き馴染みのない方は以下も合わせて読んでいただければと思います。
staticなフィールドのimportの構文です。
import static パッケージ.クラス名.メソッド名
サンプルコード
実際に書いてみると以下のようになります。
せっかくなのでパッケージ構造も踏まえたサンプルコードです。
■パッケージ構造
pack1
└ pack2 (pack1配下のパッケージ)
└ pack3 (pack1配下のパッケージ)
package pack2;
public class Test {
public static String str = “Programmer Life”;
}
package pack3;
import static pack2.Test.str;
public class Main {
public static void main(String[] args) {
System.out.println(str);
}
}
staticなオンデマンド型
staticなフィールドやメソッドをまとめて呼び出す場合は、以下のようにかくことができます。
import static パッケージ名.クラス名.*;
上記のstaticフィールドの場合、以下のように書くことができます。
import static pack2.Test.*;
staticなフィールドメソッドだけなので、クラスをnewすることはできません。
java.langパッケージついて
java.langパッケージはimport文を書かなくてもコンパイラが勝手にimportをしてくれるためimport文を書く必要はありません。
(java.langパッケージはString, Booleanなどよく使うものが入っているクラスです。)
おわり
メソッドのインポートやフィールドのインポートについてもまとまっているサイトが見つけられなかったので、自分なりにまとめてみました。
パッケージ.クラス名という書き方がすべてパッケージで書かれていると勘違いして沼にはまりましたがすっきりしました。