Java 异常处理

- java中所有错误的超类为:Throwable。其下有两个子类:Error和Exception

- Error的子类描述的都是系统错误,比如虚拟机内存溢出等。

- Exception的子类描述的都是程序错误,比如空指针,下表越界等。

- 通常我们程序中处理的异常都是Exception。

java异常处理try-catch
 * 异常处理机制中的try-catch
 * 语法:
 * try{
 *     代码片段...
 * }catch(XXXException e){
 *     出现错误后的补救措施(B计划)
 * }

System.out.println("程序开始");
    try{
     line ="abc";
   //String line = null;
    System.out.println(line.length());
    System.out.println(line.charAt(0));
    System.out.println(Integer.parseInt(line));
    System.out.println("!!!!????"); //前面发生异常,后面的语句不再执行
 }
    catch(NullPointerException | StringIndexOutOfBoundsException e){//子类异常在上
    System.out.println("空指针异常或数组下标越界异常");
 }
    catch(Exception e){//超类异常下
    System.out.println("发生未知错位");
 } /*catch(NullPointerException e){
    System.out.println("空指针异常");
 }catch (StringIndexOutOfBoundsException e){
     System.out.println("下标越界异常");
        }*/
    System.out.println("程序结束");

##异常处理机制中的finally

<1finally块定义在异常处理机制中的最后一块。它可以直接跟在try之后,或者最后一个catch之后。
<2finally可以保证只要程序执行到了try语句块中,无论try语句块中的代码是否出现异常,最终finally都必定执行。
<3finally通常用来做释放资源这类操作。

System.out.println("程序开始了...");
    try{
        String str = "abc";
        System.out.println(str.length());
       // return;直接跳出main方法
    }catch(Exception e){
        System.out.println("出错了,并处理了");
     } finally{
       System.out.println("finally中的代码必执行!");
    }
    System.out.println("程序结束了");

使用异常机制处理IOException

//向文件中写入一个字节
    FileOutputStream fos =null;
    try {
        fos = new FileOutputStream("./fos.dat");
        fos.write(1);
   }
   catch (IOException exception) {
       exception.printStackTrace();
   }
   finally
   {
       try {
           if (fos!=null) {
               fos.close();
           }
       } catch (IOException exception) {
           exception.printStackTrace();
       }
   }

##*finalize

finalize是Object当中定义的一个方法,这意味着java中所有的类都有该方法,该方法会被GC调用。
当GC扫描时发现一个对象不再被引用,则会将其释放,在释放前会调用finalize,一旦该方法执行完毕,则对象被释放。
API手册明确说明:该方法可以被重写,但是不应当做耗时的操作,否则可能影响GC的工作。

##throw关键字

throw用来对外主动抛出一个异常,通常下面两种情况我们主动对外抛出异常:

1:当程序遇到一个满足语法,但是不满足业务要求时,可以抛出一个异常告知调用者。
2:程序执行遇到一个异常,但是该异常不应当在当前代码片段被解决时可以抛出给调用者。

##受检异常和非受检异常

Exception可分为执行异常(RuntimeException)和检查异常(Checked Exceptions)两种。
1.RuntimeException(非受检)
RuntimeException在默认情况下会得到自动处理。所以通常用不着捕获RuntimeException,但在自己的封装里,也许仍然要选择抛出一部分RuntimeException。

2.非受检异常主要指编译器免检异常,通常包括运行时异常类和 Error相关类。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值