这应该是 Java 规定的一种规范, 就是那些标准一样, 不能说它是100%正确, 但是我们都必须遵循这中规范.假设
 A.javapublic class A{
}public class B
{
}如果有一个java文件  use 要用到 class B, 我想 JVM 可能会不知道去哪里找这个类, 因为有可能同时存在同名的类, 定义在 B.javaB.java
public class B
{

系统会不知道你调用的是哪个类, 会造成混乱.

解决方案 »

  1.   

    如果一个类为public类型,则必须存放在一个和类名同名的.java文件里面,这是java内定的规则,如果一个编译单元里面有两个以上的public class,那就会与这个这个规则冲突,系统会报错:
    Public class ** must be defined in a file called '**.java'
      

  2.   

    但是编译完的class文件是存放在类名相同的文件下,JVM怎么会找不到呢?又不是匿名类。只要Class类名不同不就可以了吗,再说JAVA里的类不是已包来组织的吗??
      

  3.   

    这个其实不属于java的标准,只是绝大部分编译器的要求罢了.不过这样规定挺好啊.
      

  4.   

    同意dylanwolf() ,这只是一种硬性的规定,正如一个项目组内部需要一份统一的开发规范而不是最优秀的。
      

  5.   

    对阿, A.java 内有类 BB.java 内也有类 B你可以通过不同的 package 来识别, 但如果是同一个 package 呢? 并不是所有人都知道你的 A.java里定义了类B的, 即使是你自己.
      

  6.   

    假设类A和类B都是公共的,且均存在于文件Demo.java中,那么这两个类的地位是等同的,即使编译可以通过,那么运行的时候是java A呢,还是java B?
        另外,这样可能也是为了封装的需要。一个程序只有一个public类,相当于只有一个公共接口供外部访问,此时只允许一个公共类的机制就保护了其他的非公共类了,这样更加安全合理。
        其实我也觉得这样不太好,要是不管源文件有多少个class申明,编译后只产生一个类(比如说类名叫Deme.class,而不是A.class和B.class),那么很多问题就方便多了。
      

  7.   

    如果另一个类不是public 也不行。那么一个文件里可否有两个类?(不管第二个类是什么类型,当然Inner class不算)
      

  8.   

    可以有,但不能是public的,它可以和你的主类平行
      

  9.   

    to  回复人: wangwenyou(王文友) 
      可以有,但不能是public的,它可以和你的主类平行************************
    我试了一下怎么不行?  
     
      

  10.   

    没问题的,如下:
    //ExpressionBuilder.java
    public class ExpressionBuilder
    {
        
    }
    // 生成SQL的参数
    class SQLBuildParameters extends ParameterStruct
    {}
    // 预处理SQL的属性:字段名称和顺序号
    class PreparedSQLParameters extends ParameterStruct
    {
       
    }
      

  11.   

    对,我刚看过一个例子,它把另一个类设为了 private static ,然后在public类中调用了它。你说的这个例子中,这几类不要设为static?如果是这样的话(补设为static )那怎么调用它?