【Java 对象.getxxx() 空指针】

问题代码

@Data
@AllArgsConstructor
@NoArgsConstructor
public class StudentDao {

    private Integer id;

    private String name;

    private Integer age = 20;

        public static void main(String[] args) {
        String data = "{\"name\":\"张学友\"}";
        StudentDao studentDao = JSON.parseObject(data, StudentDao.class);
        if (studentDao != null) {
            int id = studentDao.getId();
            System.out.println("id是:" + id);
        }
        System.out.println(studentDao);
    }

在执行代码时,直接报出空指针异常,从代码中能看出,在获取字段属性之前就已经判断studentDao对象不为null,那么问题难道出现在getId()中?
在这里插入图片描述

没错,可以发现 id 属性的类型是包装类 Integer,当 StudentDao 对象从 JSON 字符串中解析出来时,如果 JSON 字符串中没有包含 “id” 字段,那么 getId() 方法将返回 null,此时代码返回类型误写成 int 基本数据类型,会抛出 NullPointerException。

解决办法

我们只需将 int 类型更换成id属性对应的 Integer 包装类型
在这里插入图片描述
同时也在提醒我们写代码时,获取变量时尽量使用快捷键(Ctrl+Alt+v)来生成声明类型,避免上面出现的错误。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、实验目的及内容 目的:掌握和稳固Java面向对象程序设计的概念、方法。 内容: 1. 设计一个Java程序,该程序运行后,说明:一个类的所有对象共享同一个类成员变 量;一个类的多个对象拥有各自的实例成员变量。 2. 编写一个表示人的类Person,该类满足以下要求: 有两个private成员变量:name〔名字〕、age〔年龄〕;在Person类外访问这两个 成员变量均通过接口器函数〔getXXX,setXXX〕。 该类具有一个有两个参数的构造函数,这两个参数分别用来初始化name和age成员变 量。 该类包含一个方法public boolean older(Person r),用于比较当前对象年纪是否比参数r的年纪大,假设是,那么返回true,否那 么,返回false。 编写另外一个类:TestPerson,该类包含下面函数: public static void sortPerson〔Person[] personList〕,在该函数中利用Person类的older方法实现对数组personList按年龄 从小到大排序。main函数位于该类中。在main函数中 1. 创立Person类的10个对象,并保存到一个数组中,创立10个对象时,每个对象的 年龄为0~100的一个随机数〔用Math.random()函数得到〕。 2. 输出这个数组中每个对象的名字、年龄。 3. 调用sortPerson方法,对这个数组中的10个Person对象按年龄排序。 4. 输出排序后数组中每个对象的名字、年龄。 二、要求 1. 给出上述程序的中涉及到的类的类图〔可用visio画〕、解决上述问题的思路、代码 和测试结果。 1.设计一个Java程序,该程序运行后,说明:一个类的所有对象共享同一个类成员 变量;一个类的多个对象拥有各自的实例成员变量。 设计思路:要实现一个类的所有对象共享同一个类成员变量;一个类的多个对象拥有各 自的实例成员变量。我创立了一个Number类,并创立了两个对象number1和number2,该 类有一个类成员函数static int numberofsum(int a, int b)来求和,一个类成员变量countnumber来统计对象的个数,还有实例成员变量num,通 过两个对象求和以及统计对象个数,说明了一个类的所有对象共享同一个类成员变量, 两个对象都有自己的num值说明了一个类的多个对象拥有各自的实例成员变量。 类图: 程序代码: //package number; public class Number { public static void main(String[] args) { Number number1 = new Number(5); + number1.countnumbers); Number number2 = new Number(10); + number2.countnumbers); + number1.num + " and " + number2.num); + numberofsum(number1.num, number2.num)); } static int countnumbers = 0; int num; Number(int a) { num = a; countnumbers++; } static int numberofsum(int a, int b) { int sum = a + b; return sum; } } 测试结果: 2.编写一个表示人的类Person,以及另外一个类:TestPerson。详细要求见实验内容 。 设计思路:定义两个类Person和TestPerson,TestPerson类中有public static void sortPerson〔Person[] personList〕来对创立的十个对象进展年龄大小排序。 类图: 程序代码: //package testperson; public class TestPerson { public static void main(String[] args) { final int number = 10; Scanner input = new Scanner(System.in); Person[] personArray = new Person[number]; for (int i = 0; i < personArray.length; i++) { String personName = input.next(); int personAge = (int) (Math.random() * 100); personArray[i] = new Person(

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值