在 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 {
}
编辑:
如果您没有定义对某个类的公共访问权限,它可能具有default 或private 访问权限,具体取决于声明的位置。在上面的示例中,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;
}
我在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
}
}