1、报错内容:
a、错误:找不到类
b、错误:找不到或无法加载主类
2、原因:虽然idea里面编译过对应文件,但是终端输入javap时候,依然报错:a或者b,虽然已经进入了对应文件的路径下面。好像是Mac需要首先找到文件所做目录,然后在该环境下利用javac编译一下该.java文件;再运行javap命令查看该.java文件对应的class文件的字节码。
3、javap功能:javap是idk自带的反编译工具命令,来查看class文件的字节码信息。
4、说明:Mac环境下,我的文件存储路径:
文件:~/IdeaProjects/JavaBaseTest/src/niukeWeb/evalRPN.java
5、首先进入目录:niukeWeb
该目录下编译该文件evalRPN.java
javap查看.class文件的字节码
以上3个命令如图:
输入第3个命令后:终端显示信息如下:
警告: 二进制文件evalRPN包含niukeWeb.evalRPN
Classfile /Users/caoxiaohong/IdeaProjects/JavaBaseTest/src/niukeWeb/evalRPN.class
Last modified 2017-6-22; size 1704 bytes
MD5 checksum ca2560d25a5b56ffa2e99b2294fd66fc
Compiled from "evalRPN.java"
public class niukeWeb.evalRPN
minor version: 0
major version: 52
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Methodref #29.#48 // java/lang/Object."<init>":()V
#2 = Class #49 // java/util/Stack
#3 = Methodref #2.#48 // java/util/Stack."<init>":()V
#4 = Fieldref #19.#50 // niukeWeb/evalRPN.stack:Ljava/util/Stack;
#5 = Fieldref #19.#51 // niukeWeb/evalRPN.length:I
#6 = Methodref #10.#52 // java/lang/Integer.parseInt:(Ljava/lang/String;)I
#7 = String #53 // +
#8 = Methodref #21.#54 // java/lang/String.equals:(Ljava/lang/Object;)Z
#9 = Methodref #2.#55 // java/util/Stack.pop:()Ljava/lang/Object;
#10 = Class #56 // java/lang/Integer
#11 = Methodref #10.#57 // java/lang/Integer.intValue:()I
#12 = Fieldref #19.#58 // niukeWeb/evalRPN.result:I
#13 = Methodref #10.#59 // java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
#14 = Methodref #2.#60 // java/util/Stack.push:(Ljava/lang/Object;)Ljava/lang/Object;
#15 = String #61 // -
#16 = String #62 // *
#17 = String #63 // /
#18 = Methodref #21.#64 // java/lang/String.trim:()Ljava/lang/String;
#19 = Class #65 // niukeWeb/evalRPN
#20 = Methodref #19.#48 // niukeWeb/evalRPN."<init>":()V
#21 = Class #66 // java/lang/String
#22 = String #67 // 2
#23 = String #68 // 1
#24 = String #69 // 3
#25 = Methodref #19.#70 // niukeWeb/evalRPN.evalRPN:([Ljava/lang/String;)I
#26 = Fieldref #71.#72 // java/lang/System.out:Ljava/io/PrintStream;
#27 = Methodref #73.#74 // java/io/PrintStream.println:(I)V
#28 = String #75 // 0
#29 = Class #76 // java/lang/Object
#30 = Utf8 stack
#31 = Utf8 Ljava/util/Stack;
#32 = Utf8 Signature
#33 = Utf8 Ljava/util/Stack<Ljava/lang/Integer;>;
#34 = Utf8 length
#35 = Utf8 I
#36 = Utf8 result
#37 = Utf8 <init>
#38 = Utf8 ()V
#39 = Utf8 Code
#40 = Utf8 LineNumberTable
#41 = Utf8 evalRPN
#42 = Utf8 ([Ljava/lang/String;)I
#43 = Utf8 StackMapTable
#44 = Utf8 main
#45 = Utf8 ([Ljava/lang/String;)V
#46 = Utf8 SourceFile
#47 = Utf8 evalRPN.java
#48 = NameAndType #37:#38 // "<init>":()V
#49 = Utf8 java/util/Stack
#50 = NameAndType #30:#31 // stack:Ljava/util/Stack;
#51 = NameAndType #34:#35 // length:I
#52 = NameAndType #77:#78 // parseInt:(Ljava/lang/String;)I
#53 = Utf8 +
#54 = NameAndType #79:#80 // equals:(Ljava/lang/Object;)Z
#55 = NameAndType #81:#82 // pop:()Ljava/lang/Object;
#56 = Utf8 java/lang/Integer
#57 = NameAndType #83:#84 // intValue:()I
#58 = NameAndType #36:#35 // result:I
#59 = NameAndType #85:#86 // valueOf:(I)Ljava/lang/Integer;
#60 = NameAndType #87:#88 // push:(Ljava/lang/Object;)Ljava/lang/Object;
#61 = Utf8 -
#62 = Utf8 *
#63 = Utf8 /
#64 = NameAndType #89:#90 // trim:()Ljava/lang/String;
#65 = Utf8 niukeWeb/evalRPN
#66 = Utf8 java/lang/String
#67 = Utf8 2
#68 = Utf8 1
#69 = Utf8 3
#70 = NameAndType #41:#42 // evalRPN:([Ljava/lang/String;)I
#71 = Class #91 // java/lang/System
#72 = NameAndType #92:#93 // out:Ljava/io/PrintStream;
#73 = Class #94 // java/io/PrintStream
#74 = NameAndType #95:#96 // println:(I)V
#75 = Utf8 0
#76 = Utf8 java/lang/Object
#77 = Utf8 parseInt
#78 = Utf8 (Ljava/lang/String;)I
#79 = Utf8 equals
#80 = Utf8 (Ljava/lang/Object;)Z
#81 = Utf8 pop
#82 = Utf8 ()Ljava/lang/Object;
#83 = Utf8 intValue
#84 = Utf8 ()I
#85 = Utf8 valueOf
#86 = Utf8 (I)Ljava/lang/Integer;
#87 = Utf8 push
#88 = Utf8 (Ljava/lang/Object;)Ljava/lang/Object;
#89 = Utf8 trim
#90 = Utf8 ()Ljava/lang/String;
#91 = Utf8 java/lang/System
#92 = Utf8 out
#93 = Utf8 Ljava/io/PrintStream;
#94 = Utf8 java/io/PrintStream
#95 = Utf8 println
#96 = Utf8 (I)V
{
java.util.Stack<java.lang.Integer> stack;
descriptor: Ljava/util/Stack;
flags:
Signature: #33 // Ljava/util/Stack<Ljava/lang/Integer;>;
int length;
descriptor: I
flags:
int result;
descriptor: I
flags:
public niukeWeb.evalRPN();
descriptor: ()V
flags: ACC_PUBLIC
Code:
stack=3, locals=1, args_size=1
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: aload_0
5: new #2 // class java/util/Stack
8: dup
9: invokespecial #3 // Method java/util/Stack."<init>":()V
12: putfield #4 // Field stack:Ljava/util/Stack;
15: return
LineNumberTable:
line 11: 0
line 12: 4
int evalRPN(java.lang.String[]);
descriptor: ([Ljava/lang/String;)I
flags:
Code:
stack=3, locals=5, args_size=2
0: aload_0
1: aload_1
2: arraylength
3: putfield #5 // Field length:I
6: aload_0
7: getfield #5 // Field length:I
10: iconst_1
11: if_icmpne 21
14: aload_1
15: iconst_0
16: aaload
17: invokestatic #6 // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
20: ireturn
21: iconst_0
22: istore_2
23: iload_2
24: aload_0
25: getfield #5 // Field length:I
28: if_icmpge 321
31: aload_1
32: iload_2
33: aaload
34: ldc #7 // String +
36: invokevirtual #8 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
39: ifeq 97
42: aload_0
43: getfield #4 // Field stack:Ljava/util/Stack;
46: invokevirtual #9 // Method java/util/Stack.pop:()Ljava/lang/Object;
49: checkcast #10 // class java/lang/Integer
52: invokevirtual #11 // Method java/lang/Integer.intValue:()I
55: istore_3
56: aload_0
57: getfield #4 // Field stack:Ljava/util/Stack;
60: invokevirtual #9 // Method java/util/Stack.pop:()Ljava/lang/Object;
63: checkcast #10 // class java/lang/Integer
66: invokevirtual #11 // Method java/lang/Integer.intValue:()I
69: istore 4
71: aload_0
72: iload_3
73: iload 4
75: iadd
76: putfield #12 // Field result:I
79: aload_0
80: getfield #4 // Field stack:Ljava/util/Stack;
83: aload_0
84: getfield #12 // Field result:I
87: invokestatic #13 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
90: invokevirtual #14 // Method java/util/Stack.push:(Ljava/lang/Object;)Ljava/lang/Object;
93: pop
94: goto 315
97: aload_1
98: iload_2
99: aaload
100: ldc #15 // String -
102: invokevirtual #8 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
105: ifeq 163
108: aload_0
109: getfield #4 // Field stack:Ljava/util/Stack;
112: invokevirtual #9 // Method java/util/Stack.pop:()Ljava/lang/Object;
115: checkcast #10 // class java/lang/Integer
118: invokevirtual #11 // Method java/lang/Integer.intValue:()I
121: istore_3
122: aload_0
123: getfield #4 // Field stack:Ljava/util/Stack;
126: invokevirtual #9 // Method java/util/Stack.pop:()Ljava/lang/Object;
129: checkcast #10 // class java/lang/Integer
132: invokevirtual #11 // Method java/lang/Integer.intValue:()I
135: istore 4
137: aload_0
138: iload 4
140: iload_3
141: isub
142: putfield #12 // Field result:I
145: aload_0
146: getfield #4 // Field stack:Ljava/util/Stack;
149: aload_0
150: getfield #12 // Field result:I
153: invokestatic #13 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
156: invokevirtual #14 // Method java/util/Stack.push:(Ljava/lang/Object;)Ljava/lang/Object;
159: pop
160: goto 315
163: aload_1
164: iload_2
165: aaload
166: ldc #16 // String *
168: invokevirtual #8 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
171: ifeq 229
174: aload_0
175: getfield #4 // Field stack:Ljava/util/Stack;
178: invokevirtual #9 // Method java/util/Stack.pop:()Ljava/lang/Object;
181: checkcast #10 // class java/lang/Integer
184: invokevirtual #11 // Method java/lang/Integer.intValue:()I
187: istore_3
188: aload_0
189: getfield #4 // Field stack:Ljava/util/Stack;
192: invokevirtual #9 // Method java/util/Stack.pop:()Ljava/lang/Object;
195: checkcast #10 // class java/lang/Integer
198: invokevirtual #11 // Method java/lang/Integer.intValue:()I
201: istore 4
203: aload_0
204: iload_3
205: iload 4
207: imul
208: putfield #12 // Field result:I
211: aload_0
212: getfield #4 // Field stack:Ljava/util/Stack;
215: aload_0
216: getfield #12 // Field result:I
219: invokestatic #13 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
222: invokevirtual #14 // Method java/util/Stack.push:(Ljava/lang/Object;)Ljava/lang/Object;
225: pop
226: goto 315
229: aload_1
230: iload_2
231: aaload
232: ldc #17 // String /
234: invokevirtual #8 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
237: ifeq 295
240: aload_0
241: getfield #4 // Field stack:Ljava/util/Stack;
244: invokevirtual #9 // Method java/util/Stack.pop:()Ljava/lang/Object;
247: checkcast #10 // class java/lang/Integer
250: invokevirtual #11 // Method java/lang/Integer.intValue:()I
253: istore_3
254: aload_0
255: getfield #4 // Field stack:Ljava/util/Stack;
258: invokevirtual #9 // Method java/util/Stack.pop:()Ljava/lang/Object;
261: checkcast #10 // class java/lang/Integer
264: invokevirtual #11 // Method java/lang/Integer.intValue:()I
267: istore 4
269: aload_0
270: iload 4
272: iload_3
273: idiv
274: putfield #12 // Field result:I
277: aload_0
278: getfield #4 // Field stack:Ljava/util/Stack;
281: aload_0
282: getfield #12 // Field result:I
285: invokestatic #13 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
288: invokevirtual #14 // Method java/util/Stack.push:(Ljava/lang/Object;)Ljava/lang/Object;
291: pop
292: goto 315
295: aload_0
296: getfield #4 // Field stack:Ljava/util/Stack;
299: aload_1
300: iload_2
301: aaload
302: invokevirtual #18 // Method java/lang/String.trim:()Ljava/lang/String;
305: invokestatic #6 // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
308: invokestatic #13 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
311: invokevirtual #14 // Method java/util/Stack.push:(Ljava/lang/Object;)Ljava/lang/Object;
314: pop
315: iinc 2, 1
318: goto 23
321: aload_0
322: getfield #12 // Field result:I
325: ireturn
LineNumberTable:
line 16: 0
line 17: 6
line 19: 21
line 20: 31
line 21: 42
line 22: 56
line 23: 71
line 24: 79
line 25: 94
line 26: 108
line 27: 122
line 28: 137
line 29: 145
line 30: 160
line 31: 174
line 32: 188
line 33: 203
line 34: 211
line 35: 226
line 36: 240
line 37: 254
line 38: 269
line 39: 277
line 40: 292
line 42: 295
line 19: 315
line 45: 321
StackMapTable: number_of_entries = 8
frame_type = 21 /* same */
frame_type = 252 /* append */
offset_delta = 1
locals = [ int ]
frame_type = 251 /* same_frame_extended */
offset_delta = 73
frame_type = 251 /* same_frame_extended */
offset_delta = 65
frame_type = 251 /* same_frame_extended */
offset_delta = 65
frame_type = 251 /* same_frame_extended */
offset_delta = 65
frame_type = 19 /* same */
frame_type = 250 /* chop */
offset_delta = 5
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=4, locals=8, args_size=1
0: new #19 // class niukeWeb/evalRPN
3: dup
4: invokespecial #20 // Method "<init>":()V
7: astore_1
8: iconst_5
9: anewarray #21 // class java/lang/String
12: dup
13: iconst_0
14: ldc #22 // String 2
16: aastore
17: dup
18: iconst_1
19: ldc #23 // String 1
21: aastore
22: dup
23: iconst_2
24: ldc #7 // String +
26: aastore
27: dup
28: iconst_3
29: ldc #24 // String 3
31: aastore
32: dup
33: iconst_4
34: ldc #16 // String *
36: aastore
37: astore_2
38: aload_1
39: aload_2
40: invokevirtual #25 // Method evalRPN:([Ljava/lang/String;)I
43: istore_3
44: getstatic #26 // Field java/lang/System.out:Ljava/io/PrintStream;
47: iload_3
48: invokevirtual #27 // Method java/io/PrintStream.println:(I)V
51: iconst_1
52: anewarray #21 // class java/lang/String
55: dup
56: iconst_0
57: ldc #22 // String 2
59: aastore
60: astore 4
62: aload_1
63: aload 4
65: invokevirtual #25 // Method evalRPN:([Ljava/lang/String;)I
68: istore 5
70: getstatic #26 // Field java/lang/System.out:Ljava/io/PrintStream;
73: iload 5
75: invokevirtual #27 // Method java/io/PrintStream.println:(I)V
78: iconst_3
79: anewarray #21 // class java/lang/String
82: dup
83: iconst_0
84: ldc #28 // String 0
86: aastore
87: dup
88: iconst_1
89: ldc #24 // String 3
91: aastore
92: dup
93: iconst_2
94: ldc #17 // String /
96: aastore
97: astore 6
99: aload_1
100: aload 6
102: invokevirtual #25 // Method evalRPN:([Ljava/lang/String;)I
105: istore 7
107: getstatic #26 // Field java/lang/System.out:Ljava/io/PrintStream;
110: iload 7
112: invokevirtual #27 // Method java/io/PrintStream.println:(I)V
115: return
LineNumberTable:
line 49: 0
line 50: 8
line 51: 38
line 52: 44
line 54: 51
line 55: 62
line 56: 70
line 58: 78
line 59: 99
line 60: 107
line 61: 115
}
SourceFile: "evalRPN.java"
cxhdeMacBook-Air:niukeweb caoxiaohong$
到此,查看.class字节码的准备工作就做完了,通过分析字节码信息来分析.class文件中常量等信息。
6、补充:.class文件结构:
类文件{
OxCAFEBABE,小版本号,大版本号,常量池大小,常量池数组,访问控制标记,当前类信息,父类信息,实现的接口个数,实现的接口信息数组,域个数,域信息数组,方法个数,方法信息数组,属性个数,属性信息数组
}