初识Java例外处理

    程序在运行时不可避免要产生一些例外,例如内存不够,文件找不到,除数为零等情况。 这里的例外,与程序出现的普通的逻辑错误、编译错误是不同的。例外是不可以预料的,而错误是必然的。例外处理机制会当程序产生例外时对例外进行处理,然后再返回产生例外的语句继续执行。一些语句执行时可能产生例外,必须进行例外处理,否则编译不能够通过。


    与C++不同的是,Java会告诉我们出错的类型,出错信息和出错的类与文件行数,方便我们debug。

 java里的异常的分类.

见下图:
 
                       Throwable
                      /                \
              Error              Exception
                 /                   /               \
         xxxxxx              xxxxxx          RuntimeException
                                                          /                   \
                                                     xxxxxx             ArithmeticException
 
 
 
上图的所有对象都是类.     
Throwable 代表是可抛出的.
Error            代表的是严重错误,  这种错误程序员无法进行处理, 例如操作系统崩溃, jvm出错, 动态链接库失败等.  Error并不是异常, 不是本文的重点.
 
Exception    代表的就是异常了.  它下面很多派生类,   其中它的派生类也分两种, 一种是RuntimeException(运行时异常), 其他的都是非运行时异常
 
RuntimeException    包括除数为0, 数组下标超界等. 运行时异常的派生类有很多, 其产生频率较高.  它的派生类可以由程序处理或者抛给(throw) 给jvm处理. 例如上面的例子就是抛给了jvm处理, jvm把程序中断执行, 并把错误信息输出到终端上.
 
非RuntimeExcption   这种异常属于Excepion的派生类(上面红色的xxx), 但是不是RuntimeException的派生类,  这种异常必须由程序员手动处理,否则不通过编译.
 
ArithmeticExcpetion   算术异常, 它是RuntimeException的派生类, 所以程序员不手动处理也通过编译, 只不过出错时会被jvm处理.

try catch式处理

在try中执行可能出现例外的代码块,在catch中捕获try中可能出现的例外,上代码

package Exception;

class One{
  public int f(int a, int b){
    int i=0;
    try{
      i=a/b;
    }
    catch(Exception e){
      System.out.println("Exception occurs!");
      System.out.println(e.getMessage());
      System.out.println("==============");
      e.printStackTrace();
      }
      return i;
    }
}


public class Two{
  public static void g(){
    Two two = new Two();
    int i=two.f(8,0);
    System.out.println("i is "+i);
  }
}

    在f()方法中对可能出现的异常的代码进行try catch处理后, 程序会执行catch里的代码。而且不会中断整个程序,继续执行 try catch后面的代码。

程序会输出:

[java] Exception occurs!  
[java] / by zero  
[java] ===========================  
[java] java.lang.ArithmeticException: / by zero  
[java]  at Exception.One.f(Two2.java:7)  
[java]  at Exception.Two.g(Two.java:23)  
[java]  at Enter_1.main(Enter_1.java:31)  
[java] i is 0  

注意最终也执行了g()函数中的最后一条语句,输出了i的值。

也就是说try catch处理后并不会终止程序,所以即使程序出现了错误,也可以对错误进行了处理后继续执行。

getMessage()方法:返回异常原因,例如 : / by zero , 就是这个方法输出的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值