为什么在查找溢出时会在双链接列表中得到死代码?(Java)



我必须制作一个双链接列表,并且我必须为列表中出现溢出而破例,这是我第一次在Java中这样做,为什么它会显示为"死码";在节目中?不是这样做的吗?

public void Insert(T element) {
try {
if (element == null) {
throw new IllegalArgumentException();
}
Nodo newNodo = new Nodo(element);
if (newNodo == null) {                   //Dead code ¿why?
System.out.println("Overflow");
}
if (this.isEmpty()) {        
this.head = newNodo;
this.tail = newNodo;
}
...

由于我不知道要标记的"重复"问题,我会把它放在答案中。

构造函数(在某些方面(看起来像一个方法,但并不完全相同。(主要(区别之一是它没有返回语句,也没有返回类型。

它所做的是创建一个类的实例,如果您像在代码中那样将其分配给一个变量,则将其分配到所述变量。

在一种方法中,你可以做这样的事情:

Nodo newNodo = getNodo(element);

而getNodo方法可以做到这一点:

public Nodo getNodo(T element) {
if ( someValidationFailed(element)) {
return null;
}
return new Nodo();
}

在这段代码中,您编写的null检查是有意义的,因为这个方法实际上可能返回null。然而,构造函数不能。

Nodo newNodo = new Nodo(element);
if (newNodo == null) {                   //Dead code ¿why?
System.out.println("Overflow");
}

构造函数调用永远不会导致null。它要么导致newNodo变量指向新的Nodo实例,要么引发了异常。

如果没有抛出Exception,则Node newNodo = new Nodo(element);之后的行不可能计算为true,因为newNodo不能为null。

但是,如果抛出异常,则永远无法到达该行。要么Exception在链上传播得更远,要么它被捕获在捕获块中,但它永远不会到达:

if ( newNodo == null ){

行。

编辑:在Andy Turner的评论之后,做了一个小的澄清。

构造函数用于基于类蓝图创建对象。通过使用new关键字,可以在内存中为新对象创建空间,并且初始化其字段。建筑商

当您使用new关键字创建对象时,将采取三个步骤:

  1. 声明Nodo-newNodo=新的Nodo(元素(
  2. 实例化Nodo newNodo=Nodo(元素(
  3. 初始化Nodo newNodo=newNodo(元素(

所以,实际上,创建实例的不是构造函数,而是";使用新关键字"运行构造函数的整个过程;确实如此。

步骤

最新更新