1.在finally块中,关闭资源 public class Test{ public static void main(String[]args){ FileInputStream fis=null; FileOutputStream fos=null; ...... try{ //do something... }finally{ //有危险的关闭方式1 fis.close(); fos.close(); //有危险的关闭方式2 if(fis!=null){ fis.close; } if(fos!=null){ fos.close(); } //推荐的方式 if(fis!=null){ try{ fis.close(); }catch(Exception){ e.printStackTrace(); } } if(fos!=null){ try{ fos.close(); }catch(Exception){ e.printStackTrace(); } } } } } 2.finally块的陷阱 public class Test{ public static void main(String[]args){ FileOutputStream fos=null; try{ // do something... System.out.println("打开资源"); System.exit(0); }finally{ if(fos!=null){ try{ fos.close(); }catch(Exception){ e.printStackTrace(); } } System.out.println("关闭资源"); } } } 解释:这个程序"关闭资源"不会输出,因为try块中的System.exit(0);将当前线程停止了,而finally块不能执行已经停止的线程. 若非要输出“关闭资源”,且执行System.exit(0);则修改如下: public class Test { public static void main(String[] args) throws Exception { final FileOutputStream fos; fos = new FileOutputStream("a.bin"); System.out.println("打开物理资源"); //为系统注册关闭钩子 Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { if (fos != null) { try { fos.close(); } catch (Exception e) { e.printStackTrace(); } } System.out.println("程序关闭了资源"); } }); System.out.println("退出程序"); System.exit(0); } } 3.finally块和方法返回值 public class Test { public static void main(String[] args) { int a = test(); System.out.println(a); } private static int test() { int count = 5; try { System.out.println("try"); return count + 2; // 不执行 } finally { System.out.println("finally"); return -1; // 执行 } } } 解释:当在try块中有return 语句的时候,且有finlly的时候,不会立马执行try块中的return ,而是执行finally中的程序。 若finally块中也有return 语句,则执行finally中的reutrn 语句,然后程序结束,不会执行try块中的return public class Test { public static void main(String[] args) { int a = test(); System.out.println(a); } private static int test() { int count = 5; try { throw new RuntimeException("测试异常"); //不执行 } finally { System.out.println("finally"); return count; } } } 解释:当在try块中抛出异常时候,若finally块中有 return语句,则程序不会真正抛出异常,而是直接执行完finally块后,返回return语句。
相关推荐
下面将详细介绍try-catch-finally语句的使用方法和注意事项。 一、try块 try块是try-catch-finally语句的核心部分,用于包装可能出现异常的代码。try块中的代码在执行时,如果出现异常,会被catch块捕获和处理。...
在深入探讨C#中异常处理的性能注意事项之前,我们首先需要理解异常处理的基本概念及其在C#中的实现方式。异常处理是一种程序设计技术,用于在程序执行过程中出现非预期情况时,提供一种有序的方式来恢复程序的正常...
"Java 中的异常和处理详解" ...通过这篇文章,我们了解了 Java 中的异常和处理机制,了解了异常的分类和类结构图,了解了异常处理机制的作用和步骤,了解了异常处理的好处和注意事项,了解了异常处理的 best practice。
在`finally`块中显式抛出异常应尽量避免,因为这可能会混淆异常处理流程。 在选择异常类型时,优先使用系统提供的异常,但如果有特定的错误处理需求,则可以创建自定义异常。避免为了创建新异常而创建,而是应选择...
Java提供了强大的异常处理机制,包括try-catch-finally语句块。开发者应当合理使用这些机制,避免程序因未处理的异常而崩溃。同时,应当区分检查性异常(checked exceptions)和运行时异常(runtime exceptions),...
1. 异常处理:在Action方法中,不应直接抛出异常。应当使用try-catch块捕获异常,并向用户提供友好的错误提示,避免出现无法理解的乱码或白页。同时,记录异常堆栈信息以帮助定位错误。 2. 事务管理: - 事务应...
在Java程序中,可以通过try-catch-finally块来自主处理异常,try块内放置可能抛出异常的代码,catch块用来捕获特定类型的异常并进行处理,而finally块则通常用于执行清理操作,如释放资源。 编译时异常必须在try块...
在Java中,异常处理通常使用`try-catch-finally`语句块来实现。`try`块包含可能会抛出异常的代码,`catch`块则用于捕获并处理特定类型的异常,`finally`块则是可选的,无论是否发生异常,这部分代码都会被执行,常...
3. **异常处理**:Java使用try-catch-finally结构处理异常,确保资源得到正确释放。避免忽视finally块,以防止资源泄露。 4. **内存管理**:虽然Java有垃圾回收机制,但过度创建对象仍可能导致内存溢出。合理使用...
2. **异常处理的原则与注意事项** - 在设计异常处理时,应始终考虑当异常发生时,如何确保系统的正常运行状态能够得到妥善处理。 - 异常处理不仅要考虑当前层次上的处理,还要考虑异常向上抛出的情况。 #### 三、...
#### 四、异常处理注意事项 - **避免滥用异常**:应将异常用于真正的错误处理而不是正常的控制流。 - **选择合适的异常类型**:确保使用的异常类型准确反映了问题的本质。 - **记录异常信息**:在捕获异常后应该...
异常处理的注意事项: 1. 错误不是异常,而是脱离程序员控制的问题。 2. 所有的异常类是从 java.lang.Exception 类继承的子类。 3. 异常类有两个主要的子类:IOException 类和 RuntimeException 类。 4. Java 有很...
- **注意事项**: 子类异常必须出现在父类异常之前。 3. **try-finally**: - **定义**: 不论是否发生异常,`finally`块中的代码都会被执行。 - **应用场景**: 用于释放资源等操作。 4. **try-catch-finally**: ...
Python是一种广泛应用于各种领域的编程语言,以其简洁的语法和丰富的...这些注意事项能帮助开发者充分利用Python的优势,开发出高效、安全、易于维护的程序。遵循这些最佳实践,将使你在Python开发旅程中更加得心应手。
这篇文章将深入探讨.NET中的异常及其处理机制,提供一些关键的注意事项和良好的异常处理实践。 异常是程序运行期间发生的非正常事件,可能导致程序中断。在.NET中,所有异常都直接或间接地继承自`System.Exception`...
能够让系统在出现异常的情况下恢复过来的程序使用异常处理情况:异常诊断与异常处理不在同一个位置下时使用异常处理程序(若用户一直通过键盘与程序通话,那么就不能使用处理键盘输入处理)使用异常的注意事项:<BR>...
- **finally块注意事项**: - 不论是否发生异常,`finally`块中的代码都将被执行。 - 当`try`和`catch`块中包含`return`语句时,`finally`块依然会被执行。 - `finally`块会在`return`语句执行之后,但在实际返回...
- 本地方法抛出异常后,Java方法栈上的所有finally块都不会执行,这是与Java异常处理的一个关键区别。 综上所述,理解和掌握JNI中的异常处理是Android开发中的重要技能,它能帮助开发者在混合编程时更好地处理错误...
4. **finally块中的return问题**:在`finally`块中使用`return`语句会导致`try`或`except`块中的`return`语句失效。例如: ```python def test(): try: return True finally: return False print(test()) #...