诊断Java代码: 吊挂复合错误典范[Java编程]
本文“诊断Java代码: 吊挂复合错误典范[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
空指针处处都有!
在一个 Java 程序员所能碰到的全部非常中,空指针非常属于最可怕的,这是因为:它是程序能给出的信息最少的非常.比方,不像一个类转型非常,空指针非常不给出它所需求的内容的任何信息,只有一个空指针.此外,它并不指出在代码的何处这个空指针被赋值.在很多空指针非常中,真正的错误呈目前变量被赋为空值的地方.为了发现错误,我们必须通过掌握流跟踪,以发现变量在那边被赋值,并肯定能否这么做是不精确的.当赋值呈目前包中,而不是呈目前发生报错的地方时,进程会被明显地破坏.
很多 Java 开辟人员奉告我,他们所碰到的绝大大都程序崩溃是空指针非常,并且他们巴望有一种工具,能在程序第一次运行前静态地辨认出这些错误.不幸的是,自动掌握理论奉告我们,没有工具可以静态地决意哪些程序将抛出空指针非常.但是在一个程序中,用一个工具解除很多空指针非常是有大概的,留给我们仅仅一小部份需求我们必须人工查抄的潜在的问题所在.实际上,为了为 Java 程序(请参阅 参考资料)供应这样一个工具,目前正做着一些研究.但是一个好的工具也只能为我们做这些.空指针非常将决不会被完好铲除.当它们真的发生时,工具能帮我们弄清和它们相接洽的错误范例,这样我们能快速诊断它们.别的,我们可以利用某些编程和计划本领来明显削减这些范例错误的呈现.
吊挂复合范例
我们将探究的第一个关于空指针非常的错误范例,是一个我称之为吊挂复合范例的错误范例.这种范例的错误是这样产生的:定义的某些基本例没有被给出它们自己的类,然后以这种办法定义了一个递归的数据范例.相反,空指针被插入到差别的复合数据范例中.数据范例实例的利用就仿佛空指针被精确填充了一样.我称之为吊挂复合范例是因为冲突代码是复合计划范例的一个有缺陷的利用程序,此中,复合数据范例包含吊挂的引用(也就是空指针).
缘由
考虑下面 LinkedList 类的单衔接履行,它有一个吊挂复合范例.为了示例的简单起见,我只履行在 java.util.LinkedList 中定义的一些办法.为了显示这种范例的错误是多么躲藏,我已经在下面代码中引入一个错误.看看你能否能发现它.
>清单 1. 单衔接链表
import java.util.NoSuchElementException;
public class LinkedList {
private Object first;
private LinkedList rest;
/**
* Constructs an empty LinkedList.
*/
public LinkedList() {
this.first = null;
this.rest = null;
}
/**
* Constructs a LinkedList containing only the given element.
*/
public LinkedList(Object _first) {
this.first = _first;
this.rest = null;
}
/**
* Constructs a LinkedList consisting of the given Object followed by
* all the elements in the given LinkedList.
*/
public LinkedList(Object _first, LinkedList _rest) {
this.first = _first;
this.rest = _rest;
}
}
以上是“诊断Java代码: 吊挂复合错误典范[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |