SE450: Java Tools: javap [38/41] ![]() ![]() ![]() |
javap is useful if you have existing .class files and need to determine a little about what methods they have and what their structure is. It isn't a complete decompiler. For that, check out jad. But it tells us a little bit more about the java language.
To run javap, you use the standard classpath variable. Just give javap the name of the Class you want to disassemble, and if it is in your classpath, it will print the method signatures of your class. For Hello:
D:\se450>javap Hello Compiled from Hello.java public class Hello extends java.lang.Object { public Hello(); public static void main(java.lang.String[]); }
javap will also print the bytecodes of the class file according the
Java virtual machine specification. This is done with the -c option.D:\se450>javap -c Hello Compiled from Hello.java public class Hello extends java.lang.Object { public Hello(); public static void main(java.lang.String[]); } Method Hello() 0 aload_0 1 invokespecial #1 <Method java.lang.Object()> 4 return Method void main(java.lang.String[]) 0 getstatic #2 <Field java.io.PrintStream out> 3 ldc #3 <String "Hello from Venus!"> 5 invokevirtual #4 <Method void println(java.lang.String)> 8 return
For java.lang.String!
D:\school\se450\fall02\source\code\example>javap java.lang.String Compiled from String.java public final class java.lang.String extends java.lang.Object implements java.io.Serializable, java.lang.C omparable, java.lang.CharSequence { public static final java.util.Comparator CASE_INSENSITIVE_ORDER; public java.lang.String(); public java.lang.String(java.lang.String); public java.lang.String(char[]); public java.lang.String(char[],int,int); public java.lang.String(byte[],int,int,int); public java.lang.String(byte[],int); public java.lang.String(byte[],int,int,java.lang.String) throws java.io.UnsupportedEncodingException; public java.lang.String(byte[],java.lang.String) throws java.io.UnsupportedEncodingException; public java.lang.String(byte[],int,int); public java.lang.String(byte[]); public java.lang.String(java.lang.StringBuffer); java.lang.String(int,int,char[]); public int length(); public char charAt(int); public void getChars(int, int, char[], int); public void getBytes(int, int, byte[], int); public byte getBytes(java.lang.String)[] throws java.io.UnsupportedEncodingException; public byte getBytes()[]; public boolean equals(java.lang.Object); public boolean contentEquals(java.lang.StringBuffer); public boolean equalsIgnoreCase(java.lang.String); public int compareTo(java.lang.String); public int compareTo(java.lang.Object); public int compareToIgnoreCase(java.lang.String); public boolean regionMatches(int, java.lang.String, int, int); public boolean regionMatches(boolean, int, java.lang.String, int, int); public boolean startsWith(java.lang.String, int); public boolean startsWith(java.lang.String); public boolean endsWith(java.lang.String); public int hashCode(); public int indexOf(int); public int indexOf(int, int); public int lastIndexOf(int); public int lastIndexOf(int, int); public int indexOf(java.lang.String); public int indexOf(java.lang.String, int); static int indexOf(char[], int, int, char[], int, int, int); public int lastIndexOf(java.lang.String); public int lastIndexOf(java.lang.String, int); static int lastIndexOf(char[], int, int, char[], int, int, int); public java.lang.String substring(int); public java.lang.String substring(int, int); public java.lang.CharSequence subSequence(int, int); public java.lang.String concat(java.lang.String); public java.lang.String replace(char, char); public boolean matches(java.lang.String); public java.lang.String replaceFirst(java.lang.String, java.lang.String); public java.lang.String replaceAll(java.lang.String, java.lang.String); public java.lang.String split(java.lang.String, int)[]; public java.lang.String split(java.lang.String)[]; public java.lang.String toLowerCase(java.util.Locale); public java.lang.String toLowerCase(); public java.lang.String toUpperCase(java.util.Locale); public java.lang.String toUpperCase(); public java.lang.String trim(); public java.lang.String toString(); public char toCharArray()[]; public static java.lang.String valueOf(java.lang.Object); public static java.lang.String valueOf(char[]); public static java.lang.String valueOf(char[], int, int); public static java.lang.String copyValueOf(char[], int, int); public static java.lang.String copyValueOf(char[]); public static java.lang.String valueOf(boolean); public static java.lang.String valueOf(char); public static java.lang.String valueOf(int); public static java.lang.String valueOf(long); public static java.lang.String valueOf(float); public static java.lang.String valueOf(double); public native java.lang.String intern(); static {}; }
One nice use of javap is to check if you have a class in your classpath. Just run javap against the class that you need to find (it doesn't need to be a command line program) and it will tell you if it is or isnt' in your classpath.