我是Java新手,我想要一个改进:首先,我不确定是否可以在同一个文件中有两个类。我的问题是,当你看到以下代码序列时,每个类是什么:
class Something {
//code here
} //end of class Something
public class SomethingElse {
//NO code here!!!
public static void main(String[] args) {
//code of main here
}//end of main
}
Something Else类的作用是什么?为什么里面没有代码?我知道这是一个非常愚蠢的问题,但有些细节我真的不知道,我需要一些帮助。。。
每个文件可以有多个类,但只有一个类可以是public
,并且其名称必须与文件名称匹配(例如MyClass.java中的public MyClass
)。
文件的公共类对外部世界是可见的,特别是如果该类具有public static main(String[] args)
方法,则可以用来启动应用程序。
例如,在您的案例中,使用javac编译文件后,您将获得文件Something.class
和SomethingElse.class
。
使用命令java SomethingElse
将告诉Java虚拟机执行以下操作:
- 查找SomethingElse类,该类必须位于SomethingAlse.class文件中
- 调用main方法,匹配我上面粘贴在这个类上的签名(并将任何给定的参数放入
args
数组中)
不能调用java Something
,因为该类不是公共的,也没有主方法。但是程序中的其他类(特别是SomethingElse,可以使用Something类)。
每个文件只能有一个公共类,并且该文件必须具有与该类相同的名称。但是,您可以有其他私有类,只有文件类才能看到。例如:
文件Something.java
public class Something {
//Something can access SomethingElse's doSomething method.
private class SomethingElse {
public void doSomething() {
}
}
}
class SomethingToo {
}
文件OtherSomething.java
public class OtherSomething {
//OtherSomething cannot access SomethingElse's doSomething method.
//But can access SomethingToo, if they are in the same package
}
您可以在同一个文件中定义多个类。但是,应该只有一个类被定义为public,并且文件名将是该public类名。
在No code here!!!
中,可以定义类变量和方法。您的main()就是这样一个例子。
在上面的文件中,有两个类SomethingElse(public)和Something。现在,这通常是在公共类内部调用非公共类时完成的。此外,在上面的代码片段中,SomethingElse似乎是一个"驱动程序"类。换句话说,它没有自己的任何功能/数据,但用于执行(驱动)其他类(在这种情况下可能是Something)
可以有嵌套类,但不允许有两个独立的公共类。每个公共类都应该在其自己的文件中,其名称与该类相同。
虽然在同一个文件中可能有两个类,但这被认为是一种糟糕的做法。除了可读性下降之外,最终很难找到类声明的实际位置。此外,如果您声明了一个与类相关的变量,而不是与共享.java名称的类相关,那么javac很可能会在编译时出现问题。
如果必须这样做,请确保您使用第二个类的唯一位置是在共享.java名称的类中。(例如,仅在SomethingElse
类中使用Something
对象)。否则,将所有类分离到单独的.java文件中。
是的,在一个Java文件中可以有两个或多个类。唯一的条件是只有一个类将包含带有签名的主方法(public static void main(String[] args)
)。只有一个公开课会在那里。使用该公共类名可以保存文件——文件名必须与公共类名匹配。