终端窗口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)或其他反编译工具。

本文作者:Journey&Flower

本文链接:https://www.cnblogs.com/JourneyOfFlower/p/17461699.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Journey&Flower  阅读(134)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 404 Not Found REOL
404 Not Found - REOL
00:00 / 00:00
An audio error has occurred.

Fade away

Do over again

Fade away

Utai hajime no hitomojime

Itsumo mayotteru

Douse toritome no nai koto dakedo

Tsutawaranakya motto imi ga nai (Ooh-ooh, oh-oh-oh)

Doushitatte konna ni fukuzatsu nano ni

Kamikudaite yaranakya tsutawaranai

Hora kekkyoku kashi nanka dou datte ii

Boku no ongaku nanka kono yo ni nakutatte ii nda yo

Ii ndarou

Nee sou darou

Everybody don't know why

Everybody don't know much

Boku wa ki ni shinai, kimi wa kidzukanai

Doko ni mo mou inai inai

Everybody don't know why

Everybody don't know much

Wasureteiku, wasurerareteiku

We don't know, we don't know, no, no

Me no mae, hirogaru genjitsu sekai ga mata yuganda

Nando risetto shite mo

Boku wa boku igai no dareka ni wa umare kawarenai

Sonna no shitteru yo

Ki ni naru ano ko no uwasabanashi mo

Shinikaru hyouteki wa tsugi no sokuhou

Mahi shichatteru (Tteru) kokkara esukeepu (Keepu)

Tooku tooku made ikeru yo

Antei nante nai (Na-na-na-na)

Fuanteina sekai (Na-na-na-na)

Antei nante nai (Na-na-na-na)

Kitto ashita ni wa wasureru yo

Fade away

Do over again

Fade away

Souda sekai wa dokoka ga itsumo uso kusai

Kireigoto dake ja daijina hitotachi sura mamorenai

Kudaranai, bokura minna dokoka kurutteru mitai

Hontou no koto nanka zenbu kamisama mo shiranai

Kamisama mo shiranai (Woah, woah, woah, no, woah)

Kamisama mo shiranai (Woah, woah, woah, no, woah)

Kamisama mo shiranai, but

Kamisama mo shiranai (Woah, no, woah, no, woah)

Everybody don't know why

Everybody don't know much

Boku wa ki ni shinai, kimi wa kidzukanai

Doko ni mo mou inai inai

Everybody don't know why

Everybody don't know much

Wasureteiku, wasurerareteiku

We don't know, we don't know, oh, oh-oh-oh

Ahh, oh-oh-oh-oh

Woah, oh-oh-oh

Ooh, ooh, ooh, ooh-ooh-ooh-ooh