不好意思,突然想到这个问题.
这样规定有什么好处吗?

解决方案 »

  1.   

    个人觉得会引起混乱,导致效率低
    (1) 如果B.java中是public class A, 那么编译后生成A.class还是B.class
    (2) ClassLoader根据package名及class名(如class A, 但文件名是B.class)得到Class对象, 就得先在文件中去搜索了,效率差了很多
      

  2.   

    我支持上面兄台的见解,本来在Java中,引用的是大量类的概念。类名与文件名一致,便于明了和对象中的调用。另外,还有很多方便的地方。就好象为什么父亲的儿子和其父同姓一样原理,不至于容易让人误解。
      

  3.   

    sun认为:看到文件名就知道此文件的类 方便,易管理
      

  4.   

    对于 kingfish(POWER OF JAVA) 说的第一点是不对的,在一个java文件中public class 的名字必须和文件名一致的,否则编译会报错的
      

  5.   

    呵呵..
    楼上误解了..
    kingfish(POWER OF JAVA ) 是在举例子給楼主呢!!
      

  6.   

    kingfish说:
    个人觉得会引起混乱,导致效率低
    (1) 如果B.java中是public class A, 那么编译后生成A.class还是B.class。
    ------------------------------
    好像不对,既然是一个类class,当然是A.class。
    就算B.java中还有class B,class C,也是没有问题的,它就生成三个字节码文件:A.class B.class C.class。
      

  7.   

    没有十分看懂 kingfish(POWER OF JAVA) 要表达的意思, 鉴于他的两颗星的头衔, 我宁可相信他不会犯这样低级的错误.JAVA把一个.java文件叫做一个编译单元(Compiling Unit), 一个编译单元中可以有N个类, 但最多只能有一个public类. 而且, 如果有一个public类的话, 那么这个类的类名必须与.java文件的名称一致.对于这个规定, 我个人认为是与JAVA的隐藏机制和开源策略有关的.因为, 根据JAVA的隐藏机制, 只有public的类才可以被其他人直接使用, 也就是说, 对于其他人来说, 他所熟悉的只有这个public类的类名, 这样, 如果源文件的名字和它保持一致, 就可以非常方便地让别人找到这个源文件.
      

  8.   

    呵呵, 楼上:
    kingfish(POWER OF JAVA) 只是打个比方,推理一下如果这样会造成什么样的混乱!不过楼上的说的很好!
      

  9.   

    其实还有一种,就是内嵌静态类,如:
    如:A.java:public class A{
       public static class B{
       }
    }
    那么编译出来就有2个class文件,A.class,A$B.class
      

  10.   

    我也不是十分赞同kingfish(POWER OF JAVA)的观点:
      ->如果B.java中是public class A, 那么编译后生成A.class还是B.class
    (1)如果仅不强行规定主类名与文件名一致的话,那不论文件名是什么,只要你有public class A,
    编译后生成的当然是A.class.   ->ClassLoader根据package名及class名(如class A, 但文件名是B.class)得到Class对象, 
      ->就得先在文件中去搜索了,效率差了很多
    (2)这条不至于吧, 编译结果应该仍可以与类名一致呀.
      

  11.   

    没想到自己一个看法引来这么多评论,有人讨论也是好事啊,呵呵我想大家假设的前提不一致,所以有不同看法to zj_pht(Apollo):可能我没说清楚或者你没看清楚
    to donnyfox(唐朝):  
       "既然是一个类class,当然是A.class", 这个显然是基于以类名命名class文件名基础上
       既然楼主讨论这个问题,我们也可以讨论开来,比如文件名与类名没什么直接关联
    to Dan1980(也该有一些作为了):首先说明一下,2个星星什么都不代表,除了代表在csdn浪费了很多时间
    所以不要为了这个改变你的看法. 另外你说的"与JAVA的隐藏机制和开源策略有关"我也赞同,但我觉得
    最重要的是根据class名找到那个class文件,并不是所有的java应用都开源to yedi_chu(夜帝): 楼主,可能我对你的标题理解与你的本意不一致.
       我1楼的看法是建立在文件名与类名没什么关联的基础上的,比如A.class中不一定是class A其实这也没啥好讨论的,列举一下好处与坏处, 显然是好处多. 加之是"乌龟的屁股"--规定.
      

  12.   

    据以前看到的一本书说
    那些人厌烦了在数十万行c程序中找一个函数调用的定义(也就是源代码,我想大家想象下80万行代码被几批人改来改去是什么样子就可以估计出来)。我认为他们不太喜欢用ide,那时候的ide也没有现在那么发达
    所以他们在设计java的时候就把package和目录对应,类名和文件名对应,设定import机制,让你不借助ide可以迅速定位到这个类的src
    说public类必须和文件名一致有些不恰当,应该是所有外部类都应和文件名一致
    编译后也是相同的class名,可能是便于搜索,jvm是一个lazy loading的机制。
    其实java的优点在于他是一个确定的语言,省去了很多不必要的特性(或者说麻烦)..