【问题标题】:Difference between try-catch and throw in javajava中try-catch和throw的区别
【发布时间】:2011-04-17 05:34:09
【问题描述】:

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

请告诉我。

【问题讨论】:

标签: java exception


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

资源:


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

【讨论】:

  • 您没有解决 throws 子句。我需要你这样做,以便当他接受我的回答时,我可以将他推荐给你的 :)
【解决方案2】:

如果你执行下面的例子,你就会知道 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();
}

}

【讨论】:

  • 比如把“private static void throwsMethod() throws NumberFormatException”改成“private static void throwsMethod() throws IndexOutOfBoundsException”,结果是一样的。
  • 这个例子很清楚,我很容易理解 try-catch 和 throw 的区别。谢谢~
【解决方案3】:

Try/catch 和 throw 子句用于不同的目的。所以它们不是相互替代的,而是互补的。

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

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

有时,如果发生您想要在调用代码块中处理的特定条件,您可能希望抛出异常,并且在某些情况下处理一些异常捕获块并再次抛出相同或不同的异常以在调用块中处理。

【讨论】:

    【解决方案4】:

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

    更多详情请访问Java tutorial for beginners

    【讨论】:

      【解决方案5】:

      其他人已经给出了详尽的答案,但如果您正在寻找更多信息,Oracle Java 教程总是一个很好的资源。这是 Java 异常教程,它非常详细地涵盖了您的所有问题; https://docs.oracle.com/javase/tutorial/essential/exceptions/index.html

      【讨论】:

        【解决方案6】:

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

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

        finally 块在 catch 块之后执行。当有多个catch块时,我们基本上使用它来放置一些通用代码。即使有异常或者finally块没有被执行。

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

        throws 关键字用于不使用 try & catch 块的异常处理。它指定了一个方法可以向调用者抛出的异常,而不是自己处理。

        // 演示 throws、throw、try、catch 和 finally 工作的 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】:

          根据我对以下 details.throws 的有限经验,它声明了多个可能发生但不一定发生的异常, throw 是一个只能抛出一个异常的动作,通常是一个非运行时异常, try catch 是一个块,当方法中发生异常时,可以捕获异常,这个异常可以被抛出。异常可以理解为一种责任,应该由引起异常的行为来处理,而不是由其上层调用者。 希望我的回答对你有帮助

          【讨论】:

            【解决方案8】:

            try - 添加敏感代码 catch - 处理异常 finally - 无论是否捕获异常,总是执行。与 try -catch 相关联。用于关闭我们在 try 块中打开的资源 throw - 手动将我们创建的异常移交给 JVM。用于抛出自定义异常 throws - 将异常处理的责任委托给调用者方法或主方法。

            【讨论】:

              猜你喜欢
              • 2010-12-14
              • 1970-01-01
              • 1970-01-01
              • 2011-02-20
              • 1970-01-01
              • 2014-04-14
              • 2011-01-24
              • 2015-07-07
              • 1970-01-01
              相关资源
              最近更新 更多