【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷




―Javaプログラミングの前提知識―

前田俊行
2001/7/13
Javaプログラミング
ワンポイントレクチャーについて

   パッケージを理解し利用する

今回の内容
パッケージの作り方、使い方
パッケージの構造とディレクトリ

 パッケージとはいくつかのクラスをまとめたものです。主に3つの目的で使われます。

  1. クラスの分類
  2. クラス名の衝突を防ぐ
  3. アクセス制御を行う

(1)クラスの分類
 クラスが大量に存在すると、プログラマーは必要なクラスを見つけにくくなります。そこで、互いに関連するクラス同士をパッケージとしてまとめることによって、必要なクラスを簡単に探し出せるようにします。例えば、Javaの標準クラスライブラリでは、ファイルの読み書きなどのためのクラスはパッケージjava.ioに、ネットワーク関連のクラスはパッケージjava.netに、というように機能別に分かりやすくまとめてあります。

(2)クラス名の衝突を防ぐ
 Java VMは名前をもとにしてクラスを読み込むため、同じ名前のクラスが複数存在すると、間違ったクラスを読み込んでしまい、エラーが起きる可能性があります。そのため、プログラマーは作成するクラスの名前がほかのクラスの名前と同じにならないように気を付けなければなりません。

 しかし、クラスの名前が衝突しないようにするのは困難です。クラスの名前を長くすれば、衝突を防ぐことができるかもしれませんが、その代わりコーディング作業が面倒になります。そこで、プログラマー、特にクラスライブラリを作成するプログラマーは、クラスをパッケージとしてまとめます。そしてパッケージの名前がほかのパッケージの名前と異なるようにします。結局、名前が衝突しないように気を付けなければなりませんが、パッケージの名前はクラスの名前に比べればプログラム中に現れる回数は少ないので、パッケージ名を長くしてもプログラマーの負担は重くなりません。

(3)アクセス制御を行う
 パッケージを利用することで、同じパッケージ中のクラスからはアクセスできるが、ほかのパッケージ中のクラスからはアクセスできないようなメソッドやメンバ変数を定義したり、ほかのパッケージからアクセスできないようなクラスを作成したりすることができます。

 パッケージの作り方、使い方

 クラスをパッケージの中に入れるには、そのクラスのソースファイルの先頭で、キーワードpackageを用いてパッケージを指定します。例えば、クラスCarをパッケージjp.co.atmarkit.fjava.vehicleの中に入れるなら、ソースファイルCar.javaの先頭で以下のように書きます。

package jp.co.atmarkit.fjava.vehicle;

 ほかのパッケージ中のクラスからこのクラスCarを参照するには、パッケージ名を含めてクラス名を指定しなければなりません。例えば、ほかのパッケージ中のクラスでクラスCarのオブジェクトを生成するには以下のようにします。

jp.co.atmarkit.fjava.vehicle.Car car = new jp.co.atmarkit.fjava.vehicle.Car();

 しかし、上のようにパッケージ名を指定してクラスを参照するのは面倒です。そこで、キーワードimportを用いると、パッケージ名の指定を省略することができます。例えば、パッケージ名jp.co.atmarkit.fjava.vehiclerを省略したいなら、そのクラスを参照しようとしているクラスのソースファイルの先頭で以下のように書きます。

import jp.co.atmarkit.fjava.vehicle.Car;

 すると、そのソースファイル内では以下のようにパッケージ名を省略してクラスCarを参照することができます。

Car car = new Car();

 ちなみに、同じパッケージ中のクラスから参照する場合には、import文で指定しなくてもパッケージ名を省略することができます。さらに、パッケージjava.lang中のクラスを参照する場合も、importで指定しなくてもパッケージ名を省略することができます。

 上の例のimport文では、パッケージ中の1つのクラスを指定しましたが、パッケージ中のすべてのクラスをまとめて指定することもできます。例えば、パッケージjp.co.atmarkit.fjava.vehicle中のすべてのクラスをパッケージ名を省略して参照したいときは、以下のように書きます。

import jp.co.atmarkit.fjava.vehicle.*;

 さらに、import文は複数指定することもできます。例えば、パッケージjp.co.atmarkit.fjava.vehicle中のすべてのクラスとパッケージjava.io中のすべてのクラスを、パッケージ名を省略して参照したいときは以下のように書きます。

import jp.co.atmarkit.fjava.vehicle.*;
import java.io.*;

 ちなみにimport文を指定すると、クラス名の衝突が起きる場合があります。この場合、名前が衝突しているクラスを参照することはできません。

 例えば、パッケージjp.co.atmarkit.fjava.vehicleとパッケージjava.ioの両方に、クラスNotActiveExceptionが存在するときに、以下のようにまとめてimport文を指定すると、コンパイラはどちらのパッケージ中のクラスを参照しているのか分からないため、コンパイルエラーとなります。

import jp.co.atmarkit.fjava.vehicle.*;
import java.io.*;

 このときは、以下のように1つのクラスだけを指定するimport文を加えます。

import jp.co.atmarkit.fjava.vehicle.*;
import java.io.*;
import jp.co.atmarkit.fjava.vehicle.NotActiveException;

 ただし、この場合、パッケージ名を省略できるのは、パッケージjp.co.atmarkit.fjava.vehicle中のクラスNotActiveExceptionだけです。パッケージjava.io中のクラスNotActiveExceptionを参照するには、パッケージ名java.ioを指定しなければなりません。

 パッケージの構造とディレクトリ

 パッケージの構造とディレクトリは一致させなければなりません。一致していない場合、Java VMはクラスを見つけることができず、エラーが起きます。

 例えば、パッケージjp.co.atmarkit.fjava中にクラスExampleを定義したときには、パッケージ名を、記号"."で区切られたディレクトリ階層であると見なして、クラスパスの通っているディレクトリ下のディレクトリjp\co\atmarkit\fjavaにクラスファイルExample.classを置かなければなりません。仮にクラスパスをC:\classesと指定したならば、ディレクトリC:\classes\jp\co\atmarkit\fjava\中にクラスファイルExample.classを置きます。

 またJava VMを実行するときは、パッケージ名を省略することはできません。例えば、パッケージjp.co.atmarkit.fjava中のクラスExampleを実行するには、以下のようにします。

java jp.co.atmarkit.fjava.Example


 

Javaプログラミング・ワンポイントレクチャー INDEX



ホワイトペーパーTechTargetジャパン

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています