Try-Catch-Throw在同一个Java类中

时间:2010-03-07 01:17:40

标签: java arrays exception-handling error-handling try-catch

是否可以在当前类中捕获try-catch块正在运行的方法?例如:

  public static void arrayOutOfBoundsException(){
      System.out.println("Array out of bounds");
  }

    .....

  public static void doingSomething(){
    try
    {
       if(something[i] >= something_else);
    }
    catch (arrayOutOfBoundsException e)
    {
       System.out.println("Method Halted!, continuing doing the next thing");
    }
  }

如果可能,调用catch方法的正确方法是什么?

如果不可能,有没有人能指出我正确的方向,如何阻止异常停止在Java中强制执行程序,而不必创建任何包中的新类,或修复产生ArrayOutOfBoundsException错误的代码。

先谢谢,

Java新手

6 个答案:

答案 0 :(得分:6)

您想要做的是处理Exception

public static void doingSomething(){
    try {
        if (something[i] >= something_else) { ... }
    } catch (ArrayIndexOutOfBoundsException e) {
        System.out.println("Method Halted!, continuing doing the next thing");
    }
}

这就是你所需要的一切。没有额外的课程,没有额外的方法。

异常是一种特殊类型的类,可以“抛出”(您可以使用throw关键字自行抛出它,或者Java可能会为您抛出一个,例如,如果您尝试访问数组索引不存在或尝试对null执行某些操作。抛出的异常将“解包”您的调用堆栈(从每个函数调用中“转义”),直到程序最终终止。除非你catch,否则这正是上面的语法。

因此,如果您正在编写调用函数a()的函数b(),该函数调用函数c()并且c()引发异常,但异常未被捕获b()c(),您仍然可以在a()中找到它:

void a() {
    try {
        b();
    catch (SomeExceptionClass e) {
        // Handle
    }
}

也就是说,如果可以防止异常被抛出,那通常是一个更好的主意。在您的特定情况下,这是可能的,因为Java中的所有数组都知道它们自己的长度:

public static void doingSomething(){
    if (i >= something.length) {
        System.out.println("Method Halted!, continuing doing the next thing");
    } else {
        if (something[i] >= something_else) { ... }
    }
}

答案 1 :(得分:4)

嗯..我觉得你有点困惑。你没有用try catch块捕获一个方法。你抓住了例外。例外更像是事物。

仅此一项(注意ArrayOutOfBoundsException的大写“A”)将阻止程序终止,即使抛出异常也是如此。您不需要声明“arrayOutOfBoundsException()”方法。

public static void doingSomething(){
    try
    {
       if(something[i] >= something_else);
    }
    catch (ArrayOutOfBoundsException e)
    {
       System.out.println("Method Halted!, continuing doing the next thing");
    }
  }

注意小“e”?这是您可以用来引用此异常的参考。因此,您可以使用这个小局部变量向此异常提问。例如,如果要打印发生异常的位置,可以执行e.printStackTrace();

答案 2 :(得分:3)

使用try-catch块捕获异常。不确定你是否可以用这个来捕捉方法。

public static void myMethod(){
    try {
        // check for some given condition
    }
    catch (conditionNotSatisfied e) {
        System.out.println("Condition was not satisfied, you tried to do something which is not allowed");
    }
}

catch()中的'e'是用于引用异常的引用。 例外情况是指希望检查您的特定情况并向您返回有关不满意条件的警告或错误。

答案 3 :(得分:1)

我认为你的意思是让arrayOutOfBoundsException方法抛出引起的异常...如果我理解正确:

public static void arrayOutOfBoundsExceptionMethod() throws ArrayIndexOutOfBoundsException  {
      \\...
      \\ code that throws the exception
  }

    .....

  public static void doingSomething(){
    try
    {
       if(something[i] >= something_else);
       arrayOutOfBoundsExceptionMethod();
    }
    catch (ArrayIndexOutOfBoundsException e)
    {
       System.out.println("Method Halted!, continuing doing the next thing");
    }
  }

这就是你在问什么?

答案 4 :(得分:0)

我正在试图理解你在问什么,你的术语在某些地方是错误的:)如果你试图设置一个超出范围的索引,你将会得到一个内置的异常,ArrayIndexOutOfBoundsException 。你可以捕获这个并在方法中使用它,或者在方法的头部使用class XX throws ArrayIndexOutOfBoundsException声明抛出它,这样调用方法就可以捕获它(它不需要捕获ArrayIndexOutOfBoundsException as这是一个RuntimeException - 也就是说,如果它没有被捕获就没有任何反应,它是未经检查的。

有关详细信息,请参阅此Wiki文章:http://en.wikibooks.org/wiki/Java_Programming/Throwing_and_Catching_Exceptions

答案 5 :(得分:0)

目前尚不清楚你的意思是“是否有可能找到一种方法”。在您的情况下,您应该将代码编写为:

   if(i < something.length && something[i] >= something_else);

不需要ArrayOutOfBoundsException