JAVA异常

在Java中,某些错误可能超出了程序员的意料,使得程序被迫停止。为此,Java提供了异常处理机制来帮助程序员检查错误。java将异常封装到一个类中,出现错误时,就会抛出异常。

1.1异常的概念

在java中,如果一个程序抛出了异常,既可以在当前方法中捕捉、处理,也可以向上抛出,让方法调用者来处理。

public class Demo01 {
    public static int div(int x, int y){
        return x/y;
    }

    public static void main(String[] args) {
        div(2,0);
    }
}
/*结果:

Exception in thread "main" java.lang.ArithmeticException: / by zero
	at com.studyAbnormal.Demo01.div(Demo01.java:5)
	at com.studyAbnormal.Demo01.main(Demo01.java:9)

进程已结束,退出代码为 1

*/

1.2异常的捕获

在上面的代码中,发生了异常,为了解决该异常,我们对其进行捕获。捕获结构为:try、catch、finally。格式为

try{
	//代码块
}catch(异常类型){
	//代码块
}catch(异常类型){
	//代码块
}finally{
	//代码块
}

其中,try部分放入可能发生异常的代码块,当异常发生时,异常将交给catch处理器来处理,catch处理器可以有多个,分别用来处理不同的异常,当遇到catch处理器无法处理的异常时,便执行finally后的代码块。(finally和catch可以不同时出现)
无论try是否异常finally后的代码都将被执行

public static int div(int x, int y){
        return x/y;
    }

    public static void main(String[] args) {
        System.out.println("开始捕获异常");
        try{
            int a=div(10,0);
            System.out.println(a);
        }catch(ArithmeticException b){		//此处ArithmeticException代表算数异常
            System.out.println("成功捕获异常:" + b );
        }finally {
            System.out.println("finally被执行");
        }
        System.out.println("结束捕获异常");
    }
    
/*运行结果:

开始捕获异常
成功捕获异常:java.lang.ArithmeticException: / by zero
finally被执行
结束捕获异常

进程已结束,退出代码为 0


*/

可以看到,即使try中产生异常,也没有影响到后面代码的执行。而且finally被执行。

1.3抛出异常

某个方法可能会发生异常,但是不想现在处理,就需要抛出异常。
如果方法不捕获异常,那么方法必须声明它可以抛出的这些异常。当某个方法可能会抛出某种异常时用于throws 声明可能抛出的异常,然后交给调用者来处理。


public static void function() throws NumberFormatException {
        String s = "abc";
        Double.parseDouble(s);
    }
    public static void main(String[] args) {
        try {
            function();
        } catch (NumberFormatException e) {
            System.err.println("非数据类型不能强制类型转换。");
        }
    }
/*结果:

非数据类型不能强制类型转换。

进程已结束,退出代码为 0

*/

throw关键字也可抛出异常

public class Demo01 {
    public static int div(int x, int y){
        if (y == 0){
            throw new ArithmeticException("0不能被当作除数");
        }
        return x/y;
    }

    public static void main(String[] args) {

        try{
            div(10,0);
        }catch (ArithmeticException a){
            System.out.println("捕获异常:"  + a);
        }
    }
/*结果:

捕获异常:java.lang.ArithmeticException: 0不能被当作除数

进程已结束,退出代码为 0


*/

1.4自定义异常

static class DivException extends Exception{
        DivException(String s){
            super(s);
        }
    }
    public static int div(int x, int y){
        if (y == 0){
            try {
                throw new DivException("0不能被当作除数");
            }catch (DivException e) {
                System.out.println("捕获异常:" + e);
            }
            return 0;
        }
        else {return x/y;}
    }
    public static void main(String[] args) {
        div(10,0);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值