• try catch异常处理


    try catch
    clr自上而下搜索匹配的catch块,一个try块对应多个catch块,越具体的catch应该在上面,接着是她们的基类型,最后是exception类,未指定也是exception类型。如果上下顺序反了,那么具体的catch块会执行不到,编译器会报错。
    try catch 以后,如果只是处理了捕获的异常(例如记日志),没有抛出异常(throw),后续代码会继续执行
    throw是抛出一个异常,中断执行后续代码,如果一个方法可能会有异常,但你不想处理这个异常,就是用throw,谁调用了这个方法谁就要处理这个异常,或者继续抛出。
    throw和throw ex
    1 throw ex 抛出与catch捕捉到的相同的异常对象,导致clr重置该异常的起点。认为你catch到的异常已经被处理了,只不过处理过程中又抛出新的异常,从而找不到真正的错误源 try{ }catch (Exception ex){ throw ex; }
    2 throw 重新抛出异常对象,clr不会重置起点(推荐使用这个)try{} catch{ throw;}
    3 或者对异常就行重新包装,保留原始异常点信息,然后抛出
    finally:
    无论代码有没有抛出异常,finally块始终会执行。应该先用finally块清理那些已经成功的操作,还可以用finally显示释放对象避免资源泄露。
    使用了 lock,using,foreach的语句,c#编译器会自动加上try finally块,并在finally中自动释放资源
    可以在一个线程中补获异常,在另外一个线程中重新抛出异常;
    clr在调用栈中向上查找与抛出的异常对象类型匹配的catch块,没有任何catch块匹配抛出的异常类型,就会发生一个未处理的异常
  • 相关阅读:
    2020多校补题集
    2020牛客多校第10场C Decrement on the Tree树上路径删除
    主席树模板(查询区间第K大的元素)
    第一次小赛
    计算几何小知识整理
    咸鱼暂时退圈
    mysql 格式化时间
    mysql 中国省份城市数据库表
    CF786B Legacy (线段树优化建图模板)
    树上两点期望距离
  • 原文地址:https://www.cnblogs.com/shaner/p/6295319.html
Copyright © 2020-2023  润新知