Java 在这种情况下,我应该如何处理异常?
我是java新手。 我做了一个实现FIFO的类。我用一个链接列表来弹劾它。 我想知道当我的类Fifo的用户试图从列表中删除空的元素时,我应该抛出什么异常,以及如何正确执行Java 在这种情况下,我应该如何处理异常?,java,exception,exception-handling,Java,Exception,Exception Handling,我是java新手。 我做了一个实现FIFO的类。我用一个链接列表来弹劾它。 我想知道当我的类Fifo的用户试图从列表中删除空的元素时,我应该抛出什么异常,以及如何正确执行 import java.util.*; class Fifo<E> { private List<E> list = new LinkedList<E>(); public void add(E element) { list.add(eleme
import java.util.*;
class Fifo<E>
{
private List<E> list = new LinkedList<E>();
public void add(E element)
{
list.add(element);
}
public E remove() throws IllegalStateException
{
if(list.isEmpty())
throw new IllegalStateException();
else
return list.remove(0);
}
}
import java.util.*;
类先进先出
{
私有列表=新的LinkedList();
公共无效添加(E元素)
{
列表。添加(元素);
}
public E remove()引发IllegalStateException
{
if(list.isEmpty())
抛出新的非法状态异常();
其他的
返回列表。删除(0);
}
}
使用它的一个例子是有一列订单的餐厅
class Restaurant
{
static public void main(String[] args)
{
Fifo<Order> f = new Fila<Order>();
f.add(new Order("soup"));
try
{
System.out.println(f.remove().toString());
System.out.println(f.remove().toString());
}
catch(IllegalStateException e)
{
System.out.println("There is no more orders.");
}
}
}
高级餐厅
{
静态公共void main(字符串[]args)
{
Fifo f=新Fila();
f、 添加(新订单(“汤”);
尝试
{
System.out.println(f.remove().toString());
System.out.println(f.remove().toString());
}
捕获(非法状态)
{
System.out.println(“没有更多订单了”);
}
}
}
必须是RunTimeException吗?
在这种情况下,我的类的用户可以处理这个问题,只需对系统的用户说没有更多的订单,而无需退出系统
谢谢。您可以像在集合框架中一样抛出java.util.NoSuchElementException您可以像在集合框架中一样抛出java.util.NoSuchElementException您可以使用任何类型的异常,甚至可以创建自己的异常
内置类使用运行时异常,因为到处都有try/catch是令人沮丧的,程序员不应该在没有检查是否有要删除的元素的情况下尝试删除元素。您可以使用任何类型的异常,甚至可以创建自己的异常
内置类使用运行时异常,因为在任何地方都使用try/catch都会让人沮丧,程序员不应该在没有检查是否有要删除的元素的情况下尝试删除元素。底层java集合使用一个,你不需要特别抛出它,它会在默认情况下发生。一般来说,关于异常,您应该理解这种类型的异常应该被取消选中——它只在运行时已知,而不是在编译时。文档中对这一点进行了讨论,底层java集合使用的是在底层集合中执行的操作-事实上,您不需要专门抛出它,它将在默认情况下发生。一般来说,关于异常,您应该理解这种类型的异常应该被取消选中——它只在运行时已知,而不是在编译时。文档中对此进行了讨论为了与Java API的其余部分保持一致,我将使用
NoSuchElementException
(在Java.util中)
由于调用方通常应该在尝试从队列弹出之前验证队列是否为空,这种错误情况将指示编程错误,在这种情况下,我们通常使用RuntimeException
如果您确实使用了选中的异常(即,不是RuntimeException的子项),那么调用方将被迫使用try-catch或throws子句来处理该情况,这并没有真正的好处。为了与Java API的其余部分保持一致,我将使用
NoSuchElementException
(在Java.util中)
由于调用方通常应该在尝试从队列弹出之前验证队列是否为空,这种错误情况将指示编程错误,在这种情况下,我们通常使用RuntimeException
如果您确实使用了选中的异常(即非RuntimeException的子项),那么调用方将被迫使用try-catch或throws子句来处理该情况,而没有真正的好处。它是否需要是异常?类似的实现:@Creperum它不是类似的实现。OP的
remove
类似于没有参数的Dequeu
的remove
或没有参数的removeFirst
会引发异常。抛出NoTouchElementException
是正确答案,与JDK最为一致。但是,我也认为您应该执行类似于if(!f.isEmpty())f.remove()的操作代码>而不是使用尝试和捕获@realponsignist是的。我的答案仍然是不正确的,因为(如algor所示),替代方法抛出了一个NoTouchElementException,它需要是一个异常吗?类似的实现:@Creperum它不是类似的实现。OP的remove
类似于没有参数的Dequeu
的remove
或没有参数的removeFirst
会引发异常。抛出NoTouchElementException
是正确答案,与JDK最为一致。但是,我也认为您应该执行类似于if(!f.isEmpty())f.remove()的操作代码>而不是使用尝试和捕获@realponsignist是的。我的答案仍然是不正确的,因为(如algor所示),替代方法抛出了一个NosTouchElementException,它在默认情况下不会发生<代码>列表。删除(0)
如果列表为空,则抛出一个IndexOutOfBoundsException
。啊,好的,当然,如果指定一个索引,它是IndexOutOfBounds,如果执行默认的删除或弹出操作,它不是触摸元素,默认情况下不会发生<代码>列表。删除(0)
如果列表为空,则抛出一个IndexOutOfBoundsException
。啊,好的,如果指定索引,它是IndexOutOfBounds,如果执行默认的删除或弹出操作,它是NoTouchElement