处理异常永远不会在相应的try语句的主体中抛出OverFlowException

时间:2014-05-10 18:31:49

标签: java exception exception-handling

这是我的堆栈代码的数组实现:

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类中调用它。
请帮我找到解决此异常问题的方法

2 个答案:

答案 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类的新对象。