java中try-catch和throw之间的区别

时间:2010-09-25 18:05:57

标签: java exception

try-catch和throw子句之间有什么区别。何时使用这些?

请告诉我。

8 个答案:

答案 0 :(得分:75)

  • try块将执行可以抛出异常的敏感代码
  • 只要在try块中抛出异常(被捕获的类型),就会使用catch
  • 在try / catch块之后的每个情况下调用finally块。即使未捕获异常,或者您之前的块中断了执行流程。
  • throw关键字将允许您抛出异常(这将破坏执行流程,并且可以在catch块中捕获。)
  • 方法原型中的throws关键字用于指定您的方法可能抛出指定类型的异常。当您检查了当前方法中不想捕获的异常(必须处理的异常)时,它非常有用。

资源:


另一方面,你应该接受一些答案。如果有人遇到与您相同的问题并找到您的问题,他/她将很乐意直接看到问题的正确答案。

答案 1 :(得分:29)

如果执行以下示例,您将知道Throw和Catch块之间的区别。

一般而言:

catch 块将处理异常

throws 会将错误传递给他的来电者。

在以下示例中,错误发生在 throwsMethod()中,但它在 catchMethod()中处理。

public class CatchThrow {

private static void throwsMethod() throws NumberFormatException {
    String  intNumber = "5A";

    Integer.parseInt(intNumber);
}

private static void catchMethod() {
    try {

        throwsMethod();

    } catch (NumberFormatException e) {
        System.out.println("Convertion Error");
    }

}

public static void main(String[] args) {
    // TODO Auto-generated method stub

    catchMethod();
}

}

答案 2 :(得分:6)

尝试/ catch和throw子句用于不同的目的。所以他们不是彼此的替代品,但他们是互补的。

  1. 如果你在代码中抛出一些已检查的异常,它应该在代码调用层次结构中的一些try / catch中。

  2. 相反,只有在抛出检查异常的代码(您的代码或API调用)中有一些throw子句时,才需要try / catch块。

  3. 有时,如果在调用代码块时要处理特定条件,并且在某些情况下处理一些异常catch块并再次抛出相同或不同的异常来处理调用块,则可能需要抛出异常。

答案 3 :(得分:4)

所有这些关键字try,catch和throw都与java中的异常处理概念有关。例外是在程序执行期间发生的事件。异常会破坏应用程序的正常流程。异常处理是一种用于处理异常的机制,以便可以维护正常的应用程序流。 Try-catch块用于处理异常。在try块中,我们编写可能抛出异常的代码,在catch块中我们编写代码来处理该异常。 Throw关键字用于显式抛出异常。通常,throw关键字用于抛出用户定义的异常。

有关详细信息,请访问{{3}}。

答案 4 :(得分:1)

其他人已经给出了全面的答案,但如果您正在寻找更多信息,那么Oracle Java教程始终是一个很好的资源。这是Exceptions的Java教程,它详细介绍了您的所有问题; https://docs.oracle.com/javase/tutorial/essential/exceptions/index.html

答案 5 :(得分:0)

throws是一个声明,它声明可能发生但不一定发生的多个异常, throw是只能抛出一个异常(通常是非运行时异常)的动作, try catch是一个捕获异常的块,该异常可以在方法中发生异常时处理,可以抛出此异常。异常可以理解为一种责任,应由引起异常的行为来负责,而不是由上级呼叫者来

答案 6 :(得分:0)

try块包含可能发生异常的一组语句。

catch块将用于处理try块中发生的异常。 try块后面总是catch块,我们可以有多个catch块。

finally块在catch块之后执行。当有多个catch块时,我们基本上使用它放置一些通用代码。即使有异常也不会最终执行块。

throw关键字将允许您引发异常,它用于将控制权从try块转移到catch块。

throws关键字用于不带try&catch块的异常处理。它指定了方法可以抛出给调用者并且自身无法处理的异常。

// Java程序,用于演示抛出,抛出,尝试,捕获和最终运行的过程。

 public class MyExample { 
      
        static void myMethod() throws IllegalAccessException 
        { 
            System.out.println("Inside myMethod()."); 
            throw new IllegalAccessException("demo"); 
        } 
      
        // This is a caller function  
        public static void main(String args[]) 
        { 
            try { 
                myMethod(); 
            } 
            catch (IllegalAccessException e) { 
                System.out.println("exception caught in main method."); 
            }
            finally(){
                System.out.println("I am in final block.");
            } 
        } 
    } 

输出:

Inside myMethod().
exception caught in main method.
I am in final block.

答案 7 :(得分:-1)

尝试 - 添加敏感代码 catch - 处理异常 最后 - 始终执行是否捕获异常。与try -catch相关联。用于关闭我们在try块中打开的资源 throw - 手动将创建的异常切换到JVM。用于抛出自定义异常 throws - 将异常处理的责任委托给调用方法或main方法。