java编译:类名Vs带文件扩展名的类名

java编译:类名Vs带文件扩展名的类名,java,Java,从命令行运行基本java程序需要3个步骤: 编写代码: 公共类HelloWorld{ 公共静态void main(字符串[]args){ System.out.println(“你好,世界”); } } 通过javac HellWorld.java编译,它将检查错误并生成HelloWorld.class文件 通过提供类名-->java HelloWorld来运行代码 现在,, 我很想知道为什么: javahelloworld可以工作,但当我们给出类文件的完整路径时,它会抛出一个错误 $ java

从命令行运行基本java程序需要3个步骤:

  • 编写代码:

    公共类HelloWorld{ 公共静态void main(字符串[]args){ System.out.println(“你好,世界”); } }

  • 通过
    javac HellWorld.java
    编译,它将检查错误并生成
    HelloWorld.class
    文件

  • 通过提供类名-->
    java HelloWorld来运行代码

  • 现在,, 我很想知道为什么:

    javahelloworld
    可以工作,但当我们给出类文件的完整路径时,它会抛出一个错误

    $ java HelloWorld.class 
    Error: Could not find or load main class HelloWorld.class
    
    如果我们只给出类名与文件扩展名为的类名有什么区别

    如果我们只给出类名和带有文件扩展名的类名,会有什么不同

    您为
    java
    二进制文件提供的参数不是文件名。它应该是一个类名。因此,特别是,如果您试图在package
    foo.bar
    中启动名为
    Baz
    的类,您将运行:

    java foo.bar.Baz
    
    同样,如果您试图运行
    javahelloworld.class
    ,就好像您试图在包
    HelloWorld
    中运行名为
    class
    的类一样,这是不正确的


    基本上,您不应该将参数视为文件名,而应该将其视为完全限定的类名。见鬼,文件系统上甚至可能没有一个简单的
    Baz.class
    文件,它可能隐藏在jar文件中。

    在Java编程语言中,源文件(.Java文件)被编译成(虚拟)机器可读的类文件,扩展名为.class

    编译后运行java类文件时,请运行以下命令:

    java HelloWorld

    注意:需要设置java类路径

    如果我们只给出类名和带有文件扩展名的类名,会有什么不同

    因为事情就是这样。自Java1.0以来,Sun/Oracle已经实现了
    java
    命令,以这种方式工作,更改它将造成巨大的破坏

    正如Jon所说,该命令的参数是一个完全限定的类名,而不是文件名。实际上,名为
    HelloWorld.class
    的文件很可能不存在。它可能是JAR文件的成员。。。或者在某些情况下,什么都可以


    在Java 11及更高版本中,还可以使用以下单个命令编译和运行单个Java源文件:

    java HelloWorld.java
    

    (这可能是因为Oracle不再支持没有Java字节码编译器的Java发行版。)

    Java查找HelloWorld类。当你给HelloWorld.class时,它会寻找有用的类“HelloWorld.class”,谢谢你花时间回答:)他知道。你还没有回答真正的问题。