当前位置: 首页 > 知识库问答 >
问题:

“java”命令是否编译java程序?

孟树
2023-03-14

互联网上的大多数网站都说:

“使用javac命令编译.java文件。然后使用java命令运行它”

但是今天我试着运行一个没有javac的java程序,得到了一个奇怪的结果。

下面是名为hello.java的文件的内容:

public class Myclass {
 public static void main(String[] args){
    System.out.println("hello world");
  }
}

然后我跑:

$ javac hello.java

这给了我这个错误:

hello.java:1: error: class Myclass is public, should be declared in a file named Myclass.java
public class Myclass {
       ^
1 error

但是,当我在没有javac命令的情况下运行它时,它执行时没有任何错误。

$ java hello.java
hello world

java命令是否也编译程序?如果是,为什么我们需要javac命令?

我的java版本是:

openjdk version "12.0.2" 2019-07-16
OpenJDK Runtime Environment (build 12.0.2+10)
OpenJDK 64-Bit Server VM (build 12.0.2+10, mixed mode)

共有3个答案

茹元魁
2023-03-14
匿名用户

要回答为什么给出这个错误,文件的类名必须与文件的basename匹配。

对于传统的javac,有两个选项可以让此代码工作<代码>java顺序:

>

  • 将类重命名为公共类Hello

    hello.java重命名为myclass.java

    Java11的java解释器不强制执行此要求。包含main的类可以有任何名称,只要它是文件中的第一个类。这主要是为了简化初学者的学习过程,并允许“java脚本”与sheang(参考文献。)。

  • 竺承望
    2023-03-14

    如果您运行的是Java11,那么有一个新特性允许单源文件执行。单源编译器在类名和文件名方面更加混乱,因此这就是您能够运行但无法成功编译的方式。

    如果您使用的是以前版本的Java,那么您当前的hello.Java不会编译,因为编译错误,特别是在类名周围。所以调用java hello.java绝对不可能编译代码,因为它不编译

    在执行java命令时,很可能您正在运行一些以前编译过的代码。

    易飞文
    2023-03-14

    在Java11之前,要运行代码,必须先编译代码,然后才能运行它。下面是一个例子:

    javac test.java
    java test
    

    从Java11开始,你仍然可以做javacjava,或者你可以自己运行java来编译和自动运行你的代码。请注意,不会生成. class文件。这里有一个例子:

    java test.java
    

    如果运行java-help,您将看到各种允许的用法。这是我的机器上的样子。最后一个是您遇到的:java[options]

    $ java -help
    Usage: java [options] <mainclass> [args...]
               (to execute a class)
       or  java [options] -jar <jarfile> [args...]
               (to execute a jar file)
       or  java [options] -m <module>[/<mainclass>] [args...]
           java [options] --module <module>[/<mainclass>] [args...]
               (to execute the main class in a module)
       or  java [options] <sourcefile> [args]
               (to execute a single source-file program)
    

    更新:

    正如@BillK所指出的,OP还问道:

    为什么我们需要javac命令?

    我们需要javac的原因是创建.class文件,这样代码就可以像今天一样被创建、测试、分发、运行、共享等等。JEP330的动机是在不改变任何其他现有用途的情况下,使“学习Java的早期阶段以及编写小型实用程序时”变得更容易。

     类似资料:
    • 本文向大家介绍java编译命令基础知识点,包括了java编译命令基础知识点的使用技巧和注意事项,需要的朋友参考一下 我们在对计算机下达指令时,人类的语言它是不能够明白,需要通过编译的时候翻译成计算机能听懂的语言。编译过程中会调用javac命令,这点大家可能接触的不多,毕竟是是计算机程序内部运行时的操作。下面我们就编译的概念、命令带来讲解,然后分享一个编译实例给大家练习。 1.编译概念 通过流程图可

    • 我有两个java文件,(main.java,test.java)在每个文件中我编写了包ADT; 我在main.java内部编写了一个名为ADT的类,在我的test.java中将该类称为ADT。 有人能帮我吗?

    • 我试图编译本文中的代码示例3,解释使用Gradle的Swing应用程序框架(JSR 296),并使用命令从命令行运行它。 我的目录布局如下所示: 构建。gradle文件定义了对appframework的依赖关系: 这是文件,上面提到的文章示例的副本,通过包声明增强: 使用gradle build编译工作正常,没有错误。 但是当我尝试使用 我收到错误消息: 当我用一个简单的“Hello,world!

    • 这些命令在用途和功能性方面与 C 预处理器很相似。它们都允许文件内含,条件编译,可执行的头部封包,以及在构建进程期间处理执行。注意:这些命令都不允许使用变量。 5.1.1 !include [/NONFATAL] 文件 这个命令可以将一个文件包含到脚本中,就像是脚本的一部分一样。请注意,如果一个文件包含在了另一个目录中,那么当前目录仍是编译脚本的地方 (不是要包含的文件所在的目录)。如果编译器无法

    • 问题内容: 截至2010年10月,GNU的Java编译器是否已失效?是否有任何有效的替代方法(特别是用于将Java编译为本地代码)? LLVM解决方案将是首选。 问题答案: 您可以使用IKVM和Mono的提前编译器生成本机代码。 编辑 此页面底部有一个示例。