Java异常处理:Part 2

来源:互联网 发布:迅雷美女数据库13第1 编辑:程序博客网 时间:2024/05/20 18:01
Java的异常处理21.编译时异常和运行时异常的区别   运行时异常:Exception下的所有RuntimeException及其子类统称运行时异常   编译时异常:Exception下的非运行时异常,称为编译时异常  区别 :    运行时异常我们不作显式处理或可当作编译时异常处理,多数是由于我们的代码不够严谨,如除数为0异常:ArithmeticException  它的父类是RuntimeException,在代码中加除数值判定即可。  编译时异常我们必须做显式处理,否则程序无法通过编译。2.异常类里的常用方法  异常类继承了Throwable里的几个方法: A.String getMessage() 获取异常信息,返回字符串 B.String toString()   获取异常类名和异常信息,返回字符串 C.printStackTrace()   获取异常类名、异常信息和异常出现在程序中的位置  D.printStackTrace(PrintStream s)  将异常内容保存在日志文件中,便于查阅3.Java异常处理方案二:throws(抛出) throws:定义功能方法时,需要把暴露的问题暴露出来让调用者去处理(或自己处理不了),可以抛出   语法格式:throws 异常类名1,异常类名2    它必须跟在方法声明的小括号后面   相当于延迟处理异常,写方法的你不处理,让调用者自己处理。   如果抛出的是运行时异常,调用者都懒得处理,告诉你去修改自己的代码,让它更严谨;   如果抛出的是编译时异常,调用者不处理,他就没法编译通过,他就没法用,必须处理;   不要从main方法里抛给虚拟机   throw:在功能方法内部出现某种情况,程序不能继续运行,需要跳转时,用throw将异常类对象抛出(不是异常类名)4.我们到底该怎样处理异常呢  原则:如果该功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,用throws  区别:后续程序需要继续运行就try;后续程序不需要继续运行就throws  举例:感冒了就自己吃点药就好了,try;吃了好几天药都没好,到医院治疗,throws;没治了,变成Error了   5.finally  被finally控制的语句体一定会执行,除非JVM在这之前退出   作用:用于释放资源,在IO流操作和数据库操作中会见到
package knowledge_basic_02;public class ExceptionDemo2 {    public static void method1()    {        //运行时异常不用作显式处理,也可当编译时异常处理        //之前有自己处理除数为0的运行时异常,实际上不用显式处理,让代码严谨即可        int a=100;        int b=0;        if(b!=0)           System.out.println(a/b);        System.out.println("over");    }    public static void method2()    {        //自己处理异常(还是将一个运行时异常当作编译时异常处理)        //注意与JVM默认的处理不同,此处over执行了        //try里面抛出一个异常对象,同catch里匹配(传到catch里 )        int a=100;        int b=0;        try{        System.out.println(a/b);        }catch(ArithmeticException e){            e.printStackTrace();        }        System.out.println("over");    }    public static void method3()    {        //        int a=100;        int b=0;        if(b!=0)           System.out.println(a/b);        else            throw new ArithmeticException();        System.out.println("over");    }    public static void main(String[] args) {        // TODO Auto-generated method stub        //method1();        //method2();        method3();    }}

method2的结果为:
java.lang.ArithmeticException: / by zero
at knowledge_basic_02.ExceptionDemo2.method2(ExceptionDemo2.java:20)
at knowledge_basic_02.ExceptionDemo2.main(ExceptionDemo2.java:29)
over
method3的结果为:
Exception in thread “main” java.lang.ArithmeticException
at knowledge_basic_02.ExceptionDemo2.method3(ExceptionDemo2.java:36)
at knowledge_basic_02.ExceptionDemo2.main(ExceptionDemo2.java:43)

0 0
原创粉丝点击