import文の使い方
Java ではあらかじめ用意されたクラスを自分のプログラムの中で利用することができます。クラスを利用するには java.util.regex.Pattern のようにクラス名にパッケージ名を加えた完全修飾名で記述する必要がありますが、あらかじめ import 宣言を行っておくことでクラス名だけで記述することができます。ここでは java における import 文の使い方について解説します。
(Last modified: )
完全修飾名を使ったクラスの利用
Java ではあらかじめ用意されたクラスや自分で作成したクラスを利用することができます。例として日付の情報を扱う LocalDate クラスを利用してみます。 LocalDate クラスで用意されているクラスメソッドである now メソッドを次のように実行してみます。
class JSample9_1{ public static void main(String[] args){ LocalDate ld = LocalDate.now(); System.out.println(ld); } }
コンパイルを行うと LocalDate について「エラー: シンボルを見つけられません」というエラーが表示されます。これは LocalDate クラスがどこにあるのかコンパイラが見つけることができないためです。
プログラムの中で同じパッケージに含まれていないクラスを利用するためには、パッケージ名を含めて記述する必要があります。 LocalDate クラスは java.time パッケージの中に含まれているので次のように java.time.LocalDate と記述します。
class JSample9_1{ public static void main(String[] args){ java.time.LocalDate ld = java.time.LocalDate.now(); System.out.println(ld); } }
今度はコンパイルの時にもエラーが出ず、プログラムの実行も正常に行うことができました。
このようにパッケージ名を含めたクラス名のことを完全修飾名といいます。
import宣言を行う
完全修飾名で記述すればクラスを利用することができますが、パッケージ名を含めた名前を毎回入力するのは大変です。そこで import 文を使用します。 import 文を使ってクラスをインポート宣言すると、パッケージ名を省略してクラス名だけでプログラムの中に記述できるようになります。
import 宣言は次のように行います。
import パッケージ名.クラス名
import 宣言はクラスの定義を行うよりも前に行ってください。
それでは先ほどのサンプルを次のように書き直してみます。
import java.time.LocalDate; class JSample9_1{ public static void main(String[] args){ LocalDate ld = LocalDate.now(); System.out.println(ld); } }
java.time パッケージの中の LocalDate クラスをインポート宣言しました。その為、 LocalDate クラスについてはクラス名だけでプログラムの中で記述することができます。今回もコンパイル時にエラーはでず、正常に実行することができました。
パッケージ名を含めたクラス名のことを完全修飾名と呼ぶのに対して、クラス名だけのことを単純名と呼びます。完全修飾名で記述すれば import 宣言は必須ではありませんが、通常は使用するクラス名を import 宣言を行ったあとで単純名でクラス名を記述します。
import宣言の記述方法
import 宣言を行う方法として、特定のクラス毎にひとつひとつ行う方法と、同じパッケージに含まれるクラスをまとめて行う方法があります。
最初に特定のクラス毎にひとつひとつ行う方法です。例えば java.util.regex パッケージに含まれる Pattern クラスと、同じく java.util.regex パッケージに含まれる Matcher クラスの import 宣言を行うには次のように記述します。
import java.util.regex.Pattern; import java.util.regex.Matcher;
次に同じパッケージに含まれるクラスをまとめて import 宣言を行うには、クラス名のところに * を記述します。
import java.util.regex.*;
この場合、 java.util.regex パッケージに含まれるすべてのクラスを import 宣言したのと同じ結果となります。
なお * を使った記述方法の場合、下層にあるパッケージは対象ではありません。例えば import java.util.* と記述した場合、 java.util パッケージの中にあるクラスは単純名で使用できますが、下層のパッケージである java.util.regex パッケージの中のクラスは単純名では記述できません。
java.langパッケージの例外
文字列を表す String クラスや、変数の値などを画面に出力するときに使用する System クラスも他のクラスと同じようにクラスです。これらのクラスは import 宣言をしていませんが単純名でプログラムの中で記述することができます。
String msg = "Hello World"; System.out.println(msg);
これは String クラスも System クラスも java.lang パッケージの中に含まれているためです。 java.lang パッケージは明示的に import 宣言を行わなくても import 宣言を行ったものとして扱われるため、 java.lang.String や java.lang.System のように記述する必要がありません。
-- --
java における import 文の使い方について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。