初心者入門レベルの【Javaの勉強】クラスライブラリを使いこなすためのパッケージの知識
2020/04/02
今回は、「クラスライブラリ」と「パッケージ」について勉強します。
「クラスライブラリ」と「パッケージ」とは
これまでのプログラムにおいて画面に文字列を表示する場面などで、“System”クラスといったJavaが標準で用意している様々な「クラス」を利用してきました。
こういったJavaで用意された膨大な数の「クラス」や「インタフェース」は、「クラスライブラリ」という形でまとめて提供されています。
この「クラスライブラリ」を利用する際に必要なのが。「パッケージ」という仕組みです。
「パッケージ」とは「クラスライブラリ」の中の箱のようなもので、さまざまな「クラス」や「インタフェース」が分類されて「パッケージ」でまとめられることによって、利用しやすいようになっているわけです。
「クラスライブラリ」の利用方法
「パッケージ」の例として、ウィンドウの表示やその中に文字列を表示する機能を持つ「クラスライブラリ」を利用した、以下のテストプログラムを作ってみましょう。
class TestFrame extends java.awt.Frame {
TestFrame(String title) {
super(title);
}
public void paint(java.awt.Graphics g) {
g.drawString("テスト", 100, 100);
}
}
public class TestPackage01 {
public static void main(String[] args) {
TestFrame tframe = new TestFrame("パッケージのテスト");
tframe.setSize(300, 200);
tframe.setVisible(true);
}
}
ちなみにこのプログラムを実行すると小さなウィンドウが表示されますが、実行したコマンドプロンプトで“コントロールキー”と“C”を同時に押すと閉じることができます。
さて、このプログラムで“TestFrame”の「クラス」が継承している「スーパークラス」の“Frame”が、ウィンドウを表示する機能を持っています。
“Frame”は、「クラスライブラリ」の中の“java”という「パッケージ」の中にある“awt”という「パッケージ」の中に入っているため、それを表すために次のように記述しています。
java.awt.Frame
「クラスライブラリ」の中の「クラス」を利用する際は、どこに目的の「クラス」があるのかをコンパイラに分かるようにしなければなりません。
そのため、このように「パッケージ」の名前から始めて、それぞれの「パッケージ」と「クラス」の名前をピリオドで区切って記述する必要があるわけです。
文字列を表示する“paint”の「メソッド」の、引数に記述されている“java.awt.Graphics”も同様です。
「パッケージ」の記述の省略
ただ、毎回こういった書き方をするのは面倒なので、これを省略する便利な方法もあります。
その例として、上記のプログラムを以下のように書き換えてみましょう。
import java.awt.Frame;
import java.awt.Graphics;
class TestFrame extends Frame {
TestFrame(String title) {
super(title);
}
public void paint(Graphics g) {
g.drawString("テスト", 100, 100);
}
}
public class TestPackage02 {
public static void main(String[] args) {
TestFrame tframe = new TestFrame("パッケージのテスト");
tframe.setSize(300, 200);
tframe.setVisible(true);
}
}
ここで、一番上の2行に注目してください。
このように“import”宣言で、利用する「パッケージ」をあらかじめ指定してやることによって、以降の「パッケージ」の記述を省略することができます。
また、こういった「パッケージ」の記述を省略した書き方を「単純名」と呼び、逆に「パッケージ」を省略しない書き方を「完全修飾名」と呼びます。
上記の2行の“import”文をワイルドカードを使うことで、1行にまとめて次のように記述することもできます。
import java.awt.*;
ただし、ワイルドカードでまとめることができるのは「クラス」だけになります。
その「パッケージ」の中にさらに「パッケージ」があった場合、その「パッケージ」の中にある「クラス」は省略の対象にはなりません。
つまり“A”というパッケージの中にさらに“B”というパッケージがあって、“A”の中の「クラス」と“B”の中の「クラス」を利用する場合は、次のように2つに分けて記述する必要があるわけです。
import A.*
import A.B.*
このように通常は、「クラスライブラリ」を使うときは「パッケージ」を明示する必要がありますが、その必要の無い場合もあります。
例えば“System”の「クラス」のように、よく使う「クラス」をまとめた“java.lang”という「パッケージ」については、その記述を省略できることになっています。
そのおかげで、これまで利用してきた“System.out.println”などは、“import”の宣言も無く「単純名」で記述してもエラーにならなかったわけです。
「パッケージ」によって「クラス」の名前衝突を防ぐ
この「パッケージ」の仕組みは、「クラス」の名前の衝突を防ぐために利用することもできます。
例えば大きなシステムを複数のプログラマで作る場合は、気をつけないと別々のプログラマが同じ名前の「クラス」を作ってしまうことがあるかも知れません。
そのようなときのために、各プログラマが別々の「パッケージ」を用意して、作った「クラス」をその中に入れるようにすれば、名前の衝突を防ぐことができます。
「パッケージ」の中に「クラス」を入れるには、以下のサンプルプログラムのような記述をすることで実現できます。
package sample;
public class Sample {
public void show() {
System.out.println("サンプル");
}
}
1行目にある“package”の宣言によって、この「クラス」が“sample”の「パッケージ」に属していることが明示されます。
このプログラムは、“sample”ディレクトリを作って、その中へ入れてからコンパイルしておきましょう。
次に、以下のようなテストプログラムを作ります。
class TestPackage03 {
public static void main(String[] args) {
sample.Sample smp = new sample.Sample();
smp.show();
}
}
このプログラムによって、先に作った“sample”の「パッケージ」にある“Sample”の「クラス」を呼び出すことができます。
まとめ
今回は、「クラスライブラリ」と「パッケージ」について勉強しました。
Javaのプログラミングに「クラスライブラリ」は必須ですから、それを構成する「パッケージ」の仕組みを知るのは大事なことです。
実際の「クラスライブラリ」の利用には、その都度Javaのドキュメントを調べる必要がありますが、これは慣れてくればある程度コツがつかめてきます。
最近はネットで求める「クラスライブラリ」の情報が見つかることも多いので、まめに調べてJavaの知識を身につけていくのが良いでしょうね。
それでは、今回はここまでです。
《 【Javaの勉強】一覧 》