异常

  • 异常:

1.错误:
这是非常严重的问题,一般我们处理不了,一般在这里指的是硬件问题。
2.异常:
编译时期异常 :开始就必须要处理的,如果不处理,程序就运行不了。
运行时期异常 :开始可以不用处理。这种问题一旦发生,就是我们的程序问题,需要我们修改程序。

  • 异常处理方案

A:try…catch…finally
B:throws

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

演示:

public class ExceptionExercise1 {

    //数组越界异常和除数为0异常的多重异常处理
    //A:给每一个可能出现异常的代码全部加上try..catch..
    //B:针对多个异常,采用一个try,多个catch的情况。

    public static void main(String[] args) {
        //A:
        //数组越界异常
        try {
            int [] arr = new int [3];
            System.out.println(arr[3]);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("数组越界了");
        }

        //除数为0异常
        try {
            System.out.println(10/0);
        } catch (ArithmeticException e) {
            System.out.println("除数不能为0");
        }

        System.out.println("----------------------");

        //B:
        //文件未找到+除数为0
        try {
            FileInputStream fis = new FileInputStream("acx.txt");  
            System.out.println(10/0);
        } catch (FileNotFoundException e) {
            System.out.println("没有这个文件啊!");  //文件未找到被处理
        } catch (ArithmeticException e) {
            System.out.println("除数不能为0");      //除数为0没有被处理,因为匹配到一处错误处理后
        }                                          //就会跳出try...catch...
    }
}

throws:
* 用在方法声明后面,跟的是异常类名
* 可以跟多个异常类名,用,号隔开
* 表示抛出异常,由该方法的调用者来处理
* throws表示出现异常的一种可能,并不一定会发生这些异常

演示:

public static void demo1() throws IOException{
        //文件未找到
        //这个属于编译时有异常,必须当时就做出处理,否测编译不能通过
        FileInputStream fis = new FileInputStream("acx.txt");
    }

    public static void demo2()throws ArithmeticException { 
        //除数为0
        //这个属于运行时异常,不必编译当时就做出处理,也不代表一定会出现异常
        System.out.println(10/0);
    }

注意:
A:子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。
B:如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常
C:如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws

    上述仅仅针对编译时期异常
    与运行时期异常无关。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值