Java自定义类数组报null的相关问题及解决

 更新时间:2023年09月29日 08:50:48   作者:Dwoura犀利  
这篇文章主要介绍了Java自定义类数组报null的相关问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Java自定义类数组报null问题

不要沿用c++的想法。

java的数组分基本数据类型和引用类型

  • 基本数据类型:如int[] s=new int[10]; 这里面创建了长度为10的整型数组,并且自动为每个元素创建了对象,即能找到相关地址
  • 引用类型:如写了个class student(){}, 在student[] s=new student[10]中只是new了数组空间,我们还要对s[0]-s[9]每一个创建对象,否则数组为null。

解决方法

for(int i=0;i<10;i++)
{
    s[i]=new student();
}

可以理解为先创建了空数组,然后为每一个元素添加了属于它的属性。

实例:

设某一个班共有N(N=20)名学生,期末考试5门课程,请编一程序评定学生的奖学金,要求打印输出一、二等奖学金学生的学号、姓名和各门课成绩。       (奖学金评定标准是:总成绩超过全班总平成绩20%发给一个奖学金,超过全班总平成绩10%发给二个奖学金。)

Java自定义类二维数组出现NullPointerException错误

自定义的类

package com.hbq.bugs;
// MyClass 类
public class MyClass {
    public int s1;
    public int getS1() {
        return s1;
    }
    public void setS1(int s1) {
        this.s1 = s1;
    }
}

主函数

package com.hbq.bugs;
public class App {
    public static void main(String[] args) {
        MyClass [][] c=new MyClass[10][10];
        c[0][0].setS1(1);
    }
}

运行会出现

进入debug模式发现

c[0]的所有元素都是null。

这是由于引用对象不初始化默认都为null的原因。

所以会有一个长度为10的一维数组,每个一维数组的元素又是长度为10的一维数组,这个数组里的元素默认都为null。

所以要对每一行每一列进行实例化赋值开拓新空间。

package com.hbq.bugs;
public class App {
    public static void main(String[] args) {
        MyClass[][] c = new MyClass[10][10];
//        c[0][0].setS1(1);
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                c[i][j] = new MyClass();
            }
        }
        c[0][0].setS1(1);
        System.out.println(c[0][0].getS1());
    }
}

运行成功!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot集成XXL-JOB实现任务管理全流程

    SpringBoot集成XXL-JOB实现任务管理全流程

    XXL-JOB 是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过 Spring Boot 项目,使用 RestTemplate 和 Feign 的方式调用 XXL-JOB 后台管理接口,实现任务的全生命周期管理,需要的朋友可以参考下
    2025-08-08
  • springboot集成nacos的配置方法

    springboot集成nacos的配置方法

    这篇文章主要介绍了springboot集成nacos的配置方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • java冒泡排序和快速排序代码

    java冒泡排序和快速排序代码

    本文主要介绍了java冒泡排序和快速排序的实例代码。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04
  • MyBatisPlus如何优化千万级数据的CRUD

    MyBatisPlus如何优化千万级数据的CRUD

    最近负责的一个项目,数据库表量级破千万,每次执行 CRUD 都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊 MyBatis Plus在千万级数据场景下如何优化 CRUD
    2025-06-06
  • Java 添加文本框到PPT幻灯片过程解析

    Java 添加文本框到PPT幻灯片过程解析

    这篇文章主要介绍了Java 添加文本框到PPT幻灯片过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 利用java模拟实现键盘鼠标操作(附源码)

    利用java模拟实现键盘鼠标操作(附源码)

    这篇文章主要为大家详细介绍了如何从零设计并实现一个功能完备的键盘鼠标模拟库,提供比原生 Robot 更友好的 API,更高的可定制性和可扩展性,感兴趣的小伙伴可以了解一下
    2025-05-05
  • springmvc实现跨服务器文件上传功能

    springmvc实现跨服务器文件上传功能

    这篇文章主要为大家详细介绍了springmvc实现跨服务器文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • java判断域名无法访问自行访问下一条

    java判断域名无法访问自行访问下一条

    这篇文章主要为大家介绍了java实现判断域名无法访问的时候自行访问下一条域名示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • redisson分布式限流RRateLimiter源码解析

    redisson分布式限流RRateLimiter源码解析

    这篇文章主要为大家介绍了redisson分布式限流RRateLimiter源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • SpringBoot集成screw实现数据库文档生成的代码示例

    SpringBoot集成screw实现数据库文档生成的代码示例

    数据库设计文档是项目技术文档的重要组成部分,Screw 是一款开源的数据库文档生成工具,它支持多种数据库类型,并能生成丰富格式的文档,本文将通过一个实际的例子,展示如何使用 Spring Boot 集成 Screw 生成数据库设计文档
    2024-07-07

最新评论