Java中的异常

一、基本概念

二、异常分类 

发生Error,属于严重问题,程序只能奔溃

三、为什么要有异常处理机制?

比如以下代码:

public class Exception_1 {
    public static void main(String[] args) {
        int num1=10;
        int num2=0;
        int res=num1/num2;//当程序执行到num1/num2时,因为num2=0,程序就会抛出异常
        //抛出异常后,程序就会退出,奔溃了,下面的代码不再执行
        System.out.println("程序继续运行....");
    }
}

 发生一点小错误,程序就会当场崩溃退出,后面的代码也不执行,这是我们不希望看见的,我们希望即使有些小错误,程序能能跑完。

所以,Java的开发者提供了异常处理机制

public class Exception_1 {
    public static void main(String[] args) {
        int num1=10;
        int num2=0;
        try {
            int res=num1/num2;
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("程序继续运行....");
    }
}

有异常,抛出去,继续执行下面代码 。对于错误(Error),程序只能奔溃。

四、五大运行时异常

1.空指针异常

public class NullPointerException {
    public static void main(String[] args) {
        String name=null;
        System.out.println(name.length());
    }
}

2.数学运算异常 

public class Exception_1 {
    public static void main(String[] args) {
        int num1=10;
        int num2=0;
        int res=num1/num2;
    }
}

3.数组下标越界异常 

public class Exception {
    public static void main(String[] args) {
        int[] arr = new int[4];
        System.out.println(arr[4]);
    }
}

 4.类型转换异常

public class Exception {
    public static void main(String[] args) {
        A b = new B();
        B b1 = (B) b;
        C b2 = (C) b;
    }
}

class A {

}

class B extends A {

}

class C extends A {

}

5.数字格式不正确异常 

public class Exception {
    public static void main(String[] args) {
        String name = "123456";
        int a = Integer.parseInt(name);
        System.out.println(a);
    }
}

以上可正常转

以下就会出现异常

public class Exception {
    public static void main(String[] args) {
        String name = "shdjkahsf";
        int a = Integer.parseInt(name);
        System.out.println(a);
    }
}

五、编译异常

六、异常处理方式 

1.try-catch-finally


如果你把父类异常写在子类异常的前面,父类异常都处理完了,后面的子类异常写出来也没有意义

执行到int n=num1 / num2;就有异常了,此时没有处理,因为是main方法,默认抛出给JVM,但是有finally,所以只能强撑着执行完finally块中的代码,然后打印异常信息,程序奔溃; 

2.throws

throws处理方式就是把异常向它的调用者抛,调用者可以选择try-catch掉,也可以选择继续向上抛。 如果说一直抛到最高层的调用者JVM,JVM的处理异常方式为,输出异常信息,立刻中断程序退出。

如果某个方法有异常,则可以选择try-catch掉或者抛给方法的调用者处理,编译异常必须显性处理,不可默认处理(throws)

 编译异常需显性处理,不写throws和try-catch则使用默认处理,也就是throws

对于运行时异常,不需要程序员显性处理,因为有默认处理机制

 

方法f3( )后面其实是默认处理机制,隐藏了throws ....

七、自定义异常

自定义异常的步骤:

一般情况下,我们都是继承RuntimeException,使用默认处理机制;

举个自定义异常的例子:

当我们接收age时,要求范围在18-120之间,否则抛出一个自定义异常,并给出提示信息;

public class CustomException {
    public static void main(String[] args) {
         int age=180;
         if (age<18||age>120){
             throw new AgeException("年龄范围有误");
         }
    }


}
class AgeException extends RuntimeException{
    public AgeException(String message) {
        super(message);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐晓率

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值