*Windows XP、JDK 1.4のバージョンでの画面をサンプルに使用していますが、他のプラットフォームでも、機能は同じです。
目次>
1.プログラムを起動する
2.読み込み対象を指定する
3.対象ファイルを読み込む
4.ツリー画面
5.クラス、インターフェース、パッケージデータの詳細表示
5−1.クラス・インターフェース詳細表示画面
5−2.メソッド詳細表示画面
5−3.フィールド詳細表示画面
5−4.パッケージ詳細表示画面
5−5.「使用しているクラス、インターフェース、メソッド、フィールド」画面
6.ファイルへの書き出し
7.印刷
8.システムプロパティ
9.クラス・インターフェースを検索する
10.ヘルプ
11.問い合わせ先
「public」:クラス修飾子>
全てのクラスからアクセスできます。
「protected」:
継承クラスと同一パッケージ内のクラスからのみアクセスできます。
「パッケージ内」:
同一パッケージ内のクラスからのみアクセスできます。public、protected、privateのいずれも指定されていないものは、この可視範囲になります。
「private」:
当クラス内のみ、アクセスできます。
「static」:その他>
このクラスが内部クラスの場合に、外側のクラスをインスタンス化しなくても、クラス定義が使用できる内部クラスであることを意味します。staticは内部クラスの場合のみ使えます。下記のサンプルを参照してください。
class OuterClass {
static class StaticInnerClass {
}
}
class OtherClass {
void method() {
OuterClass.StaticInnerClass obj = new OuterClass.StaticInnerClass();
}
}
「final」:
継承を禁止したクラスを意味します。finalのついたクラスの派生クラスは定義できません。
「abstract」:
抽象クラスであることを意味します。抽象クラスはインスタンス化することはできません。abstractメソッドを1つでも持っているクラスは抽象クラスになります。
「汎用型情報」:
Java 1.5で導入されたGenerics用に用意された型表記文字列です。従来のシグナチャの表記を基礎にGenerics用に拡張されています。
「deprecated」:
次のバージョンで廃止予定とされているクラスです。ソースコードのコメント中に"@deprecated"を記述すると、この設定になります。
「synthetic」:
Javaコンパイラーが内部で追加したクラスです。ソースコードには存在しません。
「annotation」:
Java 1.5で導入された注釈型のクラスです。
*注釈データとして定義された内容を表示する機能は、今回は実装していません。
「enumeration」:
Java 1.5で導入された列挙型のクラスです。列挙型は、コンパイルすると、列挙定数をフィールドに持つクラス定義に変換されます。「列挙定数」ボタンを押すと、列挙定数のリスト画面が表示されます。
「継承メンバー追加」:
このボタンを押すと、実装しているインターフェース、フィールド、メソッドのリストに、親クラスのものも追加表示されます。また、ボタンのラベルは「継承メンバー削除」に変わります。
「継承メンバー削除」:
このボタンを押すと、実装しているインターフェース、フィールド、メソッドのリストから、追加された親クラスのものが削除されます。また、ボタンのラベルは「継承メンバー追加」に変わります。
「関連」:
このクラスの全てのメソッドで使用されているクラス、インターフェース、メソッド、フィールドを一覧表示する画面を表示します。画面の解説は”5−5.「使用しているクラス、インターフェース、メソッド、フィールド」画面”を参照してください。
「ファイル出力」:
このクラスの内容をファイルに出力します。出力形式は「XML」、「テキスト」、「HTML」の3種類があります。
「HTML」の場合は、ディレクトリを出力先に指定します。このとき、指定されたディレクトリは、一旦、すべてのファイルを削除してから、出力しますので、気をつけてください。
*継承ツリーの表示は、親子関係が上下逆に表示されますので注意してください。(親が下で、子が上になります)
このクラスが実装(implement)しているインターフェースの一覧を表示します。クラス定義におけるimplementsの右側に列挙されているインターフェースの一覧になります。
「継承メンバー追加」ボタンを押すと、親クラスで実装しているインターフェースも追加表示されます。タイトルの一部にある『[1(1:0)]』という表示は、『全体数(当クラスでの実装数:親クラスでの実装数)』を意味しています。
リストの2列目の「実装しているクラス」とは、インターフェースをimplementsで列挙しているクラスを指します。継承メンバー追加をしていない場合は、全て当該クラスが「実装しているクラス」になりますが、追加を行うと親クラスでimplementsされているインターフェースもリストに追加されますので、「実装しているクラス」には、親クラスも含まれてきます。
インターフェースの詳細表示画面では、ここは、このインターフェースを実装(implement)しているクラスの一覧になります。
「内部クラス一覧」パネル>
このクラスの内部で定義されている内部クラス、あるいは、このクラスが内部クラスの場合は、このクラスの外側のクラス内で、定義されている他の内部クラスに自クラスを含めた一覧が表示されます。ここにはInnerClassesアトリビュートの設定値をそのまま表示しています。
リストの行をダブルクリックすると該当クラスの詳細を表示する画面が表示されます。
「定義名」はソースコード上でのクラス名になります。”<匿名クラス>”と表示されているものは、クラス名が記述されていない内部クラスです。「クラス名」は、コンパイルによって生成されたクラス名で、クラスファイル名と同じです。「外部クラス名」は内部クラスの外側のクラス名になります。
*「外部クラス名」が未設定の場合もあるようです。
匿名クラスの例>
下記のコードでは、ActionListenerインターフェースを実装した匿名クラスがコンパイル時に生成されます。
JButton button = new Jbutton("OK");
button.addActionListener( // この部分以降が匿名クラスとして生成される new ActionListener() {
public void actionPerformed(ActionEvent event) {
JOptionPane.showMessageDialog(parentScr.this,"action performed");
}
}
);
リストの表示列>
「static」:
チェックが入っていれば、クラスフィールドです。クラスをインスタンス化しなくても使用できるフィールドです。
「final」:
チェックが入っていれば、finalフィールドです。値を変更できないフィールドになります。主に定数フィールドに使用されます。
「enum」:
チェックが入っていれば、列挙定数フィールドです。列挙型の列挙定数は、列挙定数フィールドに変換されます。
「可視範囲」:
フィールドの可視範囲です。「public」「protected」「同一パッケージ内」「private」の4種類があります。
「フィールド名」:
フィールドの名称です。
「初期値」:
チェックが入っていれば、フィールドに初期値が設定されています。但し、初期値が参照型(クラスオブジェクト、配列)の場合は、ここにチェックは入りません。プリミティブ型(int、doubleなど)の初期値のみチェックが入ります。
「定義クラス」:
このフィールドの属するクラスです。「継承メンバー追加」をしていない場合は、全て当該クラスが「定義クラス」になりますが、追加を行っていた場合は、親クラスのフィールドもリストに追加されますので、「定義クラス」が親クラスの場合もあります。
リストの表示列>
「static」:
チェックが入っていれば、クラスメソッドです。クラスをインスタンス化しなくても使用できるメソッドです。
「abstract」:
チェックが入っていれば、抽象メソッドです。APIだけ定義されていて、中身が記述されていないメソッドです。
「可視範囲」:
メソッドの可視範囲です。「public」「protected」「同一パッケージ内」「private」の4種類があります。
「戻り値型」:
メソッドの戻り値の型です。
「メソッド名」:
メソッドの名称です。
「パラメータ」:
メソッドのパラメータの型を列挙しています。パラメータ名は、クラスファイルに保存されていないので、ここでは表示していません。
「定義クラス」:
このメソッドの属するクラスです。「継承メンバー追加」をしていない場合は、全て当該クラスが「定義クラス」になりますが、追加を行っていた場合は、親クラスのメソッドもリストに追加されますので、「定義クラス」が親クラスの場合もあります。
「メソッド」:
このメソッドのAPIを表示します。
「記述子」:
このメソッドのシグナチャを表示します。シグナチャに使用される記号の意味は下表のようなものです。
メソッド表記用型文字一覧 基本型を示す文字 型 B byte C char D double F float I int J long L<classname>; classnameクラスのインスタンスへの参照
例えば、Ljava/lang/String;はjava.lang.Stringクラスのオブジェクトになる。S short Z boolean V void [ 配列への参照。[の数は配列の次元数を表す。
例えば、[[Ljava/lang/String;はjava.lang.Stringオブジェクトの二次元配列になる。
「汎用型情報」:
Java 1.5で導入されたGenerics用に用意された型表記文字列です。従来のシグナチャの表記を基礎にGenerics用に拡張されています。
「バイトコード」:
このメソッドのバイトコードをディスアセンブルしたコードを表示します。
基本的な表示形式は下記の通りです。
命令番地: 命令 オペランド・命令がフィールドアクセス(getfield、putfield、getstatic、putstaticなど)に関するものである場合、オペランドの表記は下記のようになります。
フィールド型名 フィールド名 <フィールドの属するクラス・インターフェース名>・命令がメソッド起動(invokevirtual、invokestatic、invokespecialなど)に関するものである場合、オペランドの表記は下記のようになります。但し、invokespecialの場合は「戻り値型名」はありません。
戻り値型名 メソッド名 <メソッドが属するクラス・インターフェース名>・オペランドが二重引用符で囲まれていたときは、文字列定数であることを意味します。
例:下記の例では文字列定数"string"がオペランドスタック先頭にセットされます。
ldc "string"
・分岐命令の場合、オペランドは分岐先の番地になります。
例:下記の例では、オペランドスタック先頭の値が0の場合、000083番目の命令に飛びます。
ifeq 000083
・オペランドが#で始まる数値の場合は、ローカル変数配列のインデックスを意味しています。
例:下記の例では、オペランドスタック先頭にあるオブジェクト参照がローカル変数配列の8番目にセットされます。
astore #8
・命令がtableswitch、lookupswitchの場合は、矢印の左側が条件値で、矢印の右側が一致したときの分岐先の番地になります。
例:下記の例では、オペランドスタック先頭の値が1の時は000032、2の時は000040、3の時は000048、それ以外は000053に飛びます。
tableswitch
1 ---> 000032
2 ---> 000040
3 ---> 000048
default ---> 000053
*バイトコードの命令の詳細は、The Java Virtual Machine Specificationを参照してください。
「関連」:
このメソッドで使用されているクラス、インターフェース、メソッド、フィールドを一覧表示する画面を表示します。画面の解説は”5−5.「使用しているクラス、インターフェース、メソッド、フィールド」画面”を参照してください。
「ファイル出力」:
このメソッドの内容をファイルに出力します。出力形式は「XML」、「テキスト」、「HTML」の3種類があります。「HTML」の場合は、ディレクトリを出力先に指定します。このとき、指定されたディレクトリは、一旦、すべてのファイルを削除してから、出力しますので、気をつけてください。
「public」:
全てのクラスからアクセスできます。
「protected」:
継承クラスと同一パッケージ内のクラスからのみアクセスできます。
「パッケージ内」:
同一パッケージ内のクラスからのみアクセスできます。
「private」:
当クラス内のみ、アクセスできます。
「static」:
クラスメソッドであることを意味します。クラスをインスタンス化しなくても使用できるメソッドです。
「final」:
継承クラスでオーバライドできないメソッドです。サブクラスで挙動を変更させたくないメソッドにつけます。
「abstract」:
宣言だけで、中身のないメソッドにつけます。メソッドの処理内容は継承クラスでオーバライドします。このメソッドを1つでも持っているクラスは抽象クラスになります。
「native」:
メソッドの本体はC言語などで記述され、それに対応するJava側のメソッドにnativeを付加します。Javaからプラットフォーム依存の関数を呼び出すときに使用します。nativeのついたメソッドは、宣言だけで内容は記述されていません。
「synchronized」:
複数スレッド間で同期をとって実行されるメソッドにつけます。synchronizedメソッドを実行すると、メソッド実行中は、メソッドにロックがかかり、他のスレッドがこのメソッドを実行しようとすると、ロックが外れる(処理が終わる)まで待ちに入ります。
「strictfp」:
浮動小数点演算を規則(IEEE 754)通りに行うことを保証するメソッドにつけます。これをつけることによって、浮動小数点演算の挙動は、プラットフォームを変えても同一であることが保証されます。
その他>
「deprecated」:3)「その他」タブ
次のバージョンで廃止予定とされているメソッドです。ソースコードのコメント中に"@deprecated"を記述すると、この設定になります。
「synthetic」:
Javaコンパイラーが内部で追加したメソッドです。ソースコードには存在しません。
「ブリッジメソッド」:
コンパイラーによって生成されたブリッジメソッドであることを示します。ブリッジメソッドとは、genericsで定義されたパラメータ化されたインターフェースなどで定義されたメソッドから、実際に定義されたメソッドへの橋渡しをするためにコンパイラーが内部生成したメソッドのことを言います。以下のサンプルを見てください。
interface PrintInterface <T> {
void print (T value);
}
class StringPrint implements PrintInterface <String> {
public void print(String value) {
// ....
}
}
インターフェースPrintInterfaceにおけるvoid print (T value);は、コンパイルするとvoid print (java.lang.Object value);となります。一方、クラスStringPrintにおけるpublic void print(String value)は、PrintInterfaceのvoid print (T value);を実装したメソッドとして記述されていますが、コンパイル後のバイトコード中では、まったく別のシグナチャになってしまい、同じメソッドとは解釈されなくなります。そこで、コンパイラーはクラスStringPrintにvoid print (java.lang.Object value);というメソッドを追加して、両者の橋渡しをします。こうして内部で生成されるメソッドをブリッジメソッドと呼びます。
「可変長引数」:
引数の数を不定にしたメソッドであることを示します。下記のような宣言になります。
void display(String msg,Object... objs)
ただし、コンパイルすると、可変長の引数は配列宣言に変換されます。たとえば、上記のメソッドは、コンパイル後は
void display(java.lang.String msg, java.lang.Object [] objs)
に変更されます。
「オペランドスタックサイズ」:5−3.フィールド詳細表示画面
ローカル変数やフィールドをロードした値を保存したり、バイトコードの命令のオペランドを格納する場所として用意されたスタックのサイズです。このスタックのサイズはコンパイル時に決定されます。
Java仮想マシンではレジスターという概念は存在せず、その代わりにオペランドスタックが使われます。
「ローカル変数配列サイズ」:
ローカル変数を格納する場所として用意された配列のサイズです。
「パラメータ一覧」:
パラメータの型の一覧が、宣言された順番で表示されます。パラメータ名はバイトコードに保存されていないため、型名だけ表示されます。
「thorws節例外一覧」:
thorws節に列挙された例外クラスの一覧が、宣言された順番で表示されます。
「フィールド」:
フィールドの宣言を表示します。
「記述子」:
フィールドのシグナチャを表示します。シグナチャに使用される記号の意味は下表のようなものです。
フィールド表記用型文字一覧 基本型を示す文字 型 B byte C char D double F float I int J long L<classname>; classnameクラスのインスタンスへの参照
例えば、Ljava/lang/String;はjava.lang.Stringクラスのオブジェクトになる。S short Z boolean [ 配列への参照。[の数は配列の次元数を表す。
例えば、[[Ljava/lang/String;はjava.lang.Stringオブジェクトの二次元配列になる。
「汎用型情報」:
Java 1.5で導入されたGenerics用に用意された型表記文字列です。従来のシグナチャの表記を基礎にGenerics用に拡張されています。
「ファイル出力」:
このメソッドの内容をファイルに出力します。出力形式は「XML」、「テキスト」、「HTML」の3種類があります。「HTML」の場合は、ディレクトリを出力先に指定します。このとき、指定されたディレクトリは、一旦、すべてのファイルを削除してから、出力しますので、気をつけてください。
「deprecated」:
次のバージョンで廃止予定とされているフィールドです。ソースコードのコメント中に"@deprecated"を記述すると、この設定になります。
「synthetic」:
Javaコンパイラーが内部で追加したフィールドです。ソースコードには存在しません。
「列挙定数」:
列挙定数として定義されているフィールドです。(列挙型はJava 1.5で導入された仕様です)
「public」:
全てのクラスからアクセスできます。
「protected」:
継承クラスと同一パッケージ内のクラスからのみアクセスできます。
「パッケージ内」:
同一パッケージ内のクラスからのみアクセスできます。
「private」:
当クラス内のみ、アクセスできます。
「static」:
クラス変数であることを意味します。クラス変数は、クラス定義がロードされた時点でインスタンス化されるフィールドです。
「final」:
値を変更できないフィールドです。通常、初期値が設定されます。
「volatile」:
常にメモリー上に値を保持するフィールドです。これは複数スレッドで共有するフィールドで意味を持ってきます。例えば、ループカウンターなどは、通常、処理効率を上げるため、レジスター上で操作されます。しかし、複数のスレッドで共有している場合、レジスター上で値が変更されていると、他のスレッドでは変更された値を知らないでメモリ上の値を見ることになります。このような事態を防ぐ場合に、volatileをつけます。
*Java仮想マシンにはレジスターはありません。この場合のレジスターは、Java仮想マシンが動いているCPUのレジスターを意味しています。
「transient」:
直列化(シリアライゼーション)の対象外のフィールドです。
シリアライゼーションとは、フィールドの内容を保存して、次回のクラスロード時に、保存した内容でフィールドを初期化することを言います。transientとつけたフィールドは、この対象外とされ、内容は保存されません。Beansとして使用するクラスで意味を持ってきます。
表示項目>
フィールドに初期値が定義されていた場合、その型と設定値が表示されます。5−4.パッケージ詳細表示画面
ただし、ここで表示されるのは、型がプリミティブ型の場合のみで、クラスなどの参照型の場合は、ここに表示されません。
たとえば、下記のようにクラスオブジェクトで初期化しているフィールドの場合、Point pos = new Point(10,10);これをコンパイルすると、コンストラクタの冒頭部分にpos = new Point(10,10);というコードが追加され、初期化はコンストラクタ内で行われるように変更されます。
「初期化」タブで表示しているのは、バイトコード内に初期設定値として存在しているもののみです。
5−5.「使用しているクラス、インターフェース、メソッド、フィールド」画面
クラス・インターフェース詳細表示画面、メソッド詳細表示画面で「関連」ボタンをおすとこの画面が表示されます。この画面では、クラス内の全メソッド、あるいは該当メソッドの中で使用されているクラス、インターフェース、メソッド、フィールドの一覧を表示します。
リストの各行をダブルクリックすると、該当行の詳細表示画面が起動します。
リストの表示列>
「メンバー名」:
使用されているメソッド名、あるいはフィールド名が表示されます。使用されているのがクラス・インターフェースの型定義だった場合は、この列は空欄になります。
「クラス・インターフェース」:
使用されているのがメソッドあるいはフィールドの場合は、それが属するクラス・インターフェース名が表示されます。使用されているのがクラス・インターフェースの型定義だった場合は、そのクラス・インターフェース名になります。
「アクセス種類」:
どのような形で使用されているかを表示します。下表の5種類があります。
アクセスの種類 | 意味 |
値取得 | フィールドの値を取得しています。 |
値設定 | フィールドに値を設定しています。 |
値取得・値設定 | フィールドの値の取得と設定をしています。 |
メソッド起動 | メソッドを起動しています。 |
実体化・配列作成・キャスト | クラスのインスタンス化、クラスやインターフェースの配列の作成、クラス・インターフェース型へのキャストを行っています。 |
「使用箇所」:
どのメソッド内で使用されているかを表示します。メソッド詳細表示画面から起動された場合は、この列は空欄になります。
また、リスト画面では、同じメソッド・フィールドなどを使用していても、使用箇所が複数あった場合は、それぞれ1行ずつにわけて表示されます。従って、同じフィールド・メソッド名などが複数行表示されることもあります。
種類 | 内容 |
---|---|
テキスト形式 | テキストファイルに任意の形式で出力。テキスト編集を念頭に出力しているので、整形されていない。 |
XML形式 | XML形式で出力。 |
HTML形式 | 複数のウェブページを生成し、出力。出力先の指定は、ディレクトリになる。 |
種類 | 内容 |
---|---|
ツリーの出力 | 継承ツリー、階層ツリーのみの出力。 |
全データ概要出力 | クラス・インターフェースまでの出力。 |
全データ出力 | 個々のメソッド・フィールドの内容まで出力する。 |
プログラムのあるディレクトリの直下にdocsというディレクトリがあり、そこにReadme.html、simpleguide.htmlの2つのファイルがあります。これらは、それぞれ、「はじめに」、「使用法」で表示されるドキュメントになります。メニューバーの「ヘルプ(H)」から選択できます。
これらファイルはHTMLで記述されていますが、メニューから起動されたときは、リンクをクリックしてもリンク先には飛びません。お手持ちのブラウザで表示することをお勧めします。
11.問い合せ先
作者への問い合せは、こちらまで。
但し、かならずご返事を差し上げるとは限りませんので、ご了承下さい。
登録商標など
Microsoft、Microsoft Windows、Microsoft Windows XP、Microsoft Visual C++などは、Microsoft Corporationの登録商標です。
Java、Java 1.4、Java 1.5、Java 5などはSun Microsystemsの登録商標です。
Intel Pentium M、Intel Pentium4はIntel Corporationの登録商標です。
AMD Athlon XPはAdvanced Micro Devices,Incの登録商標です。
Fedora、Fedora CoreはRed Hat, Inc.の商標です。
本ページに記載されている会社名や商品名は一般に各社の商標です。