【问题标题】:Java file naming restrictionJava 文件命名限制
【发布时间】:2021-05-27 06:54:53
【问题描述】:

实际上,我正在阅读 Java 语言规范,我发现了一个奇怪的句子,我无法得出结论。因为我不是以英语为母语的人。

当且仅当包存储在文件系统中(第 7.2 节),主机系统可能 如果找不到类型,则选择强制执行它是编译时错误的限制 在由类型名称加上扩展名组成的名称下的文件中(例如 .java 或 .jav) 如果以下任一情况为真:
• 该类型由包的其他编译单元中的代码引用,其中包含 类型已声明。
• 类型被声明为公共的(因此可以从代码中访问 在其他包中)。

有人可以举例解释一下用粗体标记的那一行吗。谢谢你。

【问题讨论】:

  • 你是在哪一章找到这个的?
  • 如果你有像public CustomObject myObject;这样的对象声明,那么编译器将在包内查找类CustomObject
  • @sanjeevRm 但我不明白你的意思。你能简单解释一下吗??
  • @dan1st 章节名称包(你可以在章节末尾找到这个)
  • @user15793316 什么时候会出现这种错误?

标签: java package filesystems compilationunit


【解决方案1】:

在 Java 中,编译单元本质上是一个文件。

如果您声明的类型(例如类)在另一个文件中使用,而不是在其中声明(通常是这种情况),那么如果文件以类型名称 + 扩展名命名,则编译错误,找不到。

即:导入类或其他类型时,Java 必须能够将其包+名称转换为必须存在的文件名。

【讨论】:

  • 能否举个例子让我看清楚好吗?!
【解决方案2】:

你在包com.example中有类CustomObject

package com.example;
public class CustomObject {
    String firstName;
    String lastName;
}

这个类可以从同一个包中的另一个类访问,注意,由于CustomObject是公共类,它可以从项目中的任何类访问。如果它被声明为class CustomObject,那么它只能在包com.example中访问

package com.example;

public class Test {
    
    public CustomObject myObject; 
    
    public static void main(String[] args) {
        myObject = new CustomObject();
        
    }

}

【讨论】:

    猜你喜欢
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 2011-12-18
    • 2011-05-29
    • 2010-11-12
    • 2011-10-28
    相关资源
    最近更新 更多