• 《java异常的一些总结》


    关于Java中异常的一些总结:
      3     有些时候,程序在try块里打开了一些物理资源(例如数据库连接,网络连接、
      4     和磁盘文件等),这些物理资源都必须显示回收。
      5 
      6     注意:Java的垃圾回收机制不会回收任何物理资源,垃圾回收机制只能回收堆内存
      7     中对象所占用的空间。
      8 
      9     异常处理语法结构中只有try块是必须的,也就是说,如果没有try块,则不能有后面
     10     的catch块和finally块;catch块和finally块都是可选的,但catch块和finally块
     11     至少出现其中之一,也可以同时出现;可以有多个catch块,捕获父类异常的catch
     12     块必须位于捕获子类异常的后面;但不能只有try块,既没有catch块(但是Java7的自动关闭
     13     资源的try语句中可以只有try块,其实它也是包含了隐式的finally块),也没有finally
     14     块;多个catch块必须位于try块后,finally块必须位于所有的catch块之后,
     15 
     16     例如下面的程序:
     1 package myclass;
     2 import java.io.IOException;
     3 import java.io.FileInputStream;
     4 public class FinallyTest 
     5 {
     6     public static void main(String[] args) 
     7     {
     8         FileInputStream fis = null;
     9         try
    10         {
    11             fis = new FileInputStream("a.txt");
    12         }
    13         catch (IOException ioe)
    14         {
    15             System.out.println(ioe.getMessage());
    16             //return语句强制方法返回.
    17             return;                    //(1)
    18             //使用exit退出虚拟机.
    19             //System.exit(0);          //(2)
    20         }
    21         finally
    22         {
    23             if(fis != null)
    24             {
    25                 try
    26                 {
    27                     fis.close();
    28                     System.out.println("文件已成功关闭");
    29                 }
    30                 catch (IOException ioe)
    31                 {
    32                     ioe.printStackTrace();
    33                 }
    34             }
    35             System.out.println("执行finally块里的资源回收!");
    36         }
    37     }
    38 }
    39 
    40 /*
    41 运行上面的程序,结果如下:
    42 a.txt (系统找不到指定的文件夹。)
    43 执行finally块里的资源回收!
    44 
    45 将(1)处的代码注释掉,取消(2)处的代码注释,运行程序结果如下:
    46 a.txt (系统找不到指定的文件夹。)
    47 
    48 因为在异常处理块catch中使用System.exit(0)语句退出了JVM,所以不会执行到finally块。
    49 
    50 注意:除非在try catch块中调用了退出虚拟机的方法,否则不管在try块,catch块
    51 中执行怎样的代码,出现怎样的情况,异常处理的finally块总会被执行。
    52 在通常情况下,不要在finally块中使用如return或throw等导致方法终止的语句,
    53 一旦在finally块中使用了return或throw语句,将会导致try块,catch块中的return
    54 ,throw语句失效,看下面的程序,输出结果为false
    55 ----------------------------------------------------------------------------
    56 package myclass;
    57 public class FinallyFlowTest
    58 {
    59     public static void main(String[] args)throws Exception
    60     {
    61         boolean a = test();
    62         System.out.println(a);
    63     }
    64     public static boolean test()
    65     {
    66         try
    67         {
    68             return true;
    69         }
    70         finally
    71         (
    72             return false;
    73         )
    74     }
    75 }
    76 ---------------------------------------------------------------------------
    77 
    78 下面讲解一下System.exit(0)和System.exit(1)的区别。
    79 System.exit(0) 正常退出
    80 System.exit(1) 或参数为“非0”非正常退出
    81 
    82 但是 但是,“正常退出” 和 “非正常退出” 有什么区别?本人目前还不清楚。
    83 */
  • 相关阅读:
    MongoDB:数据库管理
    MongoDB:用户管理
    MongoDB:入门
    彻底透析SpringBoot jar可执行原理
    轻松了解Spring中的控制反转和依赖注入(一)
    领域驱动最佳实践--用代码来告诉你来如何进行领域驱动设计
    血的教训--如何正确使用线程池submit和execute方法
    领域驱动设计之实战权限系统微服务
    为什么我们需要领域驱动设计
    【Go入门学习】golang自定义路由控制实现(二)-流式注册接口以及支持RESTFUL
  • 原文地址:https://www.cnblogs.com/sun-/p/5609572.html
Copyright © 2020-2023  润新知