微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用java VS javac 使用jdk11执行单代码java文件

如何解决使用java VS javac 使用jdk11执行单代码java文件

我使用的是 JDK11。下面是我的示例类 -

public class SayHi {
    public static void main(String[] args) {
        System.out.println("Hi There");
    } 
} 

对于以下场景,我使用命令“java filename.java”执行了上述类

ColumnA -> 类声明为公共? ColumnB -> 文件名与类名相同?

ColumnA ColumnB Result
  Yes      Yes   Yes
  No       Yes   Yes
 *Yes      No    Yes
  No       No    Yes

对于所有场景,命令执行成功,我得到了结果。如果我对文件名运行“javac”命令,我会收到“是-否”情况下的编译时错误

  1. 为什么我在对文件名执行“java”命令时没有收到编译时错误

  2. 我在一个代码文件中有多个公共类。我可以使用“java filename.java”命令执行文件。使用“java”命令运行文件时,我缺少编译时问题。请帮我解决这个问题。

解决方法

您所有问题的答案都可以在JEP 330中找到。我相信以下摘录可以回答您的问题。

在源文件中找到的第一个类被执行

源文件应包含一个或多个顶级类,其中第一个作为要执行的类

编译器不强制执行 JLS §7.6 末尾定义的可选限制,即命名包中的类型应存在于名称由类型名称后跟 .java 扩展名组成的文件中

换句话说,当您使用 javac 编译 java 源代码文件时,源代码文件必须包含一个名称与文件名匹配的“公共”类.但是当您使用 java 命令运行 java 源代码文件时,上述限制不适用。

要执行的类是在源文件中找到的第一个顶级类。它必须包含标准 public static void main(String[]) 方法的声明。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。