You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,文件名必须和它一致):

  1. 先编译源文件:
    javac QNA.java
    
    执行后会生成QNA.class和test.class两个字节码文件。
  2. 运行时要指定包含main方法的test类:
    java test
    
    这样JVM就能找到正确的main方法,程序就能正常运行了。

附你的代码参考

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 17:17:50