码迷,mamicode.com
首页 > 编程语言 > 详细

java中的异常

时间:2016-03-07 19:06:01      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

Java中的异常 Exception

  java.lang.Exception类是Java中所有异常的直接或间接父类。即Exception类是所有异常的根类。

  例:

public class ExceptionTest
{
      public static void main(String[] args)
      {
             int a = 3;
             int b = 0;
             int c = a / b;          
             System.out.println(c);
      }
}

  编译通过,执行时结果:

  Exception in thread "main" java.lang.ArithmeticException: / by zero

     at com.learnjava.exception.ExceptionTest.main(ExceptionTest.java:9)

  因为除数为0,所以引发了算数异常。

 

  比较常见的异常还有:空指针异常,数组下标越界异常

  java.lang.NullPointerException是空指针异常
    java.lang.IndexOutOfBoundsException是下标越界异常
 
Java中的异常分为两大类:

  1.Checked Exception(非Runtime Exception,编译时异常)

  2.Unchecked Exception(Runtime Exception,运行时异常)

  RuntimeException类是Exception类的子类,是运行时异常。Java中的所有运行时异常都会直接或者间接地继承RuntimeException类。

  Java中凡是继承Exception,但又不继承RuntimeException类的异常都是非运行时异常。
 
异常处理的一般结构

    try
    {
         // 可能发生异常的代码
        // 如果发生了异常,那么异常之后的代码就不会被执行
    }
    catch (Exception e)
    {
        // 异常处理代码
    }
    finally
    {
        // 不管有没有发生异常,finally语句块都会被执行
    }

  比如开始的除法运算代码,加入异常处理之后: 

public class ExceptionTest
{
    public static void main(String[] args)
    {
        int c = 0;
        try
        {
            int a = 3;
            int b = 0;

            c = a / b;// 这块代码出现了异常,那么异常之后的代码都不会被执行
            
            System.out.println("没有发生异常");
        }
        catch (ArithmeticException e)
        {
            e.printStackTrace();
        }
        finally
        {
            //不管有没有发生异常,finally语句块都会被执行
            System.out.println("finally语句!");
        }

        System.out.println(c);
        // 当b为0时,有异常,输出为c的初始值0
    }
}
 

多个catch

  一个try后面可以跟多个catch,但不管多少个,最多只会有一个catch块被执行。
    我们使用多个catch块来捕获异常时,需要将父类型的catch块放到子类型的catch块之后,这样才能保证后续的catch块可能被执行,否则子类型的catch块将永远无法到达,Java编译器会报错。

  如果异常类型是独立的,那么它们的前后顺序没有要求。

 
异常处理方法

  对于非运行时异常(checked exception),必须要对其进行处理,否则无法通过编译。

  处理方式有两种:

  1.使用try..catch..finally进行捕获;

  2.在产生异常的方法声明后面写上throws 某一个Exception类型,如throws Exception,将异常抛出到外面一层去。

对于try..catch..finally:
   try和catch可以连用,try-catch-finally可以连用,但是try,catch,finally却不能单独使用,如果在程序中只想使用try而不想使用catch也可以,但是try的后面必须有finally。

自定义异常

  所谓自定义异常,通常就是定义一个类,去继承Exception类或者它的子类。因为异常必须直接或者间接地继承Exception类。

  通常情况下,会直接继承Exception类,一般不会继承某个运行时的异常类。

  自定义异常举例: 


public class MyException extends Exception
{
    public MyException()
    {
        super();
    }
    public MyException(Exception e){
        super(e);
    }    
    public MyException(String message)
    {
        super(message);
    }
}


 

  注意:try块中有return语句时,仍然会首先执行finally块中的语句,然后方法再返回。

  如果try块中存在System.exit(0);语句,那么就不会执行finally块中的代码,因为System.exit(0)会终止当前运行的Java虚拟机,程序会在虚拟机终止前结束执行。

java中的异常

标签:

原文地址:http://www.cnblogs.com/wskaiit/p/5251288.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!