java编译:类名Vs带文件扩展名的类名
从命令行运行基本java程序需要3个步骤:java编译:类名Vs带文件扩展名的类名,java,Java,从命令行运行基本java程序需要3个步骤: 编写代码: 公共类HelloWorld{ 公共静态void main(字符串[]args){ System.out.println(“你好,世界”); } } 通过javac HellWorld.java编译,它将检查错误并生成HelloWorld.class文件 通过提供类名-->java HelloWorld来运行代码 现在,, 我很想知道为什么: javahelloworld可以工作,但当我们给出类文件的完整路径时,它会抛出一个错误 $ java
javac HellWorld.java
编译,它将检查错误并生成HelloWorld.class
文件java HelloWorld来运行代码
javahelloworld
可以工作,但当我们给出类文件的完整路径时,它会抛出一个错误
$ java HelloWorld.class
Error: Could not find or load main class HelloWorld.class
如果我们只给出类名与文件扩展名为的类名有什么区别
如果我们只给出类名和带有文件扩展名的类名,会有什么不同
您为java
二进制文件提供的参数不是文件名。它应该是一个类名。因此,特别是,如果您试图在packagefoo.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”,谢谢你花时间回答:)他知道。你还没有回答真正的问题。