Java命令行工具:javac、java、javap 的使用详解
1、javac
javac用来编译.java文件的。常用格式如下所示:
javac -d destdir srcfile
-d destdir:指定存放编译生成的 .class 文件的路径。如果想省事一点,则使用当前目录即可,当前目录可以用"."来表示,即:javac -d . srcfile。
如果选项 -d 省略,虽然也是在当前目录下生成 .class 文件,但是不会生成包文件夹。例如下面的代码:
package cn.mybatis;
public class Test
{
public static void main(String[] args)
{
System.out.print("Hello World!");
}
}
1.1 不带 -d
C:\Users\mybatis>javac Test.java
直接生成 Test.class 文件
1.2 不带 -d
C:\Users\mybatis>javac -d . Test.java
先创建目录 C:Usersmybatiscnmybatis,然后生成 Test.class 文件。
2、java
执行该字节码文件,格式是:java 类的全称。例如执行上述的 Test.class 文件的命令是:
C:\Users\mybatis>java cn.mybatis.Test
Hello World!
注意:类的全称,而不是class的文件名,不需要带.class后缀。另外,class文件的存放地址是遵照类的包层次。也就是说,javac Test.java 可以在当下目录生成 Test.class 文件,但是 java Test 是无法
执行此class文件的,必须把此class文件放到 C:Usersmybatiscnmybatis 下才能执行。所以,就必须要求编译时使用 -d 选项,否则需要手动建立包层次文件夹。
3、javap
javap 主要用于帮助开发者深入了解 Java 编译器的机制,主要选项有:-c,用于分解方法代码,即显示每个方法具体的字节码,如下所示:
C:\Users\mybatis>javap -c cn.mybatis.Test
Compiled from "Test.java"
public class cn.mybatis.Test {
public cn.mybatis.Test();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3 // String Hello World!
5: invokevirtual #4 // Method java/io/PrintStream.print:(Ljava/lang/String;)V
8: return
}