用finally清除违例

无论一个违例是否在try块中发生,我们经常都想执行一些特定的代码。对一些特定的操作,经常都会遇到这种情况,但在恢复内存时一般都不需要(因为垃圾收集器会自动照料一切)。为达到这个目的,可在所有违例控制器的末尾使用一个finally从句(注释④)。所以完整的违例控制小节象下面这个样子:

try {
// 要保卫的区域:
// 可能“掷”出A,B,或C的危险情况
} catch (A a1) {
// 控制器 A
} catch (B b1) {
// 控制器 B
} catch (C c1) {
// 控制器 C
} finally {
// 每次都会发生的情况
}

④:C++违例控制未提供finally从句,因为它依赖构建器来达到这种清除效果。

为演示finally从句,请试验下面这个程序:
 

//: FinallyWorks.java
// The finally clause is always executed

public class FinallyWorks {
  static int count = 0;
  public static void main(String[] args) {
    while(true) {
      try {
        // post-increment is zero first time:
        if(count++ == 0)
          throw new Exception();
        System.out.println("No exception");
      } catch(Exception e) {
        System.out.println("Exception thrown");
      } finally {
        System.out.println("in finally clause");
        if(count == 2) break; // out of "while"
      }
    }
  }
} ///:~

通过该程序,我们亦可知道如何应付Java违例(类似C++的违例)不允许我们恢复至违例产生地方的这一事实。若将自己的try块置入一个循环内,就可建立一个条件,它必须在继续程序之前满足。亦可添加一个static计数器或者另一些设备,允许循环在放弃以前尝试数种不同的方法。这样一来,我们的程序可以变得更加“健壮”。
输出如下:
 

Exception thrown
in finally clause
No exception
in finally clause

无论是否“掷”出一个违例,finally从句都会执行。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
, exception
, 控制器
, 程序
, clause
, c atcher finalize
, finally
一个
3秒违例、24秒违例、8秒违例、三秒违例、走步违例,以便于您获取更多的相关知识。

时间: 2025-01-30 10:35:11

用finally清除违例的相关文章

重新“掷”出违例

在某些情况下,我们想重新掷出刚才产生过的违例,特别是在用Exception捕获所有可能的违例时.由于我们已拥有当前违例的句柄,所以只需简单地重新掷出那个句柄即可.下面是一个例子: catch(Exception e) { System.out.println("一个违例已经产生"); throw e; } 重新"掷"出一个违例导致违例进入更高一级环境的违例控制器中.用于同一个try块的任何更进一步的catch从句仍然会被忽略.此外,与违例对象有关的所有东西都会得到保

确保正确的清除java对象

Java不具备象C++的"破坏器"那样的概念.在C++中,一旦破坏(清除)一个对象,就会自动调用破坏器方法.之所以将其省略,大概是由于在Java中只需简单地忘记对象,不需强行破坏它们.垃圾收集器会在必要的时候自动回收内存. 垃圾收集器大多数时候都能很好地工作,但在某些情况下,我们的类可能在自己的存在时期采取一些行动,而这些行动要求必须进行明确的清除工作.正如第4章已经指出的那样,我们并不知道垃圾收集器什么时候才会显身,或者说不知它何时会调用.所以一旦希望为一个类清除什么东西,必须写一个

360极速浏览器如何清除浏览数据

您可以全面控制从浏览器中删除的浏览数据类型以及要删除的时间范围. 打开清除浏览数据对话框的方法: 点击状态栏上的"清除浏览数据" 在"选项" – "高级选项",点击"清除痕迹"按钮 点击以下链接查看您在选择各个选项时会分别删除哪些数据:

怎么清除网页病毒

  1.IE插件遭恶意破坏 网上有报道称在正常关机之后,再次开机,Windows XP系统却不能正常启动.WindowsXP系统开机后,在启动列表中无论是选择正常或者安全模式启动,均无法正常进入系统,而且机器随后自动重启,如此循环,使用系统修复等措施也无法启动系统.后经分析发现了影响系统无法启动的文件"CnsMinKP.sys". CnsMinKP.sys 并不是windows提供的系统文件,而是一个第三方的驱动文件,在文件的属性里有某互联网公司的相关信息.驱动程序一般都是在系统的最底

Win7系统如何清除任务栏输入法旁边问号图标

  我们现在使用的Win7旗舰版系统很多的特点都是得到了用户们的肯定,特别是具有比较好操作的界面,管理软件也是非常的方便,但是往往很多时候就可能会出现问题,比如说我们的输入法旁边有可能会出现一个问号,相信很多的朋友都遇到过,看着特别的不舒服,如果需要去掉这个问号该怎么办呢,具体的操作方法这里就分享给大家了. Win7系统如何清除任务栏输入法旁边问号图标的方法如下: 1.我们先点击鼠标的右键选中输入法的图标,这个时候我们就可以弹出的任务栏目中其他图标的选项,这个时候我们发现它是处于一个勾选的情况,

清除系统盘中的老旧系统备份文件

有些朋友从旧版本Windows系统升级到Windows 8后会感觉系统盘空间占用比较大,这是因为Win8升级过程中会将之前的系统文件自动备份存储在Windows.old文件夹中,这个文件夹的体积从几 GB到十几GB不等,如果本身系统分区的空间不是很充足,磁盘占用的问题就会比较明显.想要删除这个文件夹,可以使用Win8系统的"磁盘清理"功能,方 法如下. 按"Win+E"打开Win8文件资源管理器,可以从系统分区中看到"Windows.old"文件

清除css、js缓存的问题

问题描述 清除css.js缓存的问题 为了解决缓存问题,引进hash,请问以下两种方式效果有不同吗,哪种更好 1 加参数后缀 style.css?85d5fbce27dd2d50e2e2 2 改文件名 style_85d5fbce27dd2d50e2e2.css 解决方案 第一个好点吧,第二个还要多一个步骤修改文件名. 不过有些时候还得看服务端配置,要是有些服务器端是居于文件名进行缓存可能无法更新缓存内容 解决方案二: 如果改完,清楚缓存后页面还没变化 有一个办法: ?ver=0.1">

win7系统怎么清除360浏览器缓存

  win7系统怎么清除360浏览器缓存 1.打开360浏览器,点击主页的工具栏->选择清除上网痕迹; 2.在弹出的对话框中选择清除时间和所要清除的记录,勾选退出浏览器时完全清楚勾选的痕迹,点击立即清理; 3.清理完毕时显示出的界面如图. 解决方法二: 1.打开360浏览器->打开最右边的工具栏->选择工具->internet选项; 2.在弹出的internet属性对话框中选择常规->浏览历史记录->选择删除; 3.在弹出的浏览历史记录的对话框中选择所要清除的记录,点击

service-大神:Android的Service如何实现不被手机清除缓存,而被杀掉

问题描述 大神:Android的Service如何实现不被手机清除缓存,而被杀掉 1.就是实现一个不被干掉的Service.2.我是实现对短信的监听的,使用了静态注册后,退出Activity是可以监听,可是被清除缓存后(长按HOME键位清除),就没有反应了.有没有好的方法? 解决方案 /** * 每次调用startService(Intent)的时候, * 都会调用该Service对象的onStartCommand(Intentintint)方法, * 然后在onStartCommand方法中做