Pre-General Availability: 2017-05-24

javap

You use the javap command to disassemble one or more class files.

Synopsis

javap [options] classes...
options

The command-line options. See Options for javap.

classes

One or more classes separated by spaces to be processed for annotations. You can specify a class that can be found in the class path by its file name, URL, or by its fully qualified class name.

Examples:

path/to/MyClass.class
jar:file:///path/to/MyJar.jar!/mypkg/MyClass.class
 java.lang.Object

Description

The javap command disassembles one or more class files. The output depends on the options used. When no options are used, the javap command prints the protected and public fields, and methods of the classes passed to it.

The javap command isn’t multi-release .jar aware. Using the class path form of the command results in viewing the base entry in all .jar files, multi-release or not. Using the URL form, you can use the URL form of an argument to specify a specific version of a class to be disassembled.

The javap command prints its output to stdout.

Note:

In tools that support -- style options, the GNU-style options can use = instead of a whitespace to separate the name of an option from its value.

Options for javap

-help , --help , or -?

Prints a help message for the javap command.

-version

Prints release information.

-verbose or -v

Prints out additional information about the selected class.

-l

Prints line and local variable tables.

-public

Shows only public classes and members.

-protected

Shows only protected and public classes and members.

-package

Shows package/protected/public classes and members (default).

-private or -p

Shows all classes and members.

-c

Prints disassembled code, for example, the instructions that comprise the Java bytecodes, for each of the methods in the class.

-s

Prints internal type signatures.

-sysinfo

Shows system information (path, size, date, MD5 hash) of the class being processed.

-constants

Shows static final constants.

--module module or -m module

Specify module containing classes to be disassembled.

--module-path path

Specify where to find application modules.

--system jdk

Specify where to find system modules 

--class-path path, -classpath path , or -cp path

Specifies the path the javap command uses to find user class files. Overrides the default or the CLASSPATH environment variable when it is set.

-bootclasspath path

Overrides the location of bootstrap class files.

-Joption

Passes the specified option to the JVM. For example:

javap -J-version

javap -J-Djava.security.manager -J-Djava.security.policy=MyPolicy MyClassName

See Overview of java Options.

javap Example

Compile the following HelloWorldFrame class:

import java.awt.Graphics;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
 
public class HelloWorldFrame extends JFrame {
 
   String message = "Hello World!";
 
   public HelloWorldFrame(){
        setContentPane(new JPanel(){
            @Override
            protected void paintComponent(Graphics g) {
                g.drawString(message ,15, 30);
            }
        });
        setSize(100,100);
    }
    public static void main(String[] args) {
        HelloWorldFrame frame = new HelloWorldFrame();
        frame.setVisible(true);
 
    }
 
}

The output from the javap HelloWorldFrame.class command yields the following:

Compiled from "HelloWorldFrame.java"
public class HelloWorldFrame extends javax.swing.JFrame {
  java.lang.String message;
  public HelloWorldFrame();
  public static void main(java.lang.String[]);
}

The output from javap -c HelloWorldFrame.class command yields the following:

Compiled from "HelloWorldFrame.java"
public class HelloWorldFrame extends javax.swing.JFrame {
  java.lang.String message;
 
  public HelloWorldFrame();
    Code:
       0: aload_0
       1: invokespecial #1        // Method javax/swing/JFrame."<init>":()V
       4: aload_0
       5: ldc           #2        // String Hello World!
       7: putfield      #3        // Field message:Ljava/lang/String;
      10: aload_0
      11: new           #4        // class HelloWorldFrame$1
      14: dup
      15: aload_0
      16: invokespecial #5        // Method HelloWorldFrame$1."<init>":(LHelloWorldFrame;)V
      19: invokevirtual #6        // Method setContentPane:(Ljava/awt/Container;)V
      22: aload_0
      23: bipush        100
      25: bipush        100
      27: invokevirtual #7        // Method setSize:(II)V
      30: return
 
  public static void main(java.lang.String[]);
    Code:
       0: new           #8        // class HelloWorldFrame
       3: dup
       4: invokespecial #9        // Method "<init>":()V
       7: astore_1
       8: aload_1
       9: iconst_1
      10: invokevirtual #10       // Method setVisible:(Z)V
      13: return
}