如何解决使用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”命令,我会收到“是-否”情况下的编译时错误。
解决方法
您所有问题的答案都可以在JEP 330中找到。我相信以下摘录可以回答您的问题。
在源文件中找到的第一个类被执行
源文件应包含一个或多个顶级类,其中第一个作为要执行的类
编译器不强制执行 JLS §7.6 末尾定义的可选限制,即命名包中的类型应存在于名称由类型名称后跟 .java 扩展名组成的文件中
换句话说,当您使用 javac
编译 java 源代码文件时,源代码文件必须包含一个名称与文件名匹配的“公共”类.但是当您使用 java
命令运行 java 源代码文件时,上述限制不适用。
要执行的类是在源文件中找到的第一个顶级类。它必须包含标准 public static void main(String[]) 方法的声明。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。