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 srcFile
1.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>{
@Override
public void setValue(Date value) {
super.setValue(value);
}
@Override
public 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 DateInteger
Compiled from "DateInteger.java"
public class DateInteger extends Pair<java.util.Date> {
public DateInteger();
Code:
0: aload_0
1: invokespecial #1 // Method Pair."<init>":()V
4: return
public void setValue(java.util.Date);
Code:
0: aload_0
1: aload_1
2: invokespecial #2 // Method Pair.setValue:(Ljava/lang/Object;)V
5: return
public java.util.Date getValue();
Code:
0: aload_0
1: invokespecial #3 // Method Pair.getValue:()Ljava/lang/Object;
4: checkcast #4 // class java/util/Date
7: areturn
public static void main(java.lang.String[]);
Code:
0: getstatic #5 // Field java/lang/System.out:Ljava/io/PrintStream;
3: new #6 // class DateInteger
6: dup
7: invokespecial #7 // Method "<init>":()V
10: invokevirtual #8 // Method getValue:()Ljava/util/Date;
13: invokevirtual #9 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
16: return
public void setValue(java.lang.Object);
Code:
0: aload_0
1: aload_1
2: checkcast #4 // class java/util/Date
5: invokevirtual #10 // Method setValue:(Ljava/util/Date;)V
8: return
public java.lang.Object getValue();
Code:
0: aload_0
1: invokevirtual #8 // Method getValue:()Ljava/util/Date;
4: areturn
}