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

One*_*ero 3 java namespaces packages

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

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

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

Lui*_*oza 11

在Eclipse中,.java文件名必须与类名相同.在任何情况下或仅在Eclipse中都是如此吗?

java文件必须与包含的公共类具有相同的名称.

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

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

阅读更多相关信息:

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

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

TheClass.java文件

package edu.home.bean;

public class TheClass {
    class SomeClass {
    }
}

class AnotherClass {
}
Run Code Online (Sandbox Code Playgroud)

编辑:

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

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;
}
Run Code Online (Sandbox Code Playgroud)

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

Java的一个好处是代码是独立于平台的(不像C或C++),因此只要在操作系统中安装了Java虚拟机(JVM),就可以将代码从Windows移植到Linux而反之亦然.想要运行/开发Java项目.

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

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

Eclipse中的项目结构:

+ 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

第一种形式的例子:

package package1;

public class Package1Class {
}

package package2;

import package1.Package1Class;

public class Package2Class {
    private Package1Class x;

    public Package2Class (Package1Class x) {
        this.x = x
    }
}
Run Code Online (Sandbox Code Playgroud)

第二种形式的例子:

package package1;

public class Package1Class {
}

package package2;

public class Package2Class {
    //look that there is not use of the import statement, however everytime you need
    //to call Package1Class, you should provide the full package name
    private package1.Package1Class x;

    public Package2Class (package1.Package1Class x) {
        this.x = x
    }
}
Run Code Online (Sandbox Code Playgroud)