**空指针异常NullPointerException的解决思路
在我们程序中有时会遇到系统报这样的异常
Exception in thread "main" java.lang.NullPointerException
at com.qianfeng.kxf.day23.expection.NullPointerException.test4(NullPointerException.java:47)
at com.qianfeng.kxf.day23.expection.NullPointerException.main(NullPointerException.java:16)
这是一个什么异常?为什么会出现这样的异常?我们要怎么解决?
1.什么是空指针异常?
在我们所有的引用类型中,如果该引用是一个null,然后你还去使用它其中的属性或者方法,那么系统就会报出这样一个空指针异常。
2.我们遇到这样的异常,要怎么解决?
别急,分成四步来。
(1)找到报错行。报这样的错,肯定会提示在哪一行出现了问题,找到它。
(2)找到该行中的引用类型是哪个。
(3)判断找到的引用类型是否为空
(4)如果为空,并且你还使用了它的属性或方法,那么问题就是这里了。
直接看下面的例子:
//空指针异常:在所有的引用类型中,如果它是一个null,你还使用了他的属性或者方法,那么它就会报空指针异常
//解决步骤:
/* 1.找到报错行
* 2.找到引用类型
* 3.判断该引用类型是否为空
* 4.如果为空,并且还使用了它的属性和方法,就会报错.
*/
public class NullPointerException {
public static void main(String[] args) {
// test1();
// test2();
// test3();
test4();
}
//简单版
public static void test1() {
//直接看出null
TestP tp = null;
//因为tp是引用类型,而且tp是null,还调用了getP方法
System.out.println(tp.getP());//Exception in thread "main" java.lang.NullPointerException
}
//一般版
public static void test2() {
TestP tp=new TestP();
System.out.println(tp.getP().age);//Exception in thread "main" java.lang.NullPointerException
//这个虽然tp不是null,但是tp.getP()获取到的是Person对象,该对象没有初始化,引用类型默认为null,还调用了它的属性age,所以结果还是报错
}
//困难版
public static void test3() {
TestP tp=new TestP();
tp.setP(new Person());//为Person对象初始化,Person对象不再是null
System.out.println(tp.getP().age);//0,不报错,为什么?因为只是打印并没有调用呀
System.out.println(tp.getP().name);//null 因为虽然是null,但是我们没有调用他的方法,只是打印它
System.out.println(tp.getP().name.toString());//Exception in thread "main" null java.lang.NullPointerException
//这个就异常了,因为name为null,调用它的方法当然就报错了
}
//那思考一下这个例子,如果懂了那就基本ok了
public static void test4() {
TestP tp=new TestP();
System.out.println(tp.getP());//null
//这就是只是打印这个对象,没有调用它的方法。正常
}
}
class Person{
String name;
int age;
}
class TestP{
private Person p;//没有初始化,默认为null
//获取Person对象
public Person getP() {
return p;
}
//设置Person对象
public void setP(Person p) {
this.p = p;
}
}
其实遇到这样的异常,只要debug一下就能直接看到引用是否为空。