." Copyright 2002-2006 Sun Microsystems, Inc.  All Rights Reserved.
." DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
."
." This code is free software; you can redistribute it and/or modify it
." under the terms of the GNU General Public License version 2 only, as
." published by the Free Software Foundation.
."
." This code is distributed in the hope that it will be useful, but WITHOUT
." ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
." FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
." version 2 for more details (a copy is included in the LICENSE file that
." accompanied this code).
."
." You should have received a copy of the GNU General Public License version
." 2 along with this work; if not, write to the Free Software Foundation,
." Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
."
." Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
." or visit www.oracle.com if you need additional information or have any
." questions.
."
.TH javap 1 "04 May 2009"
." Generated from HTML by html2man (author: Eric Armstrong)

.LP
.SH "名前"
javap \- Java クラスファイル逆アセンブラ
.LP
.RS 3

.LP
.LP
クラスファイルを逆アセンブルします。
.LP
.RE
.SH "形式"
.LP

.LP
.nf
\f3
.fl
javap [ \fP\f3options\fP\f3 ] class. . .
.fl
\fP
.fi

.LP
.SH "説明"
.LP

.LP
.LP
\f3javap\fP コマンドは、クラスファイルを逆アセンブルします。その出力は指定するオプションにより異なります。オプションを指定しない場合、\f3javap\fP は、そのパッケージ、渡されたクラスの protected および public のフィールドとメソッドを出力します。 \f3javap\fP はその出力を標準出力に表示します。たとえば、次のクラス宣言をコンパイルするとします。
.LP
.RS 3

.LP
.nf
\f3
.fl
import java.awt.*;
.fl
import java.applet.*;
.fl

.fl
public class DocFooter extends Applet {
.fl
        String date;
.fl
        String email;
.fl

.fl
        public void init() {
.fl
                resize(500,100);
.fl
                date = getParameter("LAST_UPDATED");
.fl
                email = getParameter("EMAIL");
.fl
        }
.fl

.fl
        public void paint(Graphics g) {
.fl
                g.drawString(date + " by ",100, 15);
.fl
                g.drawString(email,290,15);
.fl
        }
.fl
}
.fl
\fP
.fi
.RE

.LP
.LP
\f3javap DocFooter\fP がもたらす出力は次のようになります。
.LP
.RS 3

.LP
.nf
\f3
.fl
Compiled from DocFooter.java
.fl
public class DocFooter extends java.applet.Applet {
.fl
    java.lang.String date;
.fl
    java.lang.String email;
.fl
    public DocFooter();
.fl
    public void init();
.fl
    public void paint(java.awt.Graphics);
.fl
}
.fl
\fP
.fi
.RE

.LP
.LP
\f3javap \-c DocFooter\fP がもたらす出力は次のようになります。
.LP
.RS 3

.LP
.nf
\f3
.fl
Compiled from DocFooter.java
.fl
public class DocFooter extends java.applet.Applet {
.fl
    java.lang.String date;
.fl
    java.lang.String email;
.fl
    public DocFooter();
.fl
    public void init();
.fl
    public void paint(java.awt.Graphics);
.fl
}
.fl

.fl
Method DocFooter()
.fl
   0 aload_0
.fl
   1 invokespecial #1 <Method java.applet.Applet()>
.fl
   4 return
.fl

.fl
Method void init()
.fl
   0 aload_0
.fl
   1 sipush 500
.fl
   4 bipush 100
.fl
   6 invokevirtual #2 <Method void resize(int, int)>
.fl
   9 aload_0
.fl
  10 aload_0
.fl
  11 ldc #3 <String "LAST_UPDATED">
.fl
  13 invokevirtual #4 <Method java.lang.String getParameter(java.lang.String)>
.fl
  16 putfield #5 <Field java.lang.String date>
.fl
  19 aload_0
.fl
  20 aload_0
.fl
  21 ldc #6 <String "EMAIL">
.fl
  23 invokevirtual #4 <Method java.lang.String getParameter(java.lang.String)>
.fl
  26 putfield #7 <Field java.lang.String email>
.fl
  29 return
.fl

.fl
Method void paint(java.awt.Graphics)
.fl
   0 aload_1
