终端窗口javac编译java文件,java执行class文件注意事项
java代码如下:
public class AutoBoxingUnBoxing {
public static void main(String[] args) {
Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
System.out.println(f1 == f2);
System.out.println(f3 == f4);
}
}
1、第一点,存储的文件名必须和类名保持一致 AutoBoxingUnBoxing.java
运行
javac
命令, 文件名int和Integer自动装箱和拆箱.java
和 class 名AutoBoxingUnBoxing
不一致报错
生成class文件
PS D:\Users\JourneyOfFlower\Desktop> ls
目录: D:\Users\JourneyOfFlower\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2023.06.06 20:24 224 int和Integer自动装箱和拆箱.java
编译int和Integer自动装箱和拆箱.java
文件失败
D:\Users\JourneyOfFlower\Desktop\>javac .\int和Integer自动装箱和拆箱.java
.\int和Integer自动装箱和拆箱.java:1: 错误: 类AutoBoxingUnBoxing是公共的, 应在名为 AutoBoxingUnBoxing.java 的文件中声明
public class AutoBoxingUnBoxing {
^
1 个错误
2、将文件名改为和class名称一致
成功编译AutoBoxingUnBoxing.class
PS D:\Users\JourneyOfFlower\Desktop> javac .\AutoBoxingUnBoxing.java
PS D:\Users\JourneyOfFlower\Desktop>
生成AutoBoxingUnBoxing.class
文件
PS D:\Users\JourneyOfFlower\Desktop> ls
目录: D:\Users\JourneyOfFlower\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2023.06.06 20:26 671 AutoBoxingUnBoxing.class
-a---- 2023.06.06 20:26 224 AutoBoxingUnBoxing.java
3、java class文件
执行命令
成功执行
PS D:\Users\JourneyOfFlower\Desktop> java AutoBoxingUnBoxing
true
false
PS D:\Users\JourneyOfFlower\Desktop>
powershell
终端有一点坑,按 Tab
补全路径,即使文件在当前路径,仍会在路径前加 .\
前缀,并带上后缀.class
PS D:\Users\JourneyOfFlower\Desktop> java .\AutoBoxingUnBoxing.class
4、这里需要注意两点
class文件
不能带后缀名.class
PS D:\Users\JourneyOfFlower\Desktop> java AutoBoxingUnBoxing.class
错误: 找不到或无法加载主类 AutoBoxingUnBoxing.class
PS D:\Users\JourneyOfFlower\Desktop>
class文件
前不能带路径名
相对路径
.\
和绝对路径都不可以带,否则都会报错,提示找不到或无法加载主类
PS D:\Users\JourneyOfFlower\Desktop> java .\AutoBoxingUnBoxing
错误: 找不到或无法加载主类 .\AutoBoxingUnBoxing
PS D:\Users\JourneyOfFlower\Desktop>
PS D:\Users\JourneyOfFlower\Desktop> java D:\Users\JourneyOfFlower\Desktop\AutoBoxingUnBoxing
错误: 找不到或无法加载主类 D:\Users\JourneyOfFlower\Desktop\AutoBoxingUnBoxing
PS D:\Users\JourneyOfFlower\Desktop>
5、javap命令
javap
是 Java Development Kit(JDK)提供的一个命令行工具,用于反汇编 Java 类的字节码。它可以将 Java 类的字节码文件(.class 文件)反汇编成易于阅读的文本格式,以便于开发人员进行代码分析和调试。使用
javap
命令可以查看 Java 类的成员变量、方法、常量池等信息,以及它们的访问修饰符、参数类型、返回类型等详细信息。这些信息可以帮助开发人员理解 Java 代码的底层实现机制,以及进行性能优化和调试。
例如,以下是使用 javap
命令查看 Java 类的字节码信息的示例:
PS D:\Users\JourneyOfFlower\Desktop> javap -c .\AutoBoxingUnBoxing.class
Compiled from "AutoBoxingUnBoxing.java"
public class AutoBoxingUnBoxing {
public AutoBoxingUnBoxing();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: bipush 100
2: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
5: astore_1
6: bipush 100
8: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
11: astore_2
12: sipush 150
15: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
18: astore_3
19: sipush 150
22: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
25: astore 4
27: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream;
30: aload_1
31: aload_2
32: if_acmpne 39
35: iconst_1
36: goto 40
39: iconst_0
40: invokevirtual #4 // Method java/io/PrintStream.println:(Z)V
43: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream;
46: aload_3
47: aload 4
49: if_acmpne 56
52: iconst_1
53: goto 57
56: iconst_0
57: invokevirtual #4 // Method java/io/PrintStream.println:(Z)V
60: return
}
PS D:\Users\JourneyOfFlower\Desktop>
其中,-c
参数表示反汇编成指令代码,MyClass
是要查看的 Java 类的名称。执行该命令后,将输出 AutoBoxingUnBoxing
类的字节码信息,包括成员变量、方法、常量池等信息。
需要注意的是,javap
命令只能查看已编译的 Java 类的字节码信息,而无法查看源代码。如果要查看源代码,可以使用 Java IDE(如 Eclipse、IntelliJ IDEA)或其他反编译工具。