catch (Exception e) {} 与 finally {}
catch (Exception e) {} vs finally {}
我正在尝试理解和使用异常。
为什么要用finally?除了 finally,我还可以执行 catch(Exception e){}。这样我的程序永远不会崩溃,并且始终执行 catch 之后的代码。
此外,我可以在 try 和 catch 之后添加一个 if/else 来检查是否抛出了异常。这样我的程序就永远不会崩溃,并且 if/else 会创建一个标准行为。
例如伪代码:
public void enterAndPrintANumber() {
boolean exception = false;
int number = 0;
try {
System.out.println("Please enter a Number")
number = BufferedReader.readLine();
} catch(NumberFormatException e) {
System.out.println("Please enter a number")
}
catch(Exception e) {
System.out.println("An error has occurred")
exception = true;
}
if(exception) {
System.out.println("Action will be restarted")
this.enterAndPrintANumber();
} else {
System.out.println("Your Number is "+number)
}
}
好的......
对于catch:只有在执行代码时出现异常才会执行catch。这是为了使代码在意外情况下也能正常工作。您显然不希望以意想不到的方式崩溃和停止您的代码。
最后:假设您正在使用数据库。现在,无论是否发生崩溃,在完成必要的处理后关闭数据库连接确实是一个好习惯。另一个例子可能是文件系统。如果您正在处理文件并且无论是否发生崩溃,您可能总是希望在完成工作或处理后关闭文件流。你可能会问为什么?
好吧,这个答案解释得很好:
所以,无论是否发生崩溃,finally 显然都会被执行。在最后一个块中,您将以优雅的方式关闭与数据库、文件流等的连接。
简而言之try/catch/finally被解释为你想尝试的代码,如果出现问题该怎么办,最后是清理代码。 finally 块最常见的用途是关闭您已使用完的资源。所以你可以有一个像这样的块:
Reader reader = null;
try {
reader = new StringReader("test");
//do stuff with reader
} catch (Exception e) {
//print the exception, log it, do something.
} finally {
reader.close()
}
现在,由于添加了自动关闭 AutoClosable 接口的 Try With Resources 结构,此用例已基本弃用。
另一个用例是,如果您使用诸如信号量之类的东西来进行同步。在您的 try{} 块中,您将获取()信号量,而在您的 finally 块中,您将释放它。
我正在尝试理解和使用异常。
为什么要用finally?除了 finally,我还可以执行 catch(Exception e){}。这样我的程序永远不会崩溃,并且始终执行 catch 之后的代码。 此外,我可以在 try 和 catch 之后添加一个 if/else 来检查是否抛出了异常。这样我的程序就永远不会崩溃,并且 if/else 会创建一个标准行为。
例如伪代码:
public void enterAndPrintANumber() {
boolean exception = false;
int number = 0;
try {
System.out.println("Please enter a Number")
number = BufferedReader.readLine();
} catch(NumberFormatException e) {
System.out.println("Please enter a number")
}
catch(Exception e) {
System.out.println("An error has occurred")
exception = true;
}
if(exception) {
System.out.println("Action will be restarted")
this.enterAndPrintANumber();
} else {
System.out.println("Your Number is "+number)
}
}
好的...... 对于catch:只有在执行代码时出现异常才会执行catch。这是为了使代码在意外情况下也能正常工作。您显然不希望以意想不到的方式崩溃和停止您的代码。
最后:假设您正在使用数据库。现在,无论是否发生崩溃,在完成必要的处理后关闭数据库连接确实是一个好习惯。另一个例子可能是文件系统。如果您正在处理文件并且无论是否发生崩溃,您可能总是希望在完成工作或处理后关闭文件流。你可能会问为什么?
好吧,这个答案解释得很好:
所以,无论是否发生崩溃,finally 显然都会被执行。在最后一个块中,您将以优雅的方式关闭与数据库、文件流等的连接。
简而言之try/catch/finally被解释为你想尝试的代码,如果出现问题该怎么办,最后是清理代码。 finally 块最常见的用途是关闭您已使用完的资源。所以你可以有一个像这样的块:
Reader reader = null;
try {
reader = new StringReader("test");
//do stuff with reader
} catch (Exception e) {
//print the exception, log it, do something.
} finally {
reader.close()
}
现在,由于添加了自动关闭 AutoClosable 接口的 Try With Resources 结构,此用例已基本弃用。
另一个用例是,如果您使用诸如信号量之类的东西来进行同步。在您的 try{} 块中,您将获取()信号量,而在您的 finally 块中,您将释放它。