try-catch和throw子句之间有什么区别。何时使用这些?
请告诉我。
答案 0 :(得分:75)
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子句用于不同的目的。所以他们不是彼此的替代品,但他们是互补的。
如果你在代码中抛出一些已检查的异常,它应该在代码调用层次结构中的一些try / catch中。
相反,只有在抛出检查异常的代码(您的代码或API调用)中有一些throw子句时,才需要try / catch块。
有时,如果在调用代码块时要处理特定条件,并且在某些情况下处理一些异常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方法。