[英]Difference between try-catch and throw in java
try-catch 和 throw 子句有什么区别。 什么时候使用这些?
请告诉我。
try
块将执行可能引发异常的敏感代码catch
块finally
块。 即使未捕获到异常或者您之前的块中断了执行流程。throw
关键字将允许您抛出异常(这将中断执行流程并可以在catch
块中catch
)。throws
关键字用于指定您的方法可能会抛出指定类型的异常。 当您检查了不想在当前方法中捕获的异常(您必须处理的异常)时,它很有用。资源:
另一方面,你真的应该接受一些答案。 如果有人遇到与您相同的问题并找到您的问题,他/她将很乐意直接看到问题的正确答案。
如果您执行以下示例,您就会知道 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();
}
}
Try/catch 和 throw 子句用于不同的目的。 所以它们不是相互替代的,而是互补的。
如果您在代码中抛出了一些已检查的异常,它应该在调用层次结构的代码中的一些 try/catch 内。
相反,仅当代码(您的代码或 API 调用)中有一些 throw 子句会引发已检查异常时,才需要 try/catch 块。
有时,您可能希望在发生特定情况时抛出异常,您希望在调用代码块中处理这些情况,并且在某些情况下处理某些异常捕获块并再次抛出相同或不同的异常以在调用块中处理。
所有这些关键字 try、catch 和 throw 都与 java 中的异常处理概念有关。 异常是在程序执行期间发生的事件。 异常会破坏应用程序的正常流程。 异常处理是一种用于处理异常以维持应用程序正常流程的机制。 Try-catch 块用于处理异常。 在 try 块中,我们编写可能引发异常的代码,而在 catch 块中,我们编写代码来处理该异常。 Throw 关键字用于显式抛出异常。 通常,throw 关键字用于抛出用户定义的异常。
有关更多详细信息,请访问面向初学者的 Java 教程。
其他人已经给出了详尽的答案,但如果您正在寻找更多信息,Oracle Java 教程始终是一个很好的资源。 这是异常的 Java 教程,它非常详细地涵盖了您的所有问题; https://docs.oracle.com/javase/tutorial/essential/exceptions/index.html
在我对以下细节的有限经验中。throws 是声明可能发生但不一定发生的多个异常的声明,throw 是只能抛出一个异常的操作,通常是非运行时异常,try catch 是一个块捕获方法中发生异常时可以处理的异常,可以抛出这个异常。 希望我的回答能帮到你
try
块包含一组可能发生异常的语句。
catch
块将用于处理try
块中发生的异常。 try
块后面总是跟一个catch
块,我们可以有多个 catch 块。
finally
块在 catch 块之后执行。 当有多个catch块时,我们基本上用它来放置一些通用代码。 即使有异常或没有最终块被执行。
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.
try - 添加敏感代码 catch - 最后处理异常 - 无论异常是否被捕获,总是执行。 与 try -catch 相关联。 用于关闭我们在 try 块 throw 中打开的资源 - 手动将我们创建的异常移交给 JVM。 用于抛出自定义异常抛出 - 将异常处理的责任委托给调用方方法或主方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.