这是我的堆栈代码的数组实现:
public class ArrayStack2{
private final int DEFAULT_SIZE=10;
public int tos;
Object[] array;
public ArrayStack2(){
array =new Object[DEFAULT_SIZE];
tos=-1;
}
public void push(Object e){
try{
array[tos+1]=e;
tos++;
}
catch(OverFlowException e1){
e1.print();
}
}
这是OverFlowException类:
public class OverFlowException extends Exception{
public OverFlowException(){
super();
}
public OverFlowException(String s){
super(s);
}
public void print(){
System.out.println("OverFlow");
}
}
当我运行此编译器时会出现错误"异常在相应的try语句的主体中永远不会抛出OverFlowException"
然后我意识到我没有包括该部分来检查数组是否为全()
我的问题是我在ArrayStack2类中有isFull()方法,我如何从OverFlowException类中调用它。
请帮我找到解决此异常问题的方法
答案 0 :(得分:0)
执行错误所要做的事情。永远不会捕获该异常,因为它不可能被抛出。如果发生了不好的事情,你需要扔它:
try{
array[tos+1]=e;
tos++;
if (thereWasAnOverflow) // or however you want to test it. isFull() maybe
throw new OverFlowException();
}
catch(OverFlowException e1){
e1.print();
}
答案 1 :(得分:0)
用户定义的例外仅在展开RuntimeException时才会被取消选中。
在您的情况下,OverFlowException
是已检查的异常,编译器会检查其可能性。如果没有抛出此检查异常的可能性,则没有处理已检查异常的意义,编译器将其威胁为无法访问的catch块。
在JAVA中,任何无法访问的内容都会导致编译时错误。
尝试使用此示例代码进行众所周知的已检查异常
try {
System.out.println("hello");
} catch (IOException e) {
e.printStackTrace();
}
编译时间错误:
Unreachable catch block for IOException.
This exception is never thrown from the try statement body
有关详细信息,请查看User defined exception are checked or unchecked exceptions
我的问题是我在
isFull()
课程中有ArrayStack2
方法,如何从OverFlowException
课程中调用它。
以相反顺序执行意味着根据您的条件在OverFlowException
类中从isFull()
方法中抛出ArrayStack2
类的新对象。