Java 2 Standart Editionメモ

[ Topページへ戻る ]


目次


リリース状況(2007.4現在)

Java Ver. 6

Java 2 Ver. 5.0

Java 2 Ver 1.4.2

Java 2 Ver. 1.4.1

Java 2 Ver. 1.4.0

Java 2 Ver. 1.3.1

Java 2 Ver. 1.2.2

Javaリリース履歴

JDK 1.0

バージョン リリース日
1.0 1996/01/23
1.0.1 1996/03/26
1.0.2 1996/05/16

JDK 1.1

バージョン リリース日 バージョン リリース日 バージョン リリース日
1.1 1997/02/19 1.1.8 1999/04 1.1.8_009 2002/02
1.1.1 1997/03 1.1.8_001 1.1.8_010
1.1.2 1997/05 1.1.8_002 1.1.8_011
1.1.3 1997/07 1.1.8_003 2000/03 1.1.8_012
1.1.4 1997/09 1.1.8_004 2000/05
1.1.5 1997/12 1.1.8_005
1.1.6 1998/04 1.1.8_006 2000/12
1.1.7A 1998/11 1.1.8_007 2001/04
1.1.7B 1998/12 1.1.8_008

JDK 1.2

バージョン リリース日 バージョン リリース日 バージョン リリース日
1.2 1998/12 1.2.2_007 2000/12 1.2.2_016 2003/06
1.2.1 1999/03 1.2.2_008 2001/05 1.2.2_017 2003/09
1.2.2 1999/07 1.2.2_009 2001/08
1.2.2_001 1999/11 1.2.2_010 2001/11
1.2.2_002 1.2.2_011 2002/02
1.2.2_003 1.2.2_012 2002/05
1.2.2_004 1.2.2_013 2002/08
1.2.2_005 2000/05 1.2.2_014 2002/10
1.2.2_006 2000/07 1.2.2_015 2003/04

JDK 1.3.0 / 1.3.1

バージョン リリース日 バージョン リリース日 バージョン リリース日 バージョン リリース日
1.3.0 2000/05 1.3.1 2001/05 1.3.1_08 2003/04 1.3.1_17
1.3.0_001 2000/11 1.3.1_01 2001/09 1.3.1_09 2003/08 1.3.1_18 2006/03
1.3.0_002 2001/03 1.3.1_01a 2001/10 1.3.1_10 2003/12
1.3.0_003 2001/06 1.3.1_02 2001/11 1.3.1_11 2004/03
1.3.0_004 2001/08 1.3.1_03 2002/02 1.3.1_12 2004/06
1.3.0_005 2001/12 1.3.1_04 2002/05 1.3.1_13 2004/09
1.3.1_05 2002/10 1.3.1_14 2004/11
1.3.1_06 2002/10 1.3.1_15 2004/12
1.3.1_07 2003/01 1.3.1_16 2005/06

JDK 1.4.0 / 1.4.1 / 1.4.2

バージョン リリース日 バージョン リリース日 バージョン リリース日
1.4.0 2002/02 1.4.1 2002/09 1.4.2 2003/06
1.4.0_01 2002/06 1.4.1_01 2002/10 1.4.2_01 2003/08
1.4.0_02 2002/09 1.4.1_02 2003/03 1.4.2_02 2003/10
1.4.0_03 2002/11 1.4.1_03 2003/05 1.4.2_03 2003/12
1.4.0_04 2003/04 1.4.1_04 2003/07 1.4.2_04 2004/03
1.4.1_05 2003/08 1.4.2_05 2004/07
1.4.1_06 2003/11 1.4.2_06 2004/10
1.4.1_07 2005/01 1.4.2_07 2005/01
1.4.2_08 2005/04
1.4.2_09 2005/08
1.4.2_10 2005/11
1.4.2_11 2006/02
1.4.2_12 2006/05
1.4.2_13 2006/11
1.4.2_14 2006/03

