为什么我不能给文件名赋予不同的名字?

时间:2009-12-24 14:10:17

标签: java

当我想创建一个java类时,它会自动生成一个具有相同名称类的文件。

但是当它生成一个类时,它可以更改与类名不同的文件名。 我错过了什么吗?

alt text
(来源:screencast.com

alt text

4 个答案:

答案 0 :(得分:9)

因为语言设计师这么说。它真的很简单。这是一个惯例,它们迫使你遵循它。

答案 1 :(得分:8)

7.6 Top Level Type Declarations

中引用Java Language Specification部分
  

当包存储在文件中时   系统(§7.2.1),主机系统   可以选择执行限制   如果是一个编译时错误   在a下的文件中找不到类型   名称由类型名称加上一个组成   扩展名(例如.java.jav)   如果满足以下任一条件:

     
      
  • 该类型由包的其他编译单元中的代码引用   其中声明了类型。
  •   
  • 类型声明为public(因此可以访问   从其他包中的代码)。
  •   
     

这种限制意味着那里   每个最多一个这样的类型   编译单位。这个限制   使编译器易于使用   Java编程语言或   Java虚拟的实现   机器在一个内部找到一个命名类   包;例如,源代码   对于公共类型wet.sprocket.Toad   可以在文件Toad.java中找到   在目录wet/sprocket中,和   相应的对象代码将是   在文件Toad.class中找到   同一目录。

     

将包存储在数据库中时   (§7.2.2),主机系统必须   不要施加这样的限制。在   实践中,许多程序员选择   将每个类或接口类型放入   它自己的编译单元,无论是或   不是公开的或被提及的   其他编译单元中的代码。

答案 2 :(得分:4)

语言规范本身没有规定这个(我刚看过,并且没有找到它的引用),但它通常由工具强制执行。它使工具的依赖关系管理变得相当容易,因为如果A类引用了它,它知道在哪里查找B类。约定扩展到回显包结构的目录结构,但同样,这只是一个约定。

答案 3 :(得分:1)

如果我能改变世界,我希望c#设计师也这样做。 强迫人们不创建文件classes.cs并将所有代码放入其中可以节省多少时间。对于If,是不是要求括号。为什么语言迫使我做那个愚蠢的事情:

if (true)
{

}

而不是

if true
{

}

: - )