・   「Java入門」実習 第5回

5: アクセス制御と Jarファイル

パッケージの定義がある場合のアクセス制御について調べてみましょう。 Jar形式のアーカイブファイルの取り扱いも練習します。


・ 準備1:
今日の実習には、複数のディレクトリでの作業が必要となります。 通常の作業ディレクトリの下に、 下記のような構造を用意しておきなさい。


-- ~ -+- accesstest
      +- accesstest2
      +- accesstest3
      +- test

・ 準備2:
今日の実習には、環境変数 CLASSPATHの明示的な設定が必要となります。 作業ディレクトリとカレントディレクトリを 次のようにしてクラスパスに設定しておきなさい。 (この設定は、作業する端末エミュレータのウィンドウごとに必要です。)


CLASSPATH=~/java:. ;  export CLASSPATH       #UNIXのbシェル系の場合

set CLASSPATH=Z:\java;.                      #Windowsの場合


・ 基本課題1:「クラスによるアクセス制御」
privateによるアクセス制御の確認を行います。

  1. javaの作業ディレクトリの下に直接ソースファイル AccessTest.javaAccessedData.java を作成しなさい(教科書 P.86)。
  2. AccessTest.javaのコンパイルを試みなさい(エラーが出て失敗します)。
  3. エラーが何個出たか後で報告してもらいます。 メールで送れるように記録しておくこと。

・ 基本課題2:「パッケージによるアクセス制御」
同じパッケージ内でのアクセス制御の確認を行います。

  1. ディレクトリ accesstestの下に移動しなさい。その中に AccessTest.javaAccessedData.java を作成しなさい(教科書 P.88,89)。
  2. AccessTest.javaのコンパイルを試みなさい(エラーが出て失敗します)。
  3. エラーが何個出たか後で報告してもらいます。 メールで送れるように記録しておくこと。

・ 基本課題3:「パッケージによるアクセス制御(2)」
異なるパッケージからのアクセス制御の確認を行います。

  1. ディレクトリ accesstest2の下に移動しなさい。その中に AccessTest.java を作成しなさい(教科書 P.89)。
  2. AccessTest.javaのコンパイルを試みなさい(エラーが出て失敗します)。
  3. エラーが何個出たか後で報告してもらいます。 メールで送れるように記録しておくこと。

・ 基本課題4:「継承によるアクセス制御」
protectedによるアクセス制御の確認を行います。

  1. ディレクトリ accesstest3の下に移動しなさい。その中に AccessTest.java を作成しなさい(教科書 P.90,91)。
  2. AccessTest.javaのコンパイルを試みなさい(エラーが出て失敗します)。
  3. エラーが何個出たか後で報告してもらいます。 メールで送れるように記録しておくこと。

・ 基本課題5:「Jarアーカイブの利用」
バイトコードを Jarアーカイブにまとめて利用する練習をします。

  1. ディレクトリ testの下に移動しなさい。
  2. サンプルソース Test1.javaTest2.java を作成し、それぞれコンパイルしなさい。
  3. それぞれの実行を行ない、メッセージの表示を確認しなさい。
  4. 上のディレクトリ(~/java)に戻りなさい。
  5. testディレクトリ内のバイトコードを Jarファイルにまとめなさい。
  6. testディレクトリ内のバイトコードを消去しなさい。
  7. CLASSPATHの値に test.jar も追加して登録しなさい。
  8. 消去後もプログラムが実行可能であることを確認しなさい。
  9. test.jar のファイルを消去しなさい。
  10. その後プログラムの実行を試みても実行できないことを確認しなさい。

*最初の実行からの一連の手順をまとめると以下のようになります。 (環境は UNIXとした場合。Winodwsの場合はディレクトリの区切り文字を \としてください。)


java  test.Test1
java  test.Test2
cd  ..
jar  cvf  test.jar  test/*.class
rm  test/*.class
CLASSPATH=~/java:.:test.jar
export CLASSPATH
java  test.Test1
java  test.Test2
rm  test.jar
java  test.Test1
java  test.Test2


・ レポート課題:
ここまでの課題が終わった人は、下記の項目を tatsuo宛のメール で報告しなさい。(Subjectは java5)

  1. 課題1のコンパイルで表示されたエラーの個数とその原因 (たとえば「クラス AccessedTestのフィールド pubのアクセス制御が publicのため」 というように説明してください。)
  2. 課題2のコンパイルで表示されたエラーの個数とその原因
  3. 課題3のコンパイルで表示されたエラーの個数とその原因
  4. 課題4のコンパイルで表示されたエラーの個数とその原因

・ 応用課題1:「innerクラスのアクセス制御」
innerクラスおよびそのメンバに対するアクセス制御の確認を行います。

  1. ディレクトリ ~/java に戻って作業してください。
    ソースファイル InnerAccessTest.java を作成しなさい(教科書 P.92)。
  2. InnerAccessTest.javaは問題なく コンパイルできることを確認しなさい。

・ 応用課題2:「innerクラスのアクセス制御(2)」
innerクラスおよびそのメンバに対するアクセス制御の確認を行います。

  1. ソースファイル InnerAccessTest2.java を作成しなさい(教科書 P.93)。
  2. InnerAccessTest2.javaは コンパイル時にエラーとなります。 どの行のどの部分がアクセス制御のルールに違反しているのかを確認しなさい。

実習の目次   今週の講義の内容