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

Java中如何在Classroom类调用Student类的getFirstName方法

Java跨类方法调用与代码错误修正

跨类调用方法是Java面向对象的基础特性,你的整体实现思路不存在偏差,运行异常全为代码细节问题导致。

现有代码的具体问题

  • 方法调用语法错误:getFirstName()是无参成员方法,你写的students.get(0).getFirstName缺少方法调用括号,且直接写属性名会优先匹配字段,而Student类的firstName是包私有权限,跨包场景会直接访问报错。
  • 空指针异常触发:Main里的studentArrayList被赋值为null,未实例化就调用add()方法,运行时会直接抛出NullPointerException。
  • Classroom构造方法未赋值:构造方法接收了studentArrayList参数,但没有把它赋值给类的成员变量this.students,传入的列表完全没有被存储。
  • getStudent方法设计缺陷:方法要求每次调用都传入列表,属于冗余设计;当前方法返回null,无法实现返回第一个Student对象的目标;同时入参的ArrayList未加泛型,会引发类型安全警告。
  • Student构造方法权限问题:Student的构造方法是包私有权限,如果后续三个类不在同一个包下,会直接无法实例化Student对象。

修正后的可运行代码

Student类

public class Student {
    // 字段设为私有做封装,权限更合理
    private String firstName;

    // 构造方法改为public权限,跨包也可实例化
    public Student(String firstName){
        this.firstName = firstName;
    }

    public String getFirstName() {
        return firstName;
    }
}

Classroom类

import java.util.ArrayList;

public class Classroom{
    // 成员变量存储本班学生列表
    public ArrayList<Student> students;

    // 构造方法接收参数后赋值给成员变量
    public Classroom(ArrayList<Student> studentArrayList) {
        this.students = studentArrayList;
    }

    // 无需额外传参,直接返回列表第一个Student对象
    public Student getFirstStudent() {
        // 非空判断避免空指针
        if (this.students == null || this.students.isEmpty()) {
            return null;
        }
        return this.students.get(0);
    }
}

Main类

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        Student a = new Student("John");
        Student b = new Student("Jane");

        // 先实例化ArrayList再操作,不能赋值为null
        ArrayList<Student> studentArrayList = new ArrayList<>();
        studentArrayList.add(a);
        studentArrayList.add(b);

        Classroom c = new Classroom(studentArrayList);

        // 调用方法获取第一个Student对象,输出其姓名
        Student firstStu = c.getFirstStudent();
        System.out.println(firstStu.getFirstName()); // 预期输出John
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 01:06:05