Java程序公共类与main方法归属问题及运行报错咨询
Java中public类数量、main方法归属问题及运行报错解析
咱们先逐个解决你提到的基础疑问:
1. Java程序是否只能包含一个public类?
- 一个
.java源文件里最多只能有一个public类,而且这个public类的名称必须和源文件名完全一致(大小写也得严格匹配)。比如你的源文件叫QNA.java,那里面的public类必须是QNA。 - 如果源文件里没有public类,那文件名可以随意命名,没有强制要求。
2. main方法是否必须仅属于该public类?
- 当然不是!main方法可以放在任何一个类中(不管这个类是不是public),只要这个类能被JVM访问到就行。
- 关键是:当你运行程序时,必须明确指定包含main方法的那个类的名字,用
java 类名命令来启动程序。
3. 程序中的其他类该如何处理?
- 非public类可以直接写在同一个源文件里,编译后每个类都会生成独立的
.class文件(比如你的代码编译后会生成QNA.class和test.class)。 - 这些非public类默认是包级私有访问权限,同一个包下的其他类可以直接使用它们;如果需要在其他包中调用,建议把它们放到单独的源文件中,并设置合适的访问修饰符。
再说说你碰到的运行报错问题
你遇到的报错信息是:
error: Main method not found in class QNA, please define the main method as: public static void main(String[] args) or a JavaFX application class must extend javafx.application.Application
报错原因
你运行程序时执行的是java QNA命令,但QNA类里并没有定义main方法——你的main方法是放在test类里的,JVM找不到程序的启动入口,所以抛出了这个错误。
解决步骤
假设你的源文件名叫QNA.java(因为里面有public类QNA,文件名必须和它一致):
- 先编译源文件:
执行后会生成javac QNA.javaQNA.class和test.class两个字节码文件。 - 运行时要指定包含main方法的
test类:
这样JVM就能找到正确的main方法,程序就能正常运行了。java test
附你的代码参考
import java.util.Scanner; public class QNA{ Scanner scan= new Scanner(System.in); private int a; private int b; public void get_value(int x,int y) { a=x; b=y; } public int set_data() { int a=scan.nextInt(); return a; } public int set1_data() { int b=scan.nextInt(); return b; } } class test { public static void main(String[] args) { QNA q1= new QNA(); int p=q1.set_data(); int p1=q1.set1_data(); int c=p+p1; System.out.println(c); } }
(小提示:你的QNA类里的Scanner是成员变量,使用后记得调用scan.close()关闭资源,避免资源泄漏哦~)
内容的提问来源于stack exchange,提问作者Pooja Choudhary
相关产品推荐
相关产品推荐

