Javaの実案件に必須のパッケージとインポートを知る:【改訂版】Eclipseではじめるプログラミング(10)(3/3 ページ)
これからプログラミングを学習したい方、Javaは難しそうでとっつきづらいという方のためのJavaプログラミング超入門連載です。最新のEclipse 3.4とJava 6を使い大幅に情報量を増やした、連載「Eclipseではじめるプログラミング」の改訂版となります
importには、「オンデマンドインポート」もある
ここまで説明したimport文は、「単一型インポート」と呼ばれるもので、1つのクラスやインターフェイスをインポートする場合に使うものでした。同じパッケージに含まれる複数のクラスをインポートしたい場合には、「オンデマンドインポート」を使います。この方法では、具体的な型を指定する代わりに「*」を指定します。これにより、指定したパッケージに含まれるクラスについて、パッケージ名を省略できるようになります。
クラスがどのパッケージか判断しにくくなる
ただし、オンデマンドインポートをすると、使用している各クラスがどのパッケージのものか判断しにくくなるので、実際の開発現場ではあまり使われませんが、ちょっとした動作確認したいサンプルコードを書く場合などには重宝するので、覚えておきましょう。
import java.util.*;
オンデマンドインポートはパッケージ単位で
この指定は、パッケージ単位で行う必要があります。例えば、Javaには、java.utilパッケージとjava.util.concurrentパッケージというパッケージがあります。パッケージ名からすると、java.util.concurrentパッケージに含まれるクラスは、java.utilパッケージに含まれそうな気もしますが、別のパッケージなので、オンデマンドインポートをするときは、次のように別々に指定が必要です。
import java.util.*; import java.util.concurrent.*;
試しに、java.utilパッケージのクラスであるjava.util.LinkedListクラスと、「java.util.concurrent」パッケージのクラスである「java.util.concurrent.LinkedBlockingDeque」を使うクラスを作成してみましょう。使うといっても、クラスを参照するだけです。
package sample; import java.util.*; public class ImportSample { LinkedList list = new LinkedList(); LinkedBlockingDeque e = new LinkedBlockingDeque(); }
LinkedListクラスの方は、オンデマンドインポートによりクラス名だけで利用できるようになっていますが、LinkedBlockingDequeクラスの方はパッケージが分からないため、エラーとなるはずです。次のように直すことにより、エラーは消えます。
package sample; import java.util.*; import java.util.concurrent.*; public class ImportSample { LinkedList list = new LinkedList(); LinkedBlockingDeque e = new LinkedBlockingDeque(); }
オンデマンドインポートを使ったらエラーになる?
また、次のようなクラスも作成してみましょう。エラーが出ますが、なぜでしょう。
package sample; import java.awt.*; import java.util.*; public class ImportListSample { List list; }
これは、java.utilパッケージにもjava.awtパッケージにも「List」という名前の型が含まれているために問題が発生しているのです。java.util.Listとjava.awt.Listという型の両方を同時に使いたい場合は、パッケージ名も含めて指定する必要があります。
package sample; public class ImportListSample { java.awt.List awtList; java.util.List utilList; }
パッケージ名は、どのように付けるべきか
パッケージ名は、文字で始まり、その後に文字か数字を続けます。文字は「aからz」「AからZ」「アンダーバー(_)」のどれかです。実は「ドル($)」も使えますが、ちょっと特殊なので自分で作成するパッケージでは使いません。なお、予約語やリテラル値になるものは使えません。
インターネットのドメイン名を逆にしたものがよく使われる
パッケージ名の付け方としては、小文字で、インターネットのドメイン名を逆にしたものがよく使われます。例えば「atmarkit.co.jp」ドメインで利用するWebアプリケーションを作成する場合は、パッケージ名としてjp.co.atmarkitを採用すればよいということになります。
ちなみに、ドメイン名ではハイフン(-)が使われることがありますが、これはJavaのパッケージ名としては使えないので「アンダーバー(_)」に置き換えます。
もしも、パッケージという概念がなかったら
例えば、「jp.co.atmarkit.Main」というプログラムを開発していたとしましょう。jp.co.atmarkit.Mainクラスでは、「jp.co.atmarkit.List」というクラスをインポートしていて、プログラム中ではListと書いたら、jp.co.atmarkit.Listのことになるようにしていました。ここへほかの人が開発した「org.sssg」パッケージのListクラスを利用することになったとしましょう。
パッケージという概念がなかったら、どうなるでしょうか。自分が開発したプログラムの名前がListで、ほかの人が開発したプログラムの名前がListだったとします。あるプログラム内で両方とも使いたい場合は、どちらかの名前を変更しないと利用できません。
しかし、Javaではパッケージという概念があるので、そんなことをしなくても、パッケージ名を含む名前で型を指定することにより、プログラムの名前をどちらも変更することなく利用できるのです。
共用できるフィールドやメソッドを作成できる「static」
今回は、パッケージについて解説をしました。パッケージは実用的なプログラムを作成するときには必ず使用するので、よく意味を理解しておきましょう。さらに、代表的なパッケージについて覚えておくと応用的なプログラムを作成するときに利用できそうなクラスを効率良く探すことができるようになります。
パッケージに含まれるクラスを利用するためにはimport文を使うことも説明しました。インポートでは、クラス名やインターフェイス名を指定する単一型インポートを使うのが基本です。ただし、オンデマンドインポートという方法で、パッケージに含まれる複数のクラスも簡単に利用できます。入門レベルではパッケージを使うことは少ないかもしれませんが、実際の開発では必ず使いますから、import文も必ず出てきます。よく覚えておきましょう。
実は、import文には「staticインポート」というものもありますが、今回は説明をしませんでした。「static」というキーワードに関する文法がいくつかあるので、それについて理解してからの方が分かりやすいからです。ということで、次回は、クラスで共用できるフィールドやメソッドを作成できるstaticキーワードについて説明をする予定です。
今回作ったサンプルのソースコードはこちらからダウンロードできます。
筆者紹介
小山博史(こやま ひろし)
情報家電、コンピュータと教育の研究に従事する傍ら、オープンソースソフトウェア、Java技術の普及のための活動を行っている。長野県の地域コミュニティである、SSS(G)やbugs(J)の活動へも参加している。
著書に「基礎Java」(インプレス)、共著に「Javaコレクションフレームワーク」(ソフトバンククリエイティブ)、そのほかに雑誌執筆多数。
- Javaの例外処理で知らないと損する7つのテクニック
- プログラマの宿命! 例外とエラー処理を理解する
- いまさら聞けない「Javadoc」と「アノテーション」入門
- 7ステップで理解するJavaでの列挙型/enum使用法
- 拡張for文の真の実力を知り、反復処理を使いこなせ
- キュー構造をJavaで実装してジェネリック型を理解する
- 強く型付けされているJavaの理解に必修の“型変換”
- あなたの知らない、4つのマニアックなJava文法
- “ネスト”した型で始める軽量Javaプログラミング!?
- Javaは「抽象クラス」で実装を上手に再利用できる
- 再利用性の高いクラス作成に重要な“アクセス制御”
- “コンストラクタ”と初期化、本当に理解できてる?
- 継承やオーバーライドで簡単にクラスを“拡張”しよう
- 「static」でクラス共有の変数・メソッドを使いこなせ!
- Javaの実案件に必須のパッケージとインポートを知る
- プログラムを「変更」しやすくする“インターフェイス”
- Javaの参照型を文字列操作で理解して文法を総復習
- クラスの振る舞いを表すJavaの“メソッド”とは?
- 複雑なデータを表現できるクラスやフィールドって?
- データ集合を扱うのに便利なJavaの配列と拡張for文
- プログラミングの真骨頂! Javaで“反復処理”を覚える
- プログラミングの醍醐味! Javaで“条件式”を理解する
- Javaで一から理解するプログラムの変数と演算子
- Eclipse 3.4で超簡単Javaプログラミング基礎入門
Copyright © ITmedia, Inc. All Rights Reserved.