异常

来源:互联网 发布:淘宝直播的营销方式 编辑:程序博客网 时间:2024/06/05 09:15

异常:就是程序出现的不正常的情况。
体系结构:
Throwable:
Error:错误:这是非常严重的问题,一般我们处理不了,一般在这里指的是硬件问题。
Exception:异常
非RuntimeException:编译时期异常:开始就必须要处理的,如果不处理,后面就走不了。
RuntimeException:运行时期异常:开始可以不用处理。这种问题一旦发生,就是我们的程序问题,需要我们修改程序。
代码演示:
除数为零的异常

package com.thz_01;public class ExceptionDemo2 {    public static void main(String[] args) {        System.out.println("start");        int a = 10;        int b = 0;        System.out.println(a/b);//java.lang.ArithmeticException: / by zero        System.out.println("end");    }}

在运行结果时,我们发现只显示了start,然后系统报错,没有继续运行。
在编写一个较大的程序时,如果程序出了问题,不应该直接停止,因为我们的程序可能是由多部分组成的, 其中一个部分出问题了,不应该影响其他部分的执行。所以,我们应该想办法让其他的部分能够执行下去。
异常处理方案
A:try…catch…finally
B:throws

try…catch…finally:
try{
可能出现异常的代码
}catch(异常类名 变量名) {
针对异常的代码处理
}finally {
释放资源的地方
}

代码演示:
处理除数为零的异常

public class ExceptionDemo3 {    public static void main(String[] args) {        System.out.println("start");        int a= 10;        int b = 0;        try{            //可能出现异常的代码            System.out.println(a/b);//当除数为0的时候会抛出ArithmeticException这个异常                                    //接着程序会拿着这个异常和catch里面的异常类已经对比                           }catch(ArithmeticException e){            //当程序抛出ArithmeticException这个异常之后给出的具体的处理方法            System.out.println("你的除数不能为0");        }        System.out.println("end");    }

try…catch 是直接进行了处理。
而throws则是把异常处理的事情交给了调用者。

throws用在方法上,声明方法有异常,交给调用者处理。
但是呢,如果是编译时期异常,调用就必须处理。
如果是运行时期异常,调用者可以处理,也可以不处理。

throw:用在方法体内,跟的是异常对象名
只能抛出一个异常对象名
表示抛出异常,由方法体内的语句处理
throw则是抛出了异常,执行throw不一定会出现异常

代码演示:

public class ExceptionDemo7 {    public static void main(String[] args){        method();        //method2();//将这个异常交给了调用者去进行处理                 //1.可以继续往上throws,将异常继续向上进行抛出了                 //2.自己try..catch...,相当与自己处理了这个异常        try{            method2();        }catch(FileNotFoundException e){            System.out.println("文件未找到");        }        /**         * 我们以后遇到异常是抛还是抓呢?         * 答:原则上能抛就抛,等到已经抛到了程序最底层的时候,最好就不要抛了,自己抓取。         */    }    private static void method2() throws FileNotFoundException {        //此时会抛出一个编译时期的异常,        //我们必须在方法上进行声明,如果不声明的话,会一直编译报错        FileInputStream fis = new FileInputStream("D://a.txt");    }    private static void method() throws ArithmeticException {        //在方法声明上声明这个方法可能出现的异常,不代表这个异常一定会出现        //此时仅仅是告诉我的调用者我的这个方法可能会出现异常,并不做具体的处理,交给        //调用者自己去处理这个异常        //此时抛出的 出数为0的异常,属于运行时期异常        System.out.println(10/5);    }
0 0
原创粉丝点击