JDK 5.0

バージョン リリース日
5.0 2004/09
5.0 Update 1 2004/12
5.0 Update 2 2005/03
5.0 Update 3 2005/04
5.0 Update 4 2005/07/23
5.0 Update 5 2005/09/17
5.0 Update 6 2005/11/30
5.0 Update 7 2006/05/24
5.0 Update 8 2006/08
5.0 Update 9 2006/10
5.0 Update 10 ?
5.0 Update 11 2007/03

1997年12月末に、JDK1.2の最初のβ版が公開された。その後1998年春にβ3が公開、夏(7月)にβ4が公開、秋(10月)にRC1が公開されている。JDK1.2正式版は1998年12月にリリースされた。その後、製品体系がJava 2 Platform Standard Edition(Java 2 SE)となって、JDK1.2はJava 2 SDK, Standard Edtion Version 1.2 という名前になった。2002年2月にJava 2 SDK, SE v1.4.0正式版がリリースされた。2004年9月にJava 2 SDK, SE v5.0正式版がリリースされた。

JDK1.0ではクラス数201がJDK1.1で412に増えた。

製品構成

SunからリリースされるJava開発環境JDKと、Javaプログラム実行環境JREに分けられる。JDKは、ソースプログラムのコンパイラ、デバッガ、プロファイラ、といった開発環境一式が含まれる。JREには、Javaプログラムの実行に必要なVMが含まれる。JDKは再配布が禁止されているため、開発したプログラムを配布するときは、JDKではなくJREを添付することになる。

JRE1.2には、Java実行用コマンドラインツールの他、WWWブラウザ上でアプレットを実行するためのJava Plug-in 1.2が含まれており、JREインストール時にブラウザに"plug-in"される。

コマンド・ユーティリティ

プログラム開発コマンド類

javac
Javaソースコードをコンパイルするコマンド。コマンドラインで@付きのファイル名を指定すると、そのファイルに記述されているファイルをコンパイルする。
java
Javaプログラムの実行コマンド。Windows上で実行すると、cmd.exeを介して実行されるので、DOS窓が現われる。
javaw
Javaプログラムの実行コマンド。Windows上では、直接JavaVMのプロセスが起動されるので、DOS窓が現われない。しかし、System.in/outが使えない。
appletviewer
Appletを起動する。(HTMLファイルを指定する)
javadoc
ドキュメントフォーマットをユーザがカスタマイズできるようになった。(Doclet)
jar
Javaのクラスファイルアーカイブ(JAR)の管理コマンド。
jdb
Javaのデバッガ。
javap
クラスファイルを解析する(ディスアセンブラ)ツール。
javah
JNI用にnative宣言したメソッドのC言語用ヘッダファイルを生成するコマンド。
extcheck
JARの競合を検出するツール。
apt
アノテーション処理用ツール。(since 5.0)
native2ascii
テキストファイルをUnicode(Latin-1)に変換するツール。リソースファイルにLatin-1以外の文字コードを使用するときに、このツールを使う。
pack200
JARファイルからpack200圧縮ファイルを生成するツール。高圧縮率を持つ。(since 5.0)
unpack200
pack200圧縮ファイルからJARファイルに解凍するツール。(since 5.0)
htmlconverter
Java appletの記述を持つHTMLをJava Plug-in標準形式のOBJECT/EMBEDタグに変換する。

セキュリティツール類

keytool
暗号鍵・認証情報を管理するツール
jarsigner
JARに署名をし検証するツール
policytool
ポリシーファイルを管理するGUIツール
kinit
Kerberos v5のチケットを獲得するツール。
klist
クレデンシャル・キャッシュとキータブをリストアップするツール。
ktab
鍵テーブルの管理ツール。

分散オブジェクト開発・管理ツール

