Try Catch Finally 中Finally的代码在什么时候不被执行

近日执行一段陈旧的代码,一个Batch执行EXE,每日无限循环。

唯一可以停掉该Batch的方法,就是直接将进程杀掉,或者在Batch的CMD窗口关掉X按钮。

而后,进程中永远都会增加一个Excel的执行进程。 必须手动关闭。

想来十分愚蠢,但细读元代码后,发现在处理中有Try Catch Finally 的语句。但其Finally中

原本希望的执行的,关掉Excel进程的部分,并没有正常执行。

细读http://thedailywtf.com/articles/My-Tales后。

归结为:

在采取杀死进程(包括点击X按钮,Application.Exit()), 关电源, 以及系统内存泄漏等异常情况下, Finally 中

的语句不会被执行。只有正常的异常,比如文件不存在,数据库断连接等系统可预测级别的异常,才会进入Finally

因此,考虑Finally的执行语句时, 需要慎重考虑。

时间: 2024-10-25 22:43:24

Try Catch Finally 中Finally的代码在什么时候不被执行的相关文章

try~Catch语句中异常的处理过程

[2014/10/12 21:40]文章待续~ 1.函数自身捕获处理异常的情况 下面的例子介绍了try~catch语句中出现异常时语句的执行顺序: package month10; import java.lang.*; public class TryCatch{ /* * 函数产生一个ArithmeticException异常 */ public static void First(){ System.out.println("第一个异常处理的例子"); try{ //double

完整java开发中JDBC连接数据库代码和步骤

完整java开发中JDBC连接数据库代码和步骤 JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的静态方法forName(String  className)实现. 例如: try{ //加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver") ; }catch(Class

在.NET中如何取得代码行数

文章目的 介绍在.NET中取得代码行数的方法 代码 [STAThread] static void Main(string[] args) { ReportError("Yay!"); } static private void ReportError(string Message) { StackFrame CallStack = new StackFrame(1, true); Console.Write("Error: " + Message + "

Storm中的LocalState 代码解析

官方的解释这个类为: /** * A simple, durable, atomic K/V database. *Very inefficient*, should only be * used for occasional reads/writes. Every read/write hits disk. */ 简单来理解就是这个类每次读写都会将一个Map<Object, Object>的对象序列化存储到磁盘中,读的时候将其反序列化. 构造函数指定的参数就是你在磁盘中存储的目录,同时也作为

C#和JAVA中编写事务代码

C#  DAL层代码,执行多条增删改,使用事务操作: /// <summary> /// 执行 多条增删改 (非查询语句) /// </summary> /// <param name="strSql"></param> /// <param name="paras"></param> /// <returns></returns> public static int E

一个问题:关于finally中return吞掉catch块中抛出的异常

今天遇到一个感觉很神奇的问题,记录一下问题以及自己分析问题的思路. 预警:不知道怎么看java字节码的朋友可能需要先看一下如何阅读java字节码才能看懂后面的解释. 我有一段程序: public class Test { public static void main(String[] args) { try { int a = 1 / 0; } catch (Exception e) { throw e; } } } 这个程序的运行结果相信大家都能猜到: 在main方法里捕获异常没有处理直接往

如何在Java中调用Python代码

有时候,我们会碰到这样的问题:与A同学合作写代码,A同学只会写Python,而不会Java, 而你只会写Java并不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方设法“调用对方的代码”. 下面我将举一些简单的小例子,借此说明:如何在Java中调用Python代码. 看懂这篇文章只需要具备: 熟悉Java的基本语法 懂一点点Python 主要内容如下: 什么是Jython? 一个HelloPython程序 在Jvm中执行Python脚本 仅在Java中调用Python

C#中调用PowerShell代码

在C#中调用PowerShell代码,很多时候Add是不好使的!要用AddScript!记录一下! using (Runspace runspace = RunspaceFactory.CreateRunspace()) { try { runspace.Open(); Pipeline pipeline = runspace.CreatePipeline(); //必须要用AddScript. pipeline.Commands.AddScript("Add-PSSnapin Microsof

系统管理模块_部门管理_改进_抽取添加与修改JSP页面中的公共代码_在显示层抽取BaseAction_合并Service层与Dao层

系统管理模块_部门管理_改进1:抽取添加与修改JSP页面中的公共代码 commons.jspf <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <meta http-equiv="Conten