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

Java派生类HashMap空指针异常求助:无法调用put方法

问题:调用HashMap.put时触发NullPointerException

我正在开发一个项目,包含3个类,其中基类movieEvent无问题。基于该类派生出movieSchedule类后,在main方法中调用派生类的方法时,触发了"main"线程异常,无法调用HashMap的put方法。

派生类代码

import java.util.HashMap;

public class movieSchedule extends movieEvent {

    private HashMap<String, String[]> movieTimes;

    public movieSchedule() {

        this.movieTimes = movieTimes;
    }

    public void AddMovieSchedule(String name, String[] times) {

        movieTimes(name, times);
    }

    private void movieTimes(String name, String[] times) {
        movieTimes.put(name, times);

    }
}

main方法相关代码

movieSchedule athensSchedule = new movieSchedule();
    
String[] guardiansTimes = {"5:30 P.M.", "7:20 P.M.", "9:00 P.M."};
athensSchedule.AddMovieSchedule("Guardians 4", guardiansTimes);
    
String[] airTimes = {"6:30 P.M.", "8:45 P.M.", "9:10 P.M."};
athensSchedule.AddMovieSchedule("AIR", airTimes);
    
String[] marioTimes = {"3:30 P.M.", "4:20 P.M.", "5:00 P.M."};
athensSchedule.AddMovieSchedule("Mario", marioTimes);
    
String[] oppenheimerTimes = {"7:30 P.M.", "9:20 P.M.", "10:00 P.M."};
athensSchedule.AddMovieSchedule("Oppenheimer", oppenheimerTimes);
    
String[] insidiousTimes = {"9:30 P.M.", "10:20 P.M.", "11:00 P.M."};
athensSchedule.AddMovieSchedule("Insidious", insidiousTimes); 

报错信息

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.util.HashMap.put(Object, Object)" because "this.movieTimes" is null

问题分析与修复

问题根源

构造函数里的this.movieTimes = movieTimes;完全无效——它只是把未初始化的成员变量赋值给自身,导致movieTimes始终为null,调用put方法时必然触发空指针异常。

修复方案

修改构造函数,正确初始化movieTimes为HashMap实例:

import java.util.HashMap;

public class movieSchedule extends movieEvent {

    private HashMap<String, String[]> movieTimes;

    public movieSchedule() {
        // 初始化HashMap实例
        this.movieTimes = new HashMap<>();
    }

    public void AddMovieSchedule(String name, String[] times) {
        movieTimes(name, times);
    }

    private void movieTimes(String name, String[] times) {
        movieTimes.put(name, times);
    }
}

额外优化建议

方法名movieTimes和成员变量同名,容易造成混淆,建议修改方法名为更具语义的名称,比如addMovieTimeEntry,增强代码可读性:

import java.util.HashMap;

public class movieSchedule extends movieEvent {

    private HashMap<String, String[]> movieTimes;

    public movieSchedule() {
        this.movieTimes = new HashMap<>();
    }

    public void AddMovieSchedule(String name, String[] times) {
        addMovieTimeEntry(name, times);
    }

    private void addMovieTimeEntry(String name, String[] times) {
        movieTimes.put(name, times);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:03:39