个人觉得会引起混乱,导致效率低 (1) 如果B.java中是public class A, 那么编译后生成A.class还是B.class (2) ClassLoader根据package名及class名(如class A, 但文件名是B.class)得到Class对象, 就得先在文件中去搜索了,效率差了很多
呵呵, 楼上: kingfish(POWER OF JAVA) 只是打个比方,推理一下如果这样会造成什么样的混乱!不过楼上的说的很好!
其实还有一种,就是内嵌静态类,如: 如:A.java:public class A{ public static class B{ } } 那么编译出来就有2个class文件,A.class,A$B.class
我也不是十分赞同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)这条不至于吧, 编译结果应该仍可以与类名一致呀.
没想到自己一个看法引来这么多评论,有人讨论也是好事啊,呵呵我想大家假设的前提不一致,所以有不同看法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其实这也没啥好讨论的,列举一下好处与坏处, 显然是好处多. 加之是"乌龟的屁股"--规定.
(1) 如果B.java中是public class A, 那么编译后生成A.class还是B.class
(2) ClassLoader根据package名及class名(如class A, 但文件名是B.class)得到Class对象, 就得先在文件中去搜索了,效率差了很多
楼上误解了..
kingfish(POWER OF JAVA ) 是在举例子給楼主呢!!
个人觉得会引起混乱,导致效率低
(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。
kingfish(POWER OF JAVA) 只是打个比方,推理一下如果这样会造成什么样的混乱!不过楼上的说的很好!
如:A.java:public class A{
public static class B{
}
}
那么编译出来就有2个class文件,A.class,A$B.class
->如果B.java中是public class A, 那么编译后生成A.class还是B.class
(1)如果仅不强行规定主类名与文件名一致的话,那不论文件名是什么,只要你有public class A,
编译后生成的当然是A.class. ->ClassLoader根据package名及class名(如class A, 但文件名是B.class)得到Class对象,
->就得先在文件中去搜索了,效率差了很多
(2)这条不至于吧, 编译结果应该仍可以与类名一致呀.
to donnyfox(唐朝):
"既然是一个类class,当然是A.class", 这个显然是基于以类名命名class文件名基础上
既然楼主讨论这个问题,我们也可以讨论开来,比如文件名与类名没什么直接关联
to Dan1980(也该有一些作为了):首先说明一下,2个星星什么都不代表,除了代表在csdn浪费了很多时间
所以不要为了这个改变你的看法. 另外你说的"与JAVA的隐藏机制和开源策略有关"我也赞同,但我觉得
最重要的是根据class名找到那个class文件,并不是所有的java应用都开源to yedi_chu(夜帝): 楼主,可能我对你的标题理解与你的本意不一致.
我1楼的看法是建立在文件名与类名没什么关联的基础上的,比如A.class中不一定是class A其实这也没啥好讨论的,列举一下好处与坏处, 显然是好处多. 加之是"乌龟的屁股"--规定.
那些人厌烦了在数十万行c程序中找一个函数调用的定义(也就是源代码,我想大家想象下80万行代码被几批人改来改去是什么样子就可以估计出来)。我认为他们不太喜欢用ide,那时候的ide也没有现在那么发达
所以他们在设计java的时候就把package和目录对应,类名和文件名对应,设定import机制,让你不借助ide可以迅速定位到这个类的src
说public类必须和文件名一致有些不恰当,应该是所有外部类都应和文件名一致
编译后也是相同的class名,可能是便于搜索,jvm是一个lazy loading的机制。
其实java的优点在于他是一个确定的语言,省去了很多不必要的特性(或者说麻烦)..