2012-10-26 147 views
2

我正在爲Java數據結構類進行作業分配,並且我們必須使用鏈表實現從堆棧ADT構建程序。教授要求我們包含一個名爲popTop()的方法,該方法彈出堆棧的頂層元素,並在堆棧爲空時拋出「StackUnderflowException」。從我能收集到的信息來看,這是一個我們必須自己編寫的異常類,而且我遇到了一些問題。如果有人能幫助我,我會非常感激。下面是我的一些代碼:拋出自定義Java異常

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是未定義的。

+4

你的構造函數是私有 –

+1

變化從'RuntimeException'(unchecke繼承d)「異常」(選中)。 –

+1

更改爲異常仍然給我的錯誤「無法繼承java.lang.Throwable – salxander

回答

4

你的建設者是私人的,你應該延伸Exception,而不是RuntimeException

+1

照顧構造函數問題(感謝您抓住每個人!),但我仍然有一個問題,嘗試子類異常以及RuntimeException – salxander

+1

這是一個答案,你不是在質疑OP :) –

+1

@xandergrzy它不適合擴展'RuntimeException'和'Error'例如,如果你有'Integer y = null; int i = y',那麼代碼將會很好的編譯,但是會拋出一個'NullPointerException'(它擴展了' RuntimeException')或'void blowStack(){blowStack();}'將拋出一個'StackOverflowError'(延長'Error')。 TP://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html)。 –

0

有2個問題,你的代碼 貴國的定製Exception類是私人 2.延長運行時異常的地方,如下給出應該entensing超異常

您可以創建自定義異常:

公共類StackUnderflowException擴展異常{

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); 
}