.fl
   1 new #8 <Class java.lang.StringBuffer>
.fl
   4 dup
.fl
   5 invokespecial #9 <Method java.lang.StringBuffer()>
.fl
   8 aload_0
.fl
   9 getfield #5 <Field java.lang.String date>
.fl
  12 invokevirtual #10 <Method java.lang.StringBuffer append(java.lang.String)>
.fl
  15 ldc #11 <String " by ">
.fl
  17 invokevirtual #10 <Method java.lang.StringBuffer append(java.lang.String)>
.fl
  20 invokevirtual #12 <Method java.lang.String toString()>
.fl
  23 bipush 100
.fl
  25 bipush 15
.fl
  27 invokevirtual #13 <Method void drawString(java.lang.String, int, int)>
.fl
  30 aload_1
.fl
  31 aload_0
.fl
  32 getfield #7 <Field java.lang.String email>
.fl
  35 sipush 290
.fl
  38 bipush 15
.fl
  40 invokevirtual #13 <Method void drawString(java.lang.String, int, int)>
.fl
  43 return
.fl
\fP
.fi
.RE

.LP
.SH "オプション"
.LP

.LP
.RS 3
.TP 3
\-help 
\f3javap\fP のヘルプメッセージを出力します。 
.TP 3
\-l 
行番号と局所変数テーブルを表示します。 
.TP 3
\-b 
JDK 1.1 の \f3javap\fP との下位互換性を保証します。 
.TP 3
\-public 
public クラスおよびメンバーだけを表示します。 
.TP 3
\-protected 
protected および public のクラスとメンバーだけを表示します。 
.TP 3
\-package 
package、protected、および public のクラスとメンバーだけを表示します。これはデフォルトの設定です。 
.TP 3
\-private 
すべてのクラスとメンバーを表示します。 
.TP 3
\-Jflag 
ランタイムシステムに直接 \f2flag\fP を渡します。使用例を次に示します。 
.RS 3

.LP
.nf
\f3
.fl
javap \-J\-version
.fl
javap \-J\-Djava.security.manager \-J\-Djava.security.policy=MyPolicy MyClassName
.fl
\fP
.fi
.RE
.TP 3
\-s 
内部の型シグニチャーを出力します。 
.TP 3
\-c 
クラスの各メソッドのために逆アセンブルされるコード、すなわち Java バイトコードから成る命令を表示します。これらは
.na
\f2「Java Virtual Machine Specification」\fP @
.fi
http://java.sun.com/docs/books/vmspec/にドキュメント化されています。 
.TP 3
\-verbose 
メソッドのスタックサイズ、および \f2locals\fP と \f2args\fP の数を出力します。 
.TP 3
\-classpath path 
\f3javap\fP がクラスを探すために使用するパスを指定します。デフォルトまたは CLASSPATH 環境変数設定を上書きします。ディレクトリはコロンで分割します。したがって、\f2path\fP の一般形式は次のようになります。 
.nf
\f3
.fl
   .:<your_path>
.fl
\fP
.fi
例を示します。 
.nf
\f3
.fl
.:/home/avh/classes:/usr/local/java/classes
.fl
\fP
.fi
.TP 3
\-bootclasspath path 
ブートストラップクラスをロードするパスを指定します。ブートストラップクラスは、デフォルトでは \f2jre/lib/rt.jar\fP および他のいくつかの JAR ファイル にある、コア Java 2 プラットフォームを実装するクラスです。 
.TP 3
\-extdirs dirs 
インストールされた拡張機能を検索する場所をオーバーライドします。The default location for extensions is the value of \f2java.ext.dirs\fP. 
.RE

.LP
.SH "環境変数"
.LP

.LP
.RS 3
.TP 3
CLASSPATH 
ユーザー定義クラスへのパスをシステムに指定します。ディレクトリはコロンで分割します。 次に例を示します。 
.RS 3

.LP
.nf
\f3
.fl
.:/home/avh/classes:/usr/local/java/classes
.fl
\fP
.fi
.RE
.RE

.LP
.SH "関連項目"
.LP

.LP
.LP
javac(1)、 java(1)、jdb(1)、javah(1)、javadoc(1)
.LP

.LP
 
