C#,Java,C++中的finally关键字
博客原文:http://hankjin.blog.163.com/blog/static/33731937201031511305338/
先说C++,标准C++不支持finally, 如果要实现finally的效果,可以用析构函数来实现: class File_handle {
FILE* p;
public:
File_handle(const char* n, const char* a)
{ p = fopen(n,a); if (p==0) throw Open_error(errno); }
File_handle(FILE* pp)
{ p = pp; if (p==0) throw Open_error(errno); }
~File_handle() { fclose(p); }
operator FILE*() { return p; }
// ... };
C#和Java基本一致 以C#为例 无论是否有异常,理论上finially都会在最后被调用,实际上,要确保在执行到finally之前没有Exit 正常流程:注释掉2,运行流程为1-》3-》8-》7 异常流程:注释掉3和5,运行流程为1-》2-》4-》6-》8-》7 退出流程:注释掉3,运行流程为1-》2-》4-》5,注意这里finally没有被调用 C#代码 namespace CXX
{
class TestX
{
public TestX()
{
Console.WriteLine("TestX constructor");//8
}
}
class Program
{
static TestX f()
{
try
{
Console.WriteLine("Enter F");//1
throw new Exception("Tester");//2
return new TestX();//3
}
catch (Exception)
{
Console.WriteLine("Except caught");//4
System.Environment.Exit(0);//5
return new TestX();//6
}
finally
{
Console.WriteLine("Finaly");//7
}
}
static void Main(string[] args)
{
Program.f();
}
}
} Java代码: class A{
public A(){
System.out.println("A construct");//8
}
}
public class Test{
static A f(){
try{
System.out.println("Worked");//1
throw new Exception("Ok");//2
return new A();//3
}
catch(Exception e){
System.out.println("Except");//4
System.exit(1);//5
return new A();//6
}
finally{
System.out.println("Finaled");//7
}
}
public static void main(String args[])throws
Exception{
Test.f();
}
}
C#,Java,C++中的finally关键字的更多相关文章
- java继承中关于super关键字和this关键字的使用
1.super关键字 由于子类不能继承父类的构造方法,因此,如果要调用父类的构造方法,可以使用 super 关键字.super 可以用来访问父类的构造方法.普通方法和属性.super 关键字的功能: ...
- 安卓开发(Java)中关于final关键字与线程安全性
前言 学习新知识固然重要,但是时常往回看看,温故知新是很必要的.回顾一下线程安全性和final关键字. 正文 从Java 5开始,final keyword一个特殊用法是在并发库中一个非常重要且经常被 ...
- 理解Java中的final关键字
final关键字的基本用法 1. 修饰类 出于安全考虑,类无法被继承 2. 修饰方法 防止继承类修改方法private方法会隐式指定为final方法: 3. 修饰变量 基本数据类型,初始化后不能再修改 ...
- zz剖析为什么在多核多线程程序中要慎用volatile关键字?
[摘要]编译器保证volatile自己的读写有序,但由于optimization和多线程可以和非volatile读写interleave,也就是不原子,也就是没有用.C++11 supposed会支持 ...
- Java继承中的转型及其内存分配
看书的时候被一段代码能凌乱啦,代码是这样的: package 继承; abstract class People { public String tag = "疯狂Java讲义"; ...
- Java基础中的一些注意点
1.在Java编程语言中,标识符是赋予变量.类或方法的名称.标识符可从一个字母.下划线(_)或美元符号($)开始,随后也可跟数字.标识符是大小写区别对待的并且未规定最大长度. 2.Java技术源程序采 ...
- JAVA多线程之Synchronized关键字--对象锁的特点
一,介绍 本文介绍JAVA多线程中的synchronized关键字作为对象锁的一些知识点. 所谓对象锁,就是就是synchronized 给某个对象 加锁.关于 对象锁 可参考:这篇文章 二,分析 s ...
- java里面的标识符、关键字和类型
1. 注释 Java中有三种注释: (1) // -单行注释,注释从“//”开始,终止于行尾: (2) -多行注释,注释从““结束: (3) -是Java特有的doc注释,这种注释主 ...
- Java泛型中的协变和逆变
Java泛型中的协变和逆变 一般我们看Java泛型好像是不支持协变或逆变的,比如前面提到的List<Object>和List<String>之间是不可变的.但当我们在Java泛 ...
随机推荐
- config 数据库字符串的读取、修改 分类: WebForm 2014-12-16 10:24 203人阅读 评论(0) 收藏
config数据库字符串: <connectionStrings> <add name="MyWebDataString" connectionString= ...
- Oracle 同步表权限分配(同义词)
新建了同义词之后还要 分配权限
- 遇到奇怪的C#/C/C++或者Java的bug可以去问问Coverity
Coverity7月16号在博客Ask The Bug Guys中说以后遇到奇怪的C#/C/C++或者Java的bug可以给TheBugGuys@coverity.com发邮件.然后这些问题就会到一些 ...
- UML 的基本组成
UML 是由UML构造块.规则.通用机制三部分组成的.而UML构造块由建模元素(事物).关系和图组成. 建模元素 建模元素是对模型中最具有代表性的成分的抽象.一般情况下,将建模元素分为结构元素.行为元 ...
- The app references non-public selectors in Payload
上周上传app到appstore在validation完后有警告提示"The app references non-public selectors in Payload/wacao.app ...
- 树莓派(raspberry)启用root账户 分类: 服务器搭建 Raspberry Pi 2015-04-12 18:45 95人阅读 评论(0) 收藏
树莓派使用的linux是debian系统,所以树莓派启用root和debian是相同的. debian里root账户默认没有密码,但账户锁定. 当需要root权限时,由默认账户经由sudo执行,Ras ...
- 基于Android 4.4 开发的多窗体系统 开放源代码
Hi, 这是我基于Android 4.4开发的多窗体系统,还有非常多不足,还请多多不吝赐教啊,代码已经所有开源. 视频地址 源代码地址 Done: 1. APP以窗体化显示 在 PhoneWindow ...
- [转] Spring Boot and React hot loader
When I develop web applications, I love using React. I'm also a Spring and groovy addict. Those two ...
- Objective-C:属性(@property)
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- Asp.net Mvc 第一回 安装,并使ASP.NET MVC页面运行起来
直接上图吧: 1.到官方网站下载:http://www.asp.net/mvc/ Codeplex开源站点:http://www.codeplex.com/aspnet(下载源代码及Futures包) ...