首页 文章

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

提问于
浏览
0

从命令行运行基本java程序是一个3个步骤:

  • 编写代码:

public class HelloWorld {public static void main(String [] args){System.out.println(“Hello,World”); }}

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

  • 通过给出类名运行代码 - > java HelloWorld

现在,我很想知道原因:

java HelloWorld 有效,但是当我们给出类文件的完整路径时,它会抛出一个错误

$ java HelloWorld.class 
Error: Could not find or load main class HelloWorld.class

如果我们只给出类名为Vs classname with file-extension,那会有什么影响?

3 回答

  • 1

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

  • 0

    如果我们只给出带有文件扩展名的Vs类名,那会有什么影响呢?

    这是因为它就是这样 . 自Java 1.0以来,Sun / Oracle已经实现了 java 命令以便以这种方式工作,并且更改它将会造成巨大的破坏性 .

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

  • 6

    如果我们只给出带有文件扩展名的Vs类名,那会有什么影响呢?

    你给 java 二进制文件的参数isn 't meant to be a filename. It' s意味着是一个类名 . 所以特别是,如果你想在包 foo.bar 中启动一个名为 Baz 的类,你会运行:

    java foo.bar.Baz
    

    所以类似地,如果你试图运行 java HelloWorld.class 它's as if you'试图在包 HelloWorld 中运行一个名为 class 的类,这是不正确的 .

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

相关问题