rmic
リモートオブジェクトのスタブ・スケルトン・コードを生成する。
rmiregistry
リモートオブジェクトのレジストリ・サービス(ネーミングサービスとほぼ同様)。
rmid
非活性のリモートオブジェクトへのリクエストを受けて活性化(activate)させるデーモン。
serialver
クラスのserialVersionUID値を取得するツール。
tnameserv
CORBAネーミングサービス(永続化機能は持たない)
idlj
CORBA IDLからJavaソースファイルを生成するツール。
orbd
永続化機能を持つネーミングサービス。
srevertool
簡単にサーバの起動・終了、登録、解除を制御するツール。

監視・管理ツール

jconsole
ローカルやリモートのJava仮想マシンを監視するJMX対応のGUI
ツール。
jps
監視機構を有効にして起動されているJava仮想マシンをリストアップするツール。
jstat
指定したJava仮想マシンのclass、compiler、gcなどの計測値を表示するコマンドラインツール。
jstatd
jstatデーモン

トラブルシュート用ツール

(Solarisのみ)

jinfo
指定したJava仮想マシンのバージョン情報、各種システムプロパティ値、仮想マシン起動時のオプションなどを表示する。
jmap
指定したJava仮想マシンのプロセスマップ(Solarisのpmapとほぼ同様)、ヒープ情報、ヒープを使用している型情報、クラスローダ毎の情報を表示する。
jsadebugd
Java仮想マシンにアタッチし、RMI経由でクライアントからの監視情報問合せに応答するデーモン。
jstack
指定したJava仮想マシンのスタック情報を表示するツール。

クラスファイルの読み込み

JDK1.2からは、従来のCLASSPATH一本槍の指定方法から、エクステンション・フレームワークと呼ぶ新しいクラスライブラリ管理方式が提供されるようになった。JDKのコアAPI以外の拡張クラスライブラリは、従来のCLASSPATHを使用するほか、次の2つの方法で使用することができる。

  1. インストールド・エクステンション
  2. ダウンロード・エクステンション

また、JDK1.4からは、一部のクラスライブラリについてはJDK標準搭載のものと置き換えるための仕組みとしてEndorsed Standard Overrideが追加された。javax.rmi.CORBAおよびorg.omg、org.w3c.dom、org.xml.saxといったパッケージをJDK1.4標準搭載のもの以外に置き換えることができる。例えばJDK1.4にはJAXPの実装としてcrimsonが

  1. エンドースド・オーバーライド

1.インストールド・エクステンション

下記にJava 2のディレクトリ構造とライブラリの配置を示す。

jdk1.2 bin 開発ツール類
lib 開発用クラスライブラリ tools.jar
jre bin 実行ツール類
lib コアAPIクラスライブラリ(rt.jar, i18n.jar)
ext インストールド・エクステンション
ここに入れたJARファイルは自動的に検索される
security

インストールド・エクステンションに置かれたJARファイルは、CLASSPATH環境変数で指定しなくてもクラスローダによって検索対象になる。また、インストールド・エクステンションに対応するクラスローダとCLASSPATHの検索を行うクラスローダは別物である。したがって、インストールド・エクステンションの中からCLASSPATHに指定したクラスをロードすることはできない。

インストールド・エクステンション・ディレクトリの変更

インストールド・エクステンションのディレクトリを、上記のJDK/JREデフォルトの場所以外に設けることもできる。

1. コンパイル時
javacツールのコマンドラインオプションである-extdirsを指定して、複数のディレクトリをインストールド・エクステンション・ディレクトリに指定することができる。各種プロジェクトで標準的に使用するライブラリなどは、共通の場所において、コンパイル時にこのオプションで指定するのもひとつの方法だ。
2. 実行時
システムプロパティのjava.ext.dirsで指定する。複数ディレクトリを指定することも可能だ。

