我写了以下代码:
package staticshow;
public class StaticDemo {
static int a = 3;
static int b = 4;
static {
System.out.println("Voila! Static block put into action");
}
static void show() {
System.out.println("a= " + a);
System.out.println("b= " + b);
}
}
public class StaticDemoShow {
public static void main() {
StaticDemo.show();
}
}
我收到错误消息:
The public type StaticDemo must be defined in its own file
第一行public class StaticDemo {
出现错误。为什么会这样,我该如何解决?请注意,我的项目名称为StaticDemoShow
,包名称为staticshow
,类名称在代码中给出。
编辑 - 将一个类公开或两个类都默认后,我收到错误“选择不包含主类型”。现在该怎么办?
答案 0 :(得分:25)
我们在一个文件中不能有两个公共类。 JVM无法理解,在一个文件中我们只能编写一个公共类。
public class StaticDemo {
static int a = 3;
static int b = 4;
static {
System.out.println("Voila! Static block put into action");
}
static void show() {
System.out.println("a= " + a);
System.out.println("b= " + b);
}
}
class StaticDemoShow {
public static void main() {
StaticDemo.show();
}
}
答案 1 :(得分:10)
在同一个文件中不能有两个公共类
public class StaticDemo{
更改为
class StaticDemo{
答案 2 :(得分:5)
Java规则:一个文件中有一个public
类。
答案 3 :(得分:2)
将此类保存在 StaticDemo.java 文件中。 此外,您不能在一个文件中拥有多个公共类。
答案 4 :(得分:1)
您不能使用2个公共类实例,您需要使用一个。尝试使用类(名称)而不是公共类(名称)
答案 5 :(得分:1)
第一行公共类StaticDemo {中的错误
任何具有A
访问修饰符的类public
必须具有单独的源文件A.java
或A.jav
。 This is specified in JLS 7.6 section:
当且仅当包存储在文件系统(第7.2节)中时,主机 系统可以选择强制执行编译时的限制 如果在由...组成的名称下的文件中找不到类型,则会出错 类型名称加上一个扩展名(如.java或.jav) 以下是真的:
该类型由声明类型的包的其他编译单元中的代码引用。
该类型声明为 public (因此可以从其他包中的代码访问)。
但是,您可能必须从类声明public
中删除StaticDemo
访问修饰符。然后由于StaticDemo
类没有修饰符,它将变为 package-private ,也就是说,它只能在自己的包中可见。
答案 6 :(得分:0)
你可以在一个文件中只有一个公共类,否则你将得到你现在得到的错误,文件名必须是公共类的名称
答案 7 :(得分:0)
我的程序中有两个重大错误。从其他答案中,我在单个java程序中学到了,不能将两个类声明为“public”。所以我更改了访问说明符,但是在我的问题中添加了另一个错误“编辑”,“选择不包含主类型”。最后我发现我忘了在主方法中添加“String args []”部分。这就是代码无效的原因。经过整改,它按预期工作。