我是靠谱客的博主 奋斗时光,这篇文章主要介绍命令行中 javac、java、javap 的使用详解,现在分享给大家,希望可以做个参考。

进入命令窗口,若要切换到指定目录,例如 E 盘下的目录,有2种方法:

1)pushd [路径] ,此命令可将当前目录设为指定的任一个已存在的目录

复制代码
1
2
3
C:UsersAdministrator>pushd e:360Downloads E:360Downloads>dir // 显示当前目录下的目录及文件

2) 直接先输入 e: ,然后再用 cd 切换到指定目录

1. javac

javac是用来编译.java文件的。命令行下直接输入javac可以看到大量提示信息,提示javac命令的用法,常用格式如下:

javac -d destdir srcFile

1、-d destdir:指定存放编译生成的 .class 文件的路径。

当前目录可以用“.”来表示,即:javac -d . srcFile;

若此选项省略,那么默认在当前目录下生成 .class 文件,并且没有生成包文件夹;如 javac JavacTest.java ,便在当前路径下生成了一个JavacTest.class的文件。

这里写图片描述

JavacTest.java 是一个首行标注了 package 的 java 文件,而此时编译的字节码文件 JavacTest.class 在硬盘上的目录并未对应它的包名,所以,使用 java com.stopTalking.test.JavacTest 运行时是无法找到该java的。会报找不到该文件错误。

注意:添加 -d 选项除了可以指定存放编译生成的 .class 文件的路径外,最大的区别是可以将源文件首行的 package 关键字下的包名在当前路径下生成文件夹。

若输入,javac –d . JavacTest.java ,那么生成的 JavacTest.class 便在当前目录下生成的包文件中了:

这里写图片描述

2、srcFile 是源文件.java文件的路径。

例如:

复制代码
1
E:JavaWeb_workspacesapptestsrccomzxktest>javac -encoding utf-8 -d . SoftReferenceTest.java
  • 选项 -encoding utf-8 为编译指定编码,避免中文乱码。

2. java

然后执行该字节码文件,在大部分的教材中,看到直接使用 java JavacTest 便可执行,可是我们发现出现这样的错误:

这里写图片描述

这是因为,大部分的教材使用的类是默认包名的,即源文件的第一行是没有 package 指定包名的。使用一个类,我们需要使用它的全限定类名。

所以,在命令行需加上包层次目录:java com/stopTalking/test/JavacTest,便可看到正确的结果了。

总结:使用 java 命令运行一个.class文件,需要使用该类的全限定类名,同时需要在当前路径下有该类的包层次文件夹。这就必须要求编译时使用 -d 选项,否则需要手动建立包层次文件夹。

3. javap

javap 主要用于帮助开发者深入了解 Java 编译器的机制,主要选项有:

-c:分解方法代码,即显示每个方法具体的字节码

-public | protected | package | private:用于指定显示哪种级别的类成员

-verbose:指定显示更进一步的详细信息

输入 javap -c com/zxk/test/SoftReferenceTest ,输出信息显示如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
E:JavaWeb_workspacesdbBackupsrccomzxktest>javap -c com/zxk/test/SoftRefere nceTest Compiled from "SoftReferenceTest.java" public class com.zxk.test.SoftReferenceTest { public com.zxk.test.SoftReferenceTest(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>": ()V 4: return public static void main(java.lang.String[]); Code: 0: ldc #2 // int 100000 2: anewarray #3 // class java/lang/ref/SoftReference 5: astore_1 6: iconst_0 7: istore_2 8: iload_2 9: aload_1 10: arraylength 11: if_icmpge 59 14: new #4 // class com/zxk/test/Person 17: dup 18: new #5 // class java/lang/StringBuilder 21: dup 22: invokespecial #6 // Method java/lang/StringBuilder."< init>":()V 25: ldc #7 // String name 27: invokevirtual #8 // Method java/lang/StringBuilder.ap pend:(Ljava/lang/String;)Ljava/lang/StringBuilder; 30: iload_2 31: invokevirtual #9 // Method java/lang/StringBuilder.ap pend:(I)Ljava/lang/StringBuilder; 34: invokevirtual #10 // Method java/lang/StringBuilder.to String:()Ljava/lang/String; 37: iload_2 38: invokespecial #11 // Method com/zxk/test/Person."<init >":(Ljava/lang/String;I)V 41: astore_3 42: aload_1 43: iload_2 44: new #3 // class java/lang/ref/SoftReference 47: dup 48: aload_3 49: invokespecial #12 // Method java/lang/ref/SoftReferenc e."<init>":(Ljava/lang/Object;)V 52: aastore 53: iinc 2, 1 56: goto 8 59: getstatic #13 // Field java/lang/System.out:Ljava/ io/PrintStream; 62: new #5 // class java/lang/StringBuilder 65: dup 66: invokespecial #6 // Method java/lang/StringBuilder."< init>":()V 69: ldc #14 // String 回收前: 71: invokevirtual #8 // Method java/lang/StringBuilder.ap pend:(Ljava/lang/String;)Ljava/lang/StringBuilder; 74: aload_1 75: iconst_0 76: aaload 77: invokevirtual #15 // Method java/lang/ref/SoftReferenc e.get:()Ljava/lang/Object; 80: invokevirtual #16 // Method java/lang/StringBuilder.ap pend:(Ljava/lang/Object;)Ljava/lang/StringBuilder; 83: invokevirtual #10 // Method java/lang/StringBuilder.to String:()Ljava/lang/String; 86: invokevirtual #17 // Method java/io/PrintStream.printl n:(Ljava/lang/String;)V 89: invokestatic #18 // Method java/lang/System.gc:()V 92: getstatic #13 // Field java/lang/System.out:Ljava/ io/PrintStream; 95: new #5 // class java/lang/StringBuilder 98: dup 99: invokespecial #6 // Method java/lang/StringBuilder."< init>":()V 102: ldc #19 // String 回收后: 104: invokevirtual #8 // Method java/lang/StringBuilder.ap pend:(Ljava/lang/String;)Ljava/lang/StringBuilder; 107: aload_1 108: iconst_0 109: aaload 110: invokevirtual #15 // Method java/lang/ref/SoftReferenc e.get:()Ljava/lang/Object; 113: invokevirtual #16 // Method java/lang/StringBuilder.ap pend:(Ljava/lang/Object;)Ljava/lang/StringBuilder; 116: invokevirtual #10 // Method java/lang/StringBuilder.to String:()Ljava/lang/String; 119: invokevirtual #17 // Method java/io/PrintStream.printl n:(Ljava/lang/String;)V 122: return }
  •  

参考原文:

windows命令行中java和javac、javap使用详解(java编译命令)

最后

以上就是奋斗时光最近收集整理的关于命令行中 javac、java、javap 的使用详解的全部内容,更多相关命令行中内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(100)

评论列表共有 0 条评论

立即
投稿
返回
顶部