• 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();
        }
    }

  • 相关阅读:
    python socks5 代理服务
    F# 语言参考【摘自MSDN】
    vs2003版本的程序转换为vs2008版本时出现的一些问题及解决办法
    【转】SQL to Mongo Mapping Chart
    jQuery UI Download
    jQuery UI Multiselect
    jqGrid search oper
    apache下用expires_module让浏览器缓存静态文件
    【转】谈谈浏览器的缓存过期时间
    USACO 1.1 Friday the Thirteenth
  • 原文地址:https://www.cnblogs.com/CocoWang/p/3700611.html
Copyright © 2020-2023  润新知