javac 使用默认访问修饰符编译类,即使文件名不同

标签 java javac

为什么 javac 使用默认修饰符编译类,即使文件名不同,为什么当访问修饰符是 public、private 或 protected 时却不编译? 例如:文件名:测试 文件内容 foo 类{}

它的编译没有错误,如果我在类的前面添加公共(public)的、私有(private)的或 protected ,它就不会被编译,谁能解释为什么会这样

最佳答案

有两条规则

  • 如果您将类型声明为public,那么文件名应该相同,类型可以是classinterface
  • 不能有 privateprotected 外部类。

为什么第一点的答案是它是定义 Java 规范的方式。 您不能将外部类声明为私有(private)的,因为它根本没有任何用途。

  • 源文件中可以有任意类型,但只能有一个公共(public)类型,如果有公共(public)类型,文件名必须与公共(public)类型相匹配。

关于javac 使用默认访问修饰符编译类,即使文件名不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17495339/

相关文章:

java - 矩阵到图形表示 - java

java - Spark Java - 无法获取 java.lang.String 的正确类标签

java - 从 Windows 7 使用 Runtime.getRuntime().exec(cmd) 调用 "mysqldump"

java - Linux ./configure 不会检测到 java 或 javac

Java Socket 创建需要更多时间

Java反射(reflect)Class.forName失败

hadoop - 使用 Hadoop-LZO 构建 Java 项目但找不到类

java - PHP 与 Java 执行

optimization - 在 javac 中禁用优化?

java - java编译器如何在类路径未设置为jdk路径的情况下找到类文件?