Java中的多个类和main方法,以及包,命名空间

时间:2012-06-06 02:01:52

标签: java namespaces packages

在Eclipse中,.java文件名必须与类名相同。在任何情况下或仅在Eclipse中都是如此吗?对于main方法,它看起来像C中的main函数,但问题是,如果我有两个类都有自己的main方法并且可以将它们链接在一起怎么办?另外,我可以在一个.java文件中编写两个类吗?我在Windows中使用Eclipse,是否与Linux版本相同?

对于包,我的书告诉我包是一个目录。因此,要指定文件所属的包,我只需要说"包my_pack"?我是否需要创建一个像/ src / my_pack这样的目录并将我的.java文件放入其中?

第三,什么是命名空间?它与包和类的关系是什么?

3 个答案:

答案 0 :(得分:11)

  

在Eclipse中,.java文件名必须与类名相同。它在任何情况下都是正确的还是仅适用于Eclipse?

java文件必须与包含的公共类同名。

  

对于main方法,它看起来像C中的main函数,但问题是,如果我有两个类都有自己的main方法并且可以将它们链接在一起怎么办?

是的,您可以在同一个项目中有两个具有static void main(String[] args) {...}方法的类,但只有1个是您项目的主类,您应该通过在清单中声明它来决定哪个类文件。

了解更多相关信息:

  

另外,我可以在一个.java文件中编写两个类吗?

是的,你可以,只要文件中只有一个类,并且该类的名称与文件名相同:

TheClass.java文件

package edu.home.bean;

public class TheClass {
    class SomeClass {
    }
}

class AnotherClass {
}

编辑:

如果您未定义对类的公共访问权限,则可以defaultprivate访问,具体取决于声明的位置。在上面的示例中,SomeClass将具有private访问权限,只能由TheClass访问,而AnotherClass可以从同一个包中的任何类访问。这意味着,与[{1}}不同的程序包中的类无法访问edu.home.bean

AnotherClass
  

我在Windows中使用Eclipse,是否与Linux版本相同?

Java的一个优点是代码是独立于平台的(不像C或C ++),因此只要Java虚拟机(JVM)安装在Java中,您就可以将代码从Windows移植到Linux上。您想要运行/开发Java项目的操作系统。

  

对于包,我的书告诉我包是一个目录。因此,要指定文件所属的包,我只需要说“package my_pack”吗?

是的,这本书是对的。当您拥有Java项目(如MyFirstJavaProject)时,您可以在该文件夹中设置源文件夹和包。这些包将是源文件夹的子文件夹。一个例子:

Eclipse中的项目结构:

package edu.home.control;

public class ControlClass {
    //this line compiles fine
    private TheClass x;
    //compilation error, it can't access for being in a different package
    private AnotherClass y;
    //compilation error, it can't access because its scope works only in TheClass
    private SomeClass z;
}
  

我是否需要创建/ src / my_pack这样的目录并将我的.java文件放入其中?

您可以手动执行此操作,或者让您的IDE(在本例中为Eclipse)为您执行此操作,就像在包中创建包和类一样简单。

  

第三,什么是命名空间?它与包和类的关系是什么?

Java不支持命名空间,而是使用包来促进类的管理/关系。您可以从另一个包(第一个表单)导入类,或者使用具有完整包名的类(第二个表单)。

第一种形式的例子:

+ MyFirstJavaProject
  + src
    + edu.home.bean
    + edu.home.control
    + edu.home.gui
    + another.package


+ MyFirstJavaProject
  + src
    + edu
      + home
        + bean
          ... class files
        + control
          ... class files
        + gui
          ... class files
    + another
      + package

第二种形式的例子:

package package1;

public class Package1Class {
}

package package2;

import package1.Package1Class;

public class Package2Class {
    private Package1Class x;

    public Package2Class (Package1Class x) {
        this.x = x
    }
}

答案 1 :(得分:1)

1)这是一个Java的东西。文件名必须与文件中的公共类匹配。如果没有公共课,你几乎可以说出任何名字。如果你有两个带有main方法的类,可以调用另一个。它们像C一样链接。只是相互编译。你可以在同一个文件中有两个类;只有一个可以公开。 Eclipse在操作系统中非常相似。考虑到操作系统的差异,存在一些差异。

2)my_pack不遵循良好的命名约定。 my.pack或com.my是一个更好的名字。但是,是的,你想要创建该目录。

3)Java不使用术语命名空间,但我wikipedia表示包类似于命名空间。

答案 2 :(得分:0)

java中的规则是公共类名与.java文件名相同,与任何IDE无关。

.java文件中可以有多个类,前提是只有其中一个类与公共类的名称相同。