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

为何Java类中成员变量mf调用mediaFinal返回0,主类调用正常?

问题解析:为何Aluno类中mf成员变量返回0,直接调用mediaFinal却能得到正确结果?

在以下Java代码中,Aluno类内定义的成员变量double mf = mediaFinal(nota1, nota2, nota3);返回值为0,但在主类QuestaoJoao中直接调用mediaFinal方法却能得到正确结果,请问这是为什么?

Aluno类代码

package emcasa;

import java.util.Scanner;

public class Aluno {
    Scanner scanner = new Scanner(System.in);
    
    String nome;
    String matricula;
    int nota1;
    int nota2;
    int nota3;
    
    double mediaFinal (double nota1, double nota2 , double nota3){
        return (( nota1 * 2.5) + (nota2 * 2.5) + (nota3 * 2)) / 7 ;
    }
    
    double mf = mediaFinal(nota1, nota2, nota3);
    
    void fim () {
        if ( mf >= 7 ) {
            System.out.println("Aprovado!");
        }
        else {
            System.out.println(nome + " precisa tirar " + ( 10 - mf) + " na prova final");
        }
    }
}

主类QuestaoJoao代码

package emcasa;
import java.util.Scanner;

public class QuestaoJoao {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Aluno a = new Aluno();
        
        a.nome = "Rafael Arruda";
        a.matricula = "2023.1REC0001";
        a.nota1 = 5;
        a.nota2 = 6;
        a.nota3 = 10;
        
        //double mediaf = a.mediaFinal(a.nota1, a.nota2, a.nota3);
        
        System.out.println(a.mf);
        a.fim();
    }
}

原因分析

核心问题出在Java实例变量的初始化顺序:

  • 当创建Aluno对象a时,Java会先给所有实例变量分配默认值:nota1、nota2、nota3作为int类型,默认值是0;mf作为double类型,默认值是0.0。
  • 接着按照变量在类中的声明顺序执行初始化表达式:mf = mediaFinal(nota1, nota2, nota3)这行代码会在此时执行,传入的nota1、nota2、nota3还是默认的0,计算结果自然为0并赋值给mf。
  • 之后你在主类中给a.nota1、a.nota2、a.nota3赋值为5、6、10时,mf已经完成初始化,不会自动重新调用mediaFinal计算新值,所以mf始终是0。
  • 而直接调用a.mediaFinal(a.nota1, a.nota2, a.nota3)时,传入的是已经赋值后的有效成绩,因此能得到正确结果。

如果想要mf能正确反映后续赋值后的成绩,可以新增一个手动计算的方法:

void atualizarMedia() {
    mf = mediaFinal(nota1, nota2, nota3);
}

然后在主类中赋值完成绩后调用a.atualizarMedia(),即可让mf更新为正确值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:05:32