Java 2のクラス検索順序

  1. ブートストラップクラスの検索
    コアAPIが格納された"rt.jar", "i18n.jar"の検索
  2. インストールド・エクステンションの検索
    jre/lib/extに格納されたJARファイルの検索
  3. クラスパスの検索
    環境変数CLASSPATHで指定された場所。CLASSPATHが設定されていない場合は、カレントディレクトリ"."がセットされる。(CLASSPATHを設定する場合は、デフォルトの"."は無効となるので、必要ならばCLASSPATHで"."を含めること)
  4. ダウンロード・エクステンションの検索
    あるJARファイルのmanifestファイルで指定されるJARファイル。

Java 2のコアクラスより先に検索させるには?

例えばJava 2のコアAPIとしてCORBAパッケージ(org.omg.CORBA)が含まれています。サードパーティ製のCORBAツールを使用する時、Java 2ではサードパーティ製のCORBAパッケージよりも先にコアAPIのパッケージが検索されてしまうため、不具合が生じます。

  1. コンパイル時
    javacツールのコマンドラインオプションの、-bootclasspath指定によってブートストラップクラスの検索指定を行える。次の例のように、rt.jar, i18n.jarよりも先に指定する。
    javac -bootclasspath /corbax/lib/orb.jar:/jdk1.2/jre/lib/rt.jar:/jdk1.2/jre/lib/i18n.jar xxx
  2. 実行時
    javaツールには、JDK1.2β4時点でNon-Standardオプションとして -Xbootclasspath: 指定があります。とりあえずこれを使って指定することができます。
    java -Xbootclasspath:/corbax/lib/orb.jar:/jdk1.2/jre/lib/rt.jar:/jdk1.2/jre/lib/i18n.jar xxx
    appletviewer -J-Xbootclasspath:/corbax/lib/orb.jar:/jdk1.2/jre/lib/rt.jar:/jdk1.2/jre/lib/i18n.jar xxx

2.ダウンロード・エクステンション

JARファイルMANIFEST.MF中のClass-Pathヘッダファイルに指定したJARファイルを読み込むことができる。

    Class-Path: servlet.jar infobus.jar acme/beans.jar

例えば上記を書いたマニフェストファイルを収めたJARファイル(MyApplication.jar)を読み込むと、servlet.jar, infobus.jar, acme/beans.jarを合わせて読み込む。パス指定はその実行されるJARファイルからの相対パスである。

   -+- MyApplication.jar
    +- servlet.jar
    +- infobus.jar
    +- acme
         +- beans.jar

3.エンドースド・オーバーライド

JDK1.4から加わった機能。JDKが標準搭載しているクラスライブラリの一部を置き換えるための仕組み。置き換えたいクラスライブラリが収められたJAR形式ファイルを、次の2つのどちらかによって指定する。

  1. 実行時に、システムプロパティ"java.endorsed.dirs"にJARファイルの格納されているディレクトリをセットする
  2. lib/endorsedディレクトリの中に、JARファイルを格納する
jdk1.4 bin 開発ツール類
lib 開発用クラスライブラリ tools.jar
jre bin 実行ツール類
lib コアAPIクラスライブラリ(rt.jar, i18n.jar)
ext インストールド・エクステンション
endorsed 置き換えるJARファイル
security

リファレンスオブジェクトAPI

Javaのガーベッジ・コレクションは他のオブジェクトから参照されているオブジェクトを回収しない。これを「強い参照(Strong Reference)」という。JDK1.2からは、「弱い参照(Weak Reference)」が導入され、この弱い参照だけによって他のオブジェクトから参照されているオブジェクトはガーベッジ・コレクションで回収される。

応用例

コレクションAPI

VectorやHashtableをもっと高度化・洗練したもの。8つのインタフェースが提供されるようになった。

セキュリティ

セキュリティ設定の変更、アクセス制御の粒度が小さくなった、クラス単位でのアクセス制御、電子署名がなくてもアクセス制御可能など。

アクセス制限の指定

JVMのシステム・クラスには、ファイルやネットワーク等のシステムリソースへアクセスする「危険なメソッド」を実行する前にセキュリティチェックを行う機能がある。このチェックはAccessControllerに問い合わせる。AccessControllerは、許可情報をPolicyオブジェクトから取得する。このPolicyオブジェクトに許可情報を設定するには、ポリシーファイルを使用するとよい。

参考文献

バージョン識別

パッケージ単位にバージョン管理を行うための基本的な識別機能。java.lang.Packageクラスが提供され、クラスが属するパッケージの情報が取得できる。このパッケージの情報は、JARファイルに付属するmanifestファイルに記述されているものである。したがってmanifestファイルを適切に作成しておくことが必要。

JavaBeans機能拡張

JDK1.2から、BeanContextが階層構造を持つようになった。JDK1.1までは、Beanは階層構造を持たず、複数のBeanを組み合わせて保存しても、別に利用するときには個別にBeanを扱う必要があった。BeanContextは、Beanを収容する入れ物として振る舞うほか、他のBeanContextに含めることもできる構造になっている。

Java Foundation Classes(JFC)

AWTに代るGUIクラスライブラリSwing、2次元グラフィックスモデルJava2D、ユーザインタフェース支援機能をもつAccessibility、ドラッグ&ドロップで構成される。

Swing

Light WeightGUIコンポーネント群。Look & Feelを切り替えられるのが最大の特徴。100%Javaで記述されているので、プラットフォームによる違いが少ない。コンポーネント種類もAWTに比べると格段に豊富になっている。

Java2D

2次元のベクタ・グラフィックスライブラリ。回転・拡大・縮小機能が標準搭載された。また、グラフィックス描画コマンドが、従来の表示ピクセルを直接指定する方式から、仮想座標系で指定し、実描画座標系へ変換する方式に変わった。ベクトルを基本とするグラフィックスモデルを採用し、ベジェ曲線が利用できるほか、グラディエーション、テクスチャーマッピング、アルファブレンディングなど多彩な機能が装備された。

イメージ処理関係も用意され、フィルター処理等ができるようになった。カラーはRGBチャネル、アルファチャネルが使用できる。

Accessibility

Drag & Drop

RMI

Activation

クライアントからの要求に応じて自動的にJavaVMを起動し、サーバ・オブジェクトを生成する仕組み。クライアントからの要求は、rmidというデーモンプロセスが受け付ける。

入力メソッド(Input Method Framework)

漢字等の入力を取り扱う仕組み。

Java IDL

ファイルアクセスの改良

java.io.Fileクラスが、プラットフォーム独立性を高めるように改良された。Win32上では、

 new File("foo/bar").getPath()   ---> foo\bar
 new File("/foo/bar").getPath()  ---> \foo\bar

となる。また、従来問題となっていたWindowsのファイルルートパスのドライブ名についても、java.io.FileクラスにlistRoots()メソッドが追加され、複数ルートパスが扱えるように改良された。

管理機能

Java仮想マシンの監視・管理機構が追加された。JMXベース。

管理ツール

jconsole

リモート、ローカルで実行されているJava仮想マシンのメモリ、スレッド、クラス、などの情報を監視することができるツール。

ローカルの場合

監視対象Java仮想マシンを起動するには、起動時のオプションで以下を指定する。JDK 6からはローカルマシン上で動く監視対象Java仮想マシンをjconsoleから接続する場合は、本オプションは省略可能。

-Dcom.sun.management.jmxremote=true

監視対象Java仮想マシンのプロセスIDを何らかの方法で調べてから、

$ jconsole 1234

と実行する。(例:PIDが1234の場合)

Java 2に関する技術情報サイト

J2SEバージョン1.4情報

J2SEバージョン1.5情報

Java SE バージョン6情報

今のところJava SE 6の記事は櫻庭さん一色というところです。

JavaVM情報

参考文献

JavaプログラミングTips

Sun Java Developper Connection から

Sun Developer Connection(SDC)の会員になる必要があります。会員登録は無償です。