・   「Java言語」実習 第14回

Javaのシステムとオブジェクト

java.lang,java.lang.reflect,java.lang.ref パッケージの機能を用いて、 Javaのシステムやオブジェクトをコントロールするサンプルを紹介します。


・ 準備(学内向け):
各自のJavaの課題の作業用のディレクトリ ~/www/java に移動しなさいなさい。 その中で以下の作業を行いなさい。


・ 基本課題1:「オブジェクトの参照の切り替え」

  1. ソースファイル RefTest.java を作成しなさい。
  2. コンパイルして実行し、結果を確認しなさい。

・ 基本課題2:「参照とオブジェクトのコピーの区別」

  1. ソースファイル RefTest2.java を作成しなさい。
  2. コンパイルして実行し、結果を確認しなさい。

・ 基本課題3:「オブジェクトの参照の交換」

  1. ソースファイル RefTest3.java を作成しなさい。
  2. コンパイルして実行し、結果を確認しなさい。

・ 基本課題4:「GCとオブジェクトの消滅」

  1. ソースファイル WeakRefTest.java を作成しなさい。
  2. コンパイルして実行し、結果を確認しなさい。

・ 基本課題5:「クラスの情報の取得」

  1. ソースファイル MemberInfo.java を作成しなさい。
  2. コンパイルできたら、たとえば次のようにして実行し、結果を確認しなさい。

    java  MemberInfo  MemberInfo
    java  MemberInfo  java.awt.Color

・ 基本課題6:「システムの環境の情報の取得」

  1. ソースファイル PrintEnv.java を作成しなさい。
  2. コンパイルできたら、たとえば次のようにして実行し、結果を確認しなさい。

    java  PrintEnv
    java  -Dmyprops.city="Wakkanai"  PrintEnv

・ 基本課題7:「システムの機能の呼び出し」

  1. ソースファイル Exec.java を作成しなさい。
  2. コンパイルできたら、たとえば次のようにして実行し、結果を確認しなさい。

    java  Exec  date
    java  Exec  ls  -l      (Solaris の場合)
    java  Exec  dir         (Windows の場合)


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

  1. 課題5:のプログラム(MemberInfo)を用いて、java.lang.reflect.Member クラスがどんなメンバーを持つか調べなさい。
  2. 課題6:のプログラム(PrintEnv)を用いて、 以下のプロパティがどんな値を持っていたか調べなさい。

・ 応用課題1:「メモリの管理」
JDK1.2では通常の GCの管理とは別に独自にメモリを確保したり解放したり する機能が拡張されています。(ただし、この機能を利用する場合には プログラマがメモリの管理の責任を負うことになります。)

  1. ソースファイル MemoryCheck.java を作成しなさい。
  2. コンパイルして実行し、結果を確認しなさい。 (メモリの確保と解放を無限に繰り返すので、適当なところで 強制的に終了させてください。)

・ 応用課題2:「Javaのコマンドを受け付けるシェル」

  1. ソースファイル JShell.java を作成しなさい。
  2. コンパイルできたら、実行してみましょう。 下記のように対話的にJavaのプログラムを実行することができます。 (JavaVMのロードの手間がなくなり起動が速くなります。試してみてください。)

    java  JShell
    >> RefTest
    >> PrintEnv
    >> Exec  cal


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