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

Java Scanner计算总分平均分报错:无法静态引用Jumsu类非静态方法

解决Java中无法从类对非静态方法进行静态引用的问题

嘿,我一眼就看出问题出在哪了——你在静态的main方法里,直接用类名Jumsu去调用非静态的Sum()和Ave()方法了,这在Java里是不允许的!

错误原因

非静态方法(比如你的Sum()和Ave())是属于类的实例对象的,而不是类本身。静态方法(比如main)属于类,它不能直接访问非静态成员,因为非静态成员只有当你创建了类的实例后才会存在。

修正后的完整代码

我帮你把代码改好了,还加了注释说明关键步骤:

import java.util.Scanner;
public class Jumsu {
    int Kor, Eng, Math;
    
    // 计算总分的非静态方法,属于每个Jumsu实例
    public int Sum() {
        return Kor + Eng + Math;
    }
    
    // 计算平均分的非静态方法,属于每个Jumsu实例
    public double Ave(){
        return (Kor + Eng + Math) / 3.0;
    }
    
    public static void main(String[] args) {
        // 第一步:创建Jumsu类的实例对象,这是调用非静态方法的前提
        Jumsu exam = new Jumsu();
        Scanner scanner = new Scanner(System.in);
        
        // 第二步:通过实例对象给成绩变量赋值
        System.out.print("请输入韩语成绩:");
        exam.Kor = scanner.nextInt();
        System.out.print("请输入英语成绩:");
        exam.Eng = scanner.nextInt();
        System.out.print("请输入数学成绩:");
        exam.Math = scanner.nextInt();
        
        // 第三步:通过实例对象调用非静态方法,这才是正确的姿势!
        int totalScore = exam.Sum();
        double averageScore = exam.Ave();
        
        System.out.println("总分:" + totalScore);
        System.out.println("平均分:" + averageScore);
        
        scanner.close();
    }
}

关键修正点

  • 必须先创建类的实例:Jumsu exam = new Jumsu();,没有实例,非静态方法就没有所属的对象,自然调用不了。
  • 操作非静态变量(Kor、Eng、Math)和调用非静态方法,都要通过实例对象exam来进行,而不是直接用类名Jumsu。

额外小提示

如果你非要把Sum()和Ave()改成静态方法,那得把Kor、Eng、Math也改成静态变量,但这种方式不太符合面向对象的设计——毕竟每个学生的成绩应该是独立的实例属性,而不是类的共享属性。所以还是用实例调用的方式更合理。

内容的提问来源于stack exchange,提问作者Hellmud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:04:45