Javaプログラミング入門
第9回
今日の講義
• パッケージ
• ファイルとは
名前の衝突とパッケージ
• 新規でクラスを作ったとする
• そのクラスの名前は、すでに使われていないだ
ろうか?
• クラスの名前の衝突を防ぐために用意された仕
組みがパッケージ
• クラスの名前が同じであっても、パッケージが
異なっている限り、異なるクラスとして扱われ
る
publicなクラス
• パッケージの中にあるクラスは、publicとして
宣言された時だけパッケージの外からアクセス
出来る
• publicとして宣言されていないクラスは、パッ
ケージの内部にあるクラスからしかアクセス出
来ない
パッケージの利用
• java.util.Random
クラス名
パッケージ名

• パッケージ名とクラス名をドット(.)でつなげる
▫ java.util.Random r = new java.util.Random();

• パッケージ名も合わせて指定した名前のことを、
完全限定名(Fully Qualified Name)と言う
importのよるクラスの取り込み
• java.util.Randomを一々指定するのは面倒
そこで

• importを使う
▫ import java.util.Random;

• java.utilパッケージ内のクラスやインターフェー
スを複数使う場合は、以下のような書き方も出
来る
▫ import java.util.*;
java.langパッケージ
• java.langパッケージ内のpublicクラスとイン
ターフェースは自動的に取り込まれる
▫ String、System、Thread etc..
パッケージの宣言
• 自作クラスを独自パッケージに入れる場合は、
予約語packageを使う
▫ package tools;

• パッケージ宣言は、クラスやインターフェース
の宣言より前(つまり、先頭)に記述しなければ
ならない
• パッケージ宣言は1回だけすることができる
パッケージの階層
• パッケージは、ファイルシステムのように階層
を持たせることができる
▫ package tools.security;

• tools.securityをここではサブパッケージと呼ぶ
• toolsパッケージ内のpublic宣言されていないク
ラスは、tools.security内からアクセス出来ない
• パッケージはクラス階層と無関係
import宣言の*の意味
• import tools.*;
• *の部分は、「このパッケージ内のクラスとイン
ターフェースに合致」という意味
• 「このパッケージ内のサブパッケージに合致」
という意味ではない
• java.awtパッケージとjava.awt.imageパッケージ
を使いたい場合は、以下のような2つのimport
文を記述しなければならない
▫ import java.aqt*;
▫ import java.awt.image.*;
無名パッケージ
• ソースの中にpackageによるパッケージの指定が
ない時、そこで宣言されるクラスやインター
フェースは無名パッケージのメンバーになる
• 開発においては、基本的にパッケージ宣言を行
うのが慣習
アクセス制御
• パッケージの外からどのクラスが使えるのか、
またクラスの外からどのメソッドが使えるのか
制御する仕組みをアクセス制御と言う
アクセス修飾子

意味

private

自分のクラス内だけに見せる名前

なし

自分のパッケージに見せる名前

protected

パッケージだけでなく、サブクラスにも見せる
名前

public

みんなに見せる名前
よく使われるアクセス制御
-アクセッサ• クラスフィールドをprivateにし、代わりに
getter,setterを使ってフィールドにアクセスする
ようにする
private int id;
public int getId() {
retrun this.id;
}
public void setId(int id) {
this.id = id;
}
よく使われるアクセス制御-privateなコ
ンストラクタ• java.lang.Mathクラスのコンストラクタはprivateで
宣言されている
• つまり、外部からインスタンスが作れないクラス
pakage java.lang;
public class Math {
private Math() {
}
public static double sin(double th) {
...
}
...
}
ユニークなパッケージ名
• Java言語では、パッケージの名前としてユニー
クなパッケージ名を使うべきと主張している
•例
1. 自分が所属する組織用にインターネットのドメ
イン名を取得する
2. ドメイン名を逆順にする
3. できた文字列を、組織内部で定めたパッケージ
名の前にくっつける
スタティックなインポート宣言
• import staticの後にstaticフィールド名を書くと、
そのstaticフィールドを取り込むことが出来る
import static java.lang.System.out;
public class Hello [
public static void main(String[] args) {
out.println("Hello!");
}
}
staticメソッドの取り込み
• フィールドと同じく、staticなメソッドを取り込む
ことも出来る
import static java.lang.Math.max;

public class Max {
public static void main(String[] args) {
int x = 45;
int y = 100;
int z = max(x, y);
}
}
ファイルとは何か
• Macのシェルならls(Windowsのコマンドプロン
プトならdir)と打ってみると、ファイルの一覧
が表示される
• これまで書いてきたプログラムHello.lavaもファ
イルであり、コンパイル結果のHello.classも
ファイルである。そのときに動かしたJavaコン
パイラもファイルであり、コンピュータ上で何
かを作業するときにはほとんどの場合、ファイ
ルを操作している
拡張子とは
• ファイル名のうち、ピリオド(.)で区切られた一
番右端の部分
▫ index.txt

// .txtが拡張子

• 拡張子は、ファイルの種類を表す
▫ Hello.java
▫ index.php

// Java言語のファイルを表す
// PHPで記述されたファイル

• プログラム言語で記述されたファイルはテキス
トエディタで開くことが出来る
▫ eclipseもテキストエディタの一種
参考文献
• Java言語 プログラミングレッスン[第3版]下
▫ 結城浩[著]

Javaプログラミング入門【第9回】