编程小技巧 避免Java的NullPointerException

来源:互联网 发布:如何设置windows外观 编辑:程序博客网 时间:2024/05/18 01:11


在编写程序的时候,尤其是在我们编写Java的时候,最容易出现一个异常那就是NullPointerException异常,对于新手来说,最郁闷的就是辛辛苦苦敲打出2千多行的代码后,然后进行debug,却没想到弹出了一堆NullPointerException

而且最为郁闷的是这个异常还是异常难发现的异常,简单的说,这个异常情况是非常隐蔽的!

那么有什么办法可以避免产生这样的异常呢?而这样的异常它产生在什么地方呢?

 

首先,在Java中,我们常用的一个类便是String,在Sun公司提供的手册上,可以看到String有一个NullPointerException的异常抛出,另外的异常则来源于我们自己编写的类被系统抛出了异常。

 

为什么会导致这样的问题?

首先,null指针的引用是因为我们在创建一个对象时,运用赋值语句并非真正的将对象赋值给另外一个对象,而实际上则是Java为了节省内存的开销,隐性的将我们要被赋值的对象用指针指向了我们要赋值的那个对象,而Java在顶层没有提供给用户指针的使用,所以在程序执行时我们就感到我们的对象被赋值了。

这是什么意思?举个例子来说

String test1 = "this is a test";

test1并非是个String 的对象,该String的真正对象是"thisis atest",这个对象被放置在内存中的某个位置,并用了test1去指向该位置,于是我们就可以等价的理解test1就是这个String的对象。请记住,在大多数补习班或者专业课里面凡是谈到String类的时候,讲师都应该会有这方面的介绍,所以笔者在这里便不再做过多的累述。

好了,既然这个是一个指针,那么问题就来了,也就是说当你在接收一个值的时候,而那个值实际上时不存在的,换句话说也就是在内存中是没有这个对象存在的话,那么你的String类指针便不知道指向内存的何方,因此它会将NullPointerException抛出,告诉用户去检查你的程序代码。

 

也就是说你用这样的方法去使用这个类并且调用里面的方法的时候系统就会抛出异常

 

举个简单的例子

public void test( String input ){

System.out.println( input.equals("test" );

};

然后在某个方法里面调用这个方法

public void check() {

String get = null;//warning!

test( get);//NullPointerException!!!!

}

你要是这个地方不抛出异常你只管打死我好了,问题就出在这里。系统被指派了一个根本不存在(只存在于你的概念中而不存在于内存中)的值或者对象,那么系统就会因为找不到位置而抛出异常!

 

在这里给各位朋友提点意见

1) 当一个对象可能被指向一个null的时候,应该对它进行try-catch操作

 

2)如果嫌第一个手段极为麻烦,那么试一试将对象的位置换一换,例如上面的例子中将例子换成"test".equals(input);那么程序将不会抛出NullPointerException这个异常,当然这个看起来有点怪怪。

 

3)对你输入的类型进行有效性检查,如果前面两种都不满意的话,那么在你每个接收输入的地方都要进行类型检查,并且记住一点优先检查指针为空的情况!

例如:检察一个输入的String类型的target变量是否为合法输入的时候要先检查

if( target != null&& !target.isEmpty() )

一定要这样写,而不能 if( !target.isEmpty()&& target != null)这样的话程序因为优先执行左边的判断语句,从而导致NullPointerException的发生!!!这个一定要记住!

原创粉丝点击