java异常的详解

来源:互联网 发布:8月中国经济数据 编辑:程序博客网 时间:2024/05/21 10:00

java的异常可分为两大类:Checked ExceptionUnchecked Exception(又名Runtime Exception)两者都继承自java.lang.Exception类

java中所有的异常都是一个类或者说是一个对象。

之所以分类是因为:系统对于这两大类的异常有不一样的处理方式。

java.lang.Object

                java.lang.Throwable

                                java.lang.Exception

                                                   RuntimeException

                                                  ……………………

                                java.lang.Error

Unchecked Exception(运行时异常):java中所有的运行时异常都直接或间接继承自RuntimeException类,

java对于运行时异常可以处理也可以不做任何处理,并建议最好不做处理。

处理异常与不处理的区别:如果对于异常不作处理(没有try……catch……),程序将不会继续往下执行


处理异常的方法:

public class Exception1{public static void main(String[] args){int c = 99;try{int a = 9;int b = 0;c = a / b;  //会出现异常,即产生一个异常对象(new ArithmeticException())System.out.println("after ArithmeticException");//不会被执行} catch (ArithmeticException e){e.printStackTrace();System.out.println("catch block ");}finally{System.out.println("finally block");//无论是否发生异常总会执行}System.out.println(c);//只有捕获了异常,才会执行}}

执行顺序:执行try代码块的语句,如果发生异常则产生一个相应的异常对象,执行catch语句,然后是finally语句,最后程序继续执行。 如果未发生异常,跳过catch块,执行finally语句,最后程序继续执行。

对于异常捕获也可以没有catch代码块,但不推荐不做任何的处理。也可以有多个catch块,但要注意异常之间的关系。



Checked Exception:对于非运行时异常必须对其进行处理,处理方式有两种:捕获处理和调用的方法处抛出

public class Exception1{public static void main(String[] args)  //也可以在此处抛出异常{try{                              //捕获处理int c =  divide(12,3);} catch (Exception e){// TODO Auto-generated catch blocke.printStackTrace();} }public static int divide(int a,int b) throws Exception{if(b == 0){throw new Exception();}return a/b;}}

自定义异常:自定义异常一般继承自Exception类的子类。在开发中自定义的异常一般都继承Exception而非RuntimeException。

public class Exception1{public static void main(String[] args) {try{int c =  divide(12,3);} catch (MyException e){e.printStackTrace();}}public static int divide(int a,int b) throws MyException{if(b == 0){throw new MyException("除数不能为0");}return a/b;}}class MyException extends Exception{MyException(String message){super(message);}}

注意:如果在try代码块中有return语句,而语句未发生异常,则必须在执行完finally后才执行。
            如果在try代码块中有System.exit(0)语句,则不会执行finally语句,因为System.exit(0)语句会终止当前的java虚拟机。

         



原创粉丝点击