それなりの頻度で必要になるのに、いつもド忘れしている「javap」の存在を、日記に書き殴る事で記憶に残したい。
やりたいことは、
- お手軽にフィールドやメソッドの一覧表を作成したい
- 「俺ってクラスファイルを逆アセンブルで解析できるんだぜ?」なスーパーハカーになりたい
です。きっと。たぶん。
早速開始。
$ cd ~/java $ java -version java version "1.5.0_07" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-164) Java HotSpot(TM) Client VM (build 1.5.0_07-87, mixed mode, sharing)
とりあえず、適当にコードを書いてみる。pakageはsampleにしてみた。
$ cat sample/HelloWorld.java
package sample;
public class HelloWorld {
private String hello;
private String world;
public HelloWorld() {
hello = "Hello";
world = "World";
}
public void say() {
System.out.println(this.doSomething());
}
private String doSomething() {
return this.hello + this.world;
}
}
はい。特に意味はナイです。プライベートフィールド2、コンストラクタ1、プライベートメソッド1、と。
$ javac sample/HelloWorld.java
↑コンパイル。↓逆コンパイル。
$ javap sample/HelloWorld
Compiled from "HelloWorld.java"
public class sample.HelloWorld extends java.lang.Object{
public sample.HelloWorld();
public void say();
}
おお、出来てる!!
privateも覗きみたいので、オプション指定する。
$ javap -private sample/HelloWorld
Compiled from "HelloWorld.java"
public class sample.HelloWorld extends java.lang.Object{
private java.lang.String hello;
private java.lang.String world;
public sample.HelloWorld();
public void say();
private java.lang.String doSomething();
}
興味深いね!!
他にはどんなオプションがあるのかな♪
$ javap -help
※注:長いので省略されました。。
なるへそ!!
もう少し詳しく知るためには、
すると良いよ。あと、
も良いよね、今日は書かなかったけど。jad 最高。
これで、'''既存のクラスファイルからJavadoc風Excel仕様書を作成する'''、という 時間の無d 有意義な業務を効率化できるね。
生産性は向上だね。給料は現状維持だね。