在 Eclipse 中,.java 文件名必须与类名相同。在任何情况下都是真的还是仅适用于 Eclipse?
java 文件必须与包含的公共类同名。
对于 main 方法,它看起来像 C 中的 main 函数,但问题是,如果我有两个类都有自己的 main 方法并且可以将它们链接在一起怎么办?
是的,您可以在同一个项目中拥有两个具有static void main(String[] args) {...}
方法的类,但只有 1 个是您项目的主类,您应该通过在清单文件中声明它来决定哪个是主类。
阅读有关此的更多信息:
另外,我可以在一个 .java 文件中编写两个类吗?
可以,只要文件中只有一个类并且该类的名称与文件名相同即可:
Class.java 文件
package edu.home.bean;
public class TheClass {
class SomeClass {
}
}
class AnotherClass {
}
编辑:
当你没有定义对一个类的公共访问时,它可能拥有default
或private
访问,这取决于声明的位置。在上面的示例中,SomeClass
将具有private
访问权限,并且只能通过 访问TheClass
,而AnotherClass
可以从同一包中的任何类访问。这意味着,包中的类不同于edu.home.bean
can't access 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;
}
我在Windows中使用Eclipse,它与Linux版本相同吗?
Java 的一个好处是代码是平台独立的(不像 C 或 C++),因此您可以将代码从 Windows 移植到 Linux,反之亦然,只要在您的操作系统中安装了 Java 虚拟机 (JVM)想要运行/开发 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
我是否需要创建一个类似 /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
}
}
第二种形式的例子:
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
}
}