实际上,我正在阅读 Java 语言规范,我发现了一个奇怪的句子,我无法得出结论。因为我不是以英语为母语的人。
当且仅当包存储在文件系统中(第 7.2 节)时,如果在由类型名称组成的名称下的文件中未找到类型,主机系统可能会选择强制限制它是编译时错误如果满足以下任一条件,则加上扩展名(例如 .java 或 .jav):
• 该类型由声明该类型的包的其他编译单元中的代码引用。
• 该类型被声明为公共的(因此可以从其他包中的代码访问)。
有人可以通过举例来解释以粗体标记的行吗?提前谢谢你。
实际上,我正在阅读 Java 语言规范,我发现了一个奇怪的句子,我无法得出结论。因为我不是以英语为母语的人。
当且仅当包存储在文件系统中(第 7.2 节)时,如果在由类型名称组成的名称下的文件中未找到类型,主机系统可能会选择强制限制它是编译时错误如果满足以下任一条件,则加上扩展名(例如 .java 或 .jav):
• 该类型由声明该类型的包的其他编译单元中的代码引用。
• 该类型被声明为公共的(因此可以从其他包中的代码访问)。
有人可以通过举例来解释以粗体标记的行吗?提前谢谢你。
在 Java 中,编译单元本质上是一个文件。
如果您声明了在另一个文件中使用的类型(例如类),而不是在其中声明的文件(通常是这种情况),那么如果以类型名称 + 扩展名命名的文件不能被成立。
即:导入类或其他类型时,Java必须能够将其包+名称翻译成必须存在的文件名。
你CustomObject
在包中有类com.example
package com.example;
public class CustomObject {
String firstName;
String lastName;
}
该类可以从同一个包中的另一个类访问,注意,由于 CustomObject 是公共类,它可以从项目中的任何类访问。如果它被声明为class CustomObject
then 它只能在包中访问com.example
package com.example;
public class Test {
public CustomObject myObject;
public static void main(String[] args) {
myObject = new CustomObject();
}
}