1、命令行中 javac
1.1、javac-概述
把.java文件编译为.class文件
1.2、javac-语法
1、语法:javac [ options ] [ sourcefiles ] [ @files ]1.1、参数选项:1.1.1、option:命令行选项1.1.2、sourcefiles :一个或多个要编译的源文件1.1.3、@files一个或多个对源文件进行列表的文件2、javac 或者javac -help命令,系统会提示javac的所有用法
1.3、javac-相关命令
1、javac -d destdir srcFile1.1、-d destdir:指定存放编译生成的 .class 文件的路径;当前目录可以用"."来表示。1.2、srcFile:源文件.java文件所在路径。1.3、可以指定编码防止乱码1.3.1、比如:javac -encoding utf-8 -d . xxxx.java
2、命令行中javap
2.1、javap-概述
根据class字节码文件,反解析出当前类对应的code区(汇编指令)、本地变量表、异常表和代码行偏移量映射表、常量池等等信息。
2.2、javap-相关命令
javap -v classxx,不仅会输出行号、本地变量表信息、反编译汇编代码,还会输出当前类用到的常量池等信息。javap -l 会输出行号和本地变量表信息。javap -c 会对当前class字节码进行反编译生成汇编代码。
3、javac|javap命令-demo
3.1、新建所需执行的类
###父类public class Pair<T> {private T value;public T getValue() {return value;}public void setValue(T value) {this.value = value;}}###子类import java.util.Date;public class DateInteger extends Pair<Date>{@Overridepublic void setValue(Date value) {super.setValue(value);}@Overridepublic Date getValue() {return super.getValue();}public static void main(String[] args) {System.out.println(new DateInteger().getValue());}}
3.2、将所建类放到同一目录下
比如:C:\Users\zhouxinrong\Desktop\demo
3.3、执行javac命令
javac DateInteger.java
3.4、执行javap命令
javap -c DateInteger
3.4.1、命令执行结果示例
C:\Users\zhouxinrong\Desktop\demo>javap -c DateIntegerCompiled from "DateInteger.java"public class DateInteger extends Pair<java.util.Date> {public DateInteger();Code:0: aload_01: invokespecial #1 // Method Pair."<init>":()V4: returnpublic void setValue(java.util.Date);Code:0: aload_01: aload_12: invokespecial #2 // Method Pair.setValue:(Ljava/lang/Object;)V5: returnpublic java.util.Date getValue();Code:0: aload_01: invokespecial #3 // Method Pair.getValue:()Ljava/lang/Object;4: checkcast #4 // class java/util/Date7: areturnpublic static void main(java.lang.String[]);Code:0: getstatic #5 // Field java/lang/System.out:Ljava/io/PrintStream;3: new #6 // class DateInteger6: dup7: invokespecial #7 // Method "<init>":()V10: invokevirtual #8 // Method getValue:()Ljava/util/Date;13: invokevirtual #9 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V16: returnpublic void setValue(java.lang.Object);Code:0: aload_01: aload_12: checkcast #4 // class java/util/Date5: invokevirtual #10 // Method setValue:(Ljava/util/Date;)V8: returnpublic java.lang.Object getValue();Code:0: aload_01: invokevirtual #8 // Method getValue:()Ljava/util/Date;4: areturn}
