我正在为Java Data Structures类完成作业,我们必须使用链表实现从堆栈ADT构建程序。教授要求我们包含一个名为popTop()的方法,它弹出堆栈的顶部元素,如果堆栈为空则抛出“StackUnderflowException”。从我可以收集的内容来看,这是一个我们必须自己编写的异常类,我遇到了一些问题。如果有人能帮助我,我将非常感激。以下是我的一些代码:
private class StackUnderflowException extends RuntimeException {
public StackUnderflowException() {
super("Cannot pop the top, stack is empty");
}
public StackUnderflowException(String message) {
super(message);
}
}
这是我写的异常类,这是我到目前为止所写的popTop()方法的开头:
public T popTop() throws StackUnderflowException {
if (sz <= 0) {
throw new StackUnderflowException();
}
}
我收到的错误表明StackUnderflowException不能成为RuntimeException的子类,是否有人可以对此有所了解?在方法中我遇到错误,说StackUnderflowException未定义。
答案 0 :(得分:4)
您的构造函数是私有的,您应该扩展Exception
,而不是RuntimeException
。
答案 1 :(得分:0)
您的代码有2个问题 1.您定制的Exception类是私有的 2.它扩展了运行时异常,它应该扩展超类Exception
您可以创建自定义例外,如下所示:
公共类StackUnderflowException扩展Exception {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public StackUnderflowException(){
}
/**
* The constructor wraps the exception thrown in a method.
* @param e the exception instance.
*/
public StackUnderflowException( Throwable e)
{
super(e);
}
/**
* The constructor wraps the exception and the message thrown in a method.
* @param msg the exception instance.
* @param e the exception message.
*/
public StackUnderflowException(String msg, Throwable e)
{
super(msg, e);
}
/**
* The constructor initializes the exception message.
* @param msg the exception message
*/
public StackUnderflowException(String msg)
{
super(msg);
}