博客
关于我
记录一次空指针异常(NullPointerException)的断点调试
阅读量:282 次
发布时间:2019-03-03

本文共 904 字,大约阅读时间需要 3 分钟。

前提:SalariedEmployee(月薪资) 和HourlyEmployee(时薪资)子类继承Employee的抽象父类,来获取父类里的属性/方法,并重写扩展为自己的方法。

先来看下我的报错情况:NullPointerException

在这里插入图片描述

  1. 此处输出的3是因为我获取了一下当前的月份,所以基本锁定在输出语句System.out.println(month);也就是24行之后;
    在这里插入图片描述

空指针异常:是一个运行级别的异常,即只有在运行时才会抛出NullPointerException

在看到这个异常之后,我首先想我的数组是存在的,有没有初始化?有;访问的对象是否存在?存在;对象是否为空?应该不为空(结果是空的,草率了)

  1. 断点调试:主要针对24行以后的代码:可以看到emps[0] = null; emps[1] = null;首先我确定了数组有初始化后,其次new SalariedEmployee()new HourlyEmployee()是没问题的;接着name/number/birthday等的赋值操作都是调用的子类的toString()方法;
    在这里插入图片描述
  2. 继续往下走,果然显示toString()方法抛出了NullPointerException
    在这里插入图片描述
  3. 首先两个子类的toString()方法都是重写的父类的toString()方法,但方法内部调用了super.toString();
    在这里插入图片描述
    在这里插入图片描述
  4. 继续往下走,可以看到父类EmployeetoString()方法只是returnname,number,birthday.toDateString()方法而已;
    在这里插入图片描述
  5. 想着总不可能变量出错吧,检查birthday.toDateString()方法,里面也只是returnMyDate的属性,且没有问题;
    在这里插入图片描述
  6. 一路都没有问题,不得不去检查Employee的属性了,好吧,破案了!属性没有问题,构造器里空空如也,没有this调用,所以当调用此构造器时,输入的name/number/birthday将不能传给此时正在创建的对象,当然也就无法输出了;
    在这里插入图片描述
    8.破案后的正常输出!
    在这里插入图片描述
    名言(我说的):debug很难搞,但debug成功后还好:)

转载地址:http://fyll.baihongyu.com/

你可能感兴趣的文章
赠书和投票 | 你知道中国有哪些Server SAN厂商吗? 投票:你心目最好的HCI品牌是?
查看>>
区块链公链如何才能快起来
查看>>
linus下centos7防火墙设置
查看>>
学习笔记-----分布式事务基础理论,CAP组合方式
查看>>
Base理论介绍
查看>>
HashMap和ArrayList初始大小和扩容后的大小
查看>>
volatile关键字和AtomicInteger
查看>>
RedisTemplate中opsForValue()中的方法
查看>>
redisTemplate.opsForHash()
查看>>
Mac下安装jdk8
查看>>
知识框架梳理
查看>>
JUC知识
查看>>
lamba语法格式
查看>>
jvm栈和寄存器
查看>>
局部变量表
查看>>
循环体内,字符串的连接方式,使用StringBuilder的append方法进行扩展
查看>>
maven生命周期
查看>>
方法的绑定机制-静态绑定和动态绑定
查看>>
jvm
查看>>
内核程序和应用程序
查看>>