try{……}里面是一些你觉得可能会出问题的代码,catch里就是你觉得会有什么问题,如果出的问题正好是你catch里说到的问题,那么他就会按照你设定的,比如会打印出来,比如会退出方法等等……然后接着往下执行后面该执行的代码。
但是如果你不用try{}的话,没问题,很好,一有问题,代码就会在那里停住,然后给用户一个很不友好的默认的错误提示,一般这个提示只有开发人员等内行人可以看懂。
也就是说加不加try,区别在于不加程序不知道怎么执行,会停住,而加了,就会按您给定的处理异常程序的步骤,处理完了,接着走往下的代码,不会down机。
另外,有try可以没有catch,try还可以和finally{}搭配,但是有try必须有catch或者finally中的一个。
还有,如果不想在这个方法里处理,而在调用的方法里一起处理的话,可以直接在方法的签名也就是方法名后的小括号后面,加throws Exception,把异常抛给别人,像推太极一样,推给别人,谁调用我,谁就要负责处理。
刚刚看到以前有人提的问题,我在这总结一下:
下面的代码:
public class FinallyTest {
private static int test() {
int i=1;
try {
i=2;
return i;
} catch (Exception e) {
i = 3;
return i;
} finally {
i = 4;
}
}
public static void main(String[] args){
FinallyTest finallyTest = new FinallyTest ();
System.out.println("i=" + finallyTest.test());
}
}
打印结果是i=2,而不是等于4,明明在finally里赋值为4了
原因是:
i是值变量,你在try里面写了return i; 这时虚拟机栈已经把 i 这时的值copy到栈顶,然后才再去处理finnaly,之后你对 i 进行任何改变不会影响这时候栈顶的这个返回值,只会影响 i 的值。所以尽管此时i的值变了,但那是 i 的事情,不是Return的事情。
这样问题就解决了。
你经常用到if else吧,其实道理都是一样的。
可是用if else进行判断,你必须知道这个事件肯定会发生那种错误,可以使用这个进行判断。最典型的就是用户登录,他的密码和用户名是唯一的,所以完全可以用if else判断
但是在程序中,很多东西不能完全知道会出现几种情况,可能还有很多情况是未知的的。比如判断用户键盘输入,今天我们或许会想到只能输入数字和字母,所以只对数字和字母进行判断,可是明天用户可能还会输入很多奇怪的符号甚至图片等等,结果难以预料。所以就不能呢个用if else判断。
这个时候,就引进了异常机制,出现了try catch块,所有可能引发程序的错误,都交给catch执行。而在try{}块中只写符合条件的,不符合条件的,不用我们显式判断,全部会在catch中进行判断。catch会让程序终止或者给用户一个提示等等。
分享到:
相关推荐
Springboot全局异常捕获及try catch区别解析 Springboot全局异常捕获是一种机制,用于捕获并处理应用程序中的异常情况,以便提供友好的用户体验和错误处理。try catch语句是Java语言中的一种异常处理机制,用于捕获...
`try-catch`语句块用于捕获和处理可能出现的异常,确保程序在遇到错误时不会立即终止,而是能够优雅地处理问题并继续执行。当一个`try`块中的代码抛出异常,相应的`catch`块将捕获该异常并执行相应的处理代码。在...
本示例中的"trycatch.zip"文件内容就是展示了如何在Golang中模拟`try...catch`和`try...catch...finally`。 Golang的核心错误处理方式是通过返回错误值。通常,函数会返回一个错误值,如果在执行过程中遇到问题,就...
在C语言中,使用goto和标签的方式模拟try catch的功能,使用setjmp和longjmp方式模拟try catch的功能,两种方式都可以使用,setjmp的方式可以支持try catch嵌套,goto的方式不支持嵌套,但是jmpbuf的开销是比较大的...
### Java中try-catch的用法详解 #### 一、基本概念 在Java编程语言中,`try-catch`结构是一种用于处理程序运行时可能出现的异常情况的重要机制。通过使用`try-catch`块,开发者可以更加精细地控制程序的行为,并...
在Visual C++(简称VC)环境下,我们可以利用`try`、`catch`关键字来实现异常处理。下面我们将深入探讨这些知识点。 首先,`try`块是异常处理的起点,它包围了可能抛出异常的代码。如果在`try`块内发生了异常,程序...
### try-catch 用法详解 #### 一、引言 在编程中,错误处理是一项重要的任务,良好的错误处理机制可以提升程序的健壮性和用户体验。C# 中提供了 `try-catch` 结构来捕获并处理运行时可能出现的异常。通过本篇文章...
Java的 try 与 catch finally关键字的使用
在编程领域,异常处理是确保程序健壮性的重要机制,`try-catch`语句块就是其中的关键元素。`try-catch`用于捕获并处理程序运行时可能出现的错误或异常,防止程序因未预期的状况而崩溃。然而,一个常见的疑问是:`try...
你还可以在`try-catch-finally`结构内部嵌套另一个`try-catch-finally`结构,以处理更复杂的情况。这种方式使得异常处理更加灵活,能够针对不同层次的异常进行分别处理。 6. **throw和throws关键字** `throw`...
在C#编程中,异常处理是程序健壮性的重要组成部分,`try-catch-finally`语句块就是C#提供的一种处理运行时错误的方式。它允许程序员在代码可能抛出异常的地方进行捕获并处理,确保即使在异常情况下,程序也能以一种...
`try-catch`块是Java异常处理的核心部分,它允许程序员在代码可能出现问题的地方进行异常捕获和处理,避免程序因未预期的错误而崩溃。下面我们将详细讨论`try-catch`捕获异常的实例。 首先,`try`块是包含可能抛出...
3. **异常处理**:一旦进入 `catch` 块,就可以通过捕获的异常对象来获取有关异常的详细信息,并进行相应的处理。 4. **最终执行**:无论是否发生异常,`finally` 块中的代码都会被执行。 #### 四、`try-catch` 的...
在本案例中,我们关注的是一个名为“async-catch-loader”的webpack loader,它旨在自动化这个过程,即在编译阶段自动为async函数添加try/catch结构。 Webpack是前端开发中广泛使用的模块打包工具,它通过加载器...
本文将深入探讨Java中的`try-catch-finally`语句块,以及它们在异常处理中的作用。 首先,`try`块是异常处理的起点。在这个代码段中,我们通常会放置可能会抛出异常的代码。当Java执行到可能抛出异常的代码行时,...
**前端开源库——Trycatch详解** 在Web开发中,异常处理是确保代码健壮性和稳定性的重要环节。前端开源库Trycatch就是专为了解决这个问题而诞生的,它提供了一种基于异步领域的异常处理机制,尤其针对Node.js环境,...
在没有 `async-try-catch` 的情况下,我们需要在每个 `await` 表达式周围都包裹 `try/catch`,这可能导致代码变得冗长且难以维护。`async-try-catch` 提供了一种方式,可以在整个 `async` 函数内统一处理错误,使得...
VB.NET 演示带Finally的Try Catch 异常处理用法演示,这个源码就是捕捉VB.NET运行错误的,结合了最常规的try catch组合,并且使用了Finally处理的情况,那么为什么要使用Finally呢?使用Finally的好处是,把资源释放...