Java-异常处理

目录

概念:

异常体系图:

常见运行时异常:

常见编译异常:

异常处理机制:

自定义异常;

throw和throws:


概念:

基本概念:

        Java语言中,将程序执行中发生的不正常情况称为异常。(开发过程中的语法错误和逻辑错误不是异常)

异常事件可以分为两大类:

        1:Error(错误):Java虚拟机无法解决的严重问题。如,JVM系统内部错误,资源耗尽等严重情况。Error是严重错误,程序会崩溃。

        2:Exception:因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。如,空指针访问,分母为0等。Exception分为两大类:运行时异常和编译时异常。

 

异常体系图:

部分:

c008854105d94083b1bab504cd3bab68.png

异常体系知识点:

        1:异常分为两大类:运行时异常,和编译时异常

        2:运行时异常,编译器不要求强制处置的异常(编译器检测不出)。一般是指编程时的逻辑错误,是程序员应该避免出现的异常。如java.lang.RuntimeException类及其子类都是运行时异常。

        3:对于运行时异常,可以不作处理,因为这类异常很普遍,若全做处理可能会对程序的可读性和运行效率产生影响。

        4:编译时异常,是编译器要求必须处置的异常

 

常见运行时异常:

        1:NullPointerException空指针异常

        2:ArithmeticException数学运算异常

        3:ArrayIndexOutBoundsException数组下标越界异常

        4:ClassCastException类型转换异常

        5:NumberFormatException数字格式不正确异常

public class Test2 {
    public static void main(String[] args) {

        //1:NullPointerException空指针异常
        String name=null;
        System.out.println(name.length());
        
        //2:ArithmeticException数学运算异常
        int a=1,n=0;
        System.out.println(a/n);
        
        //3:ArrayIndexOutBoundsException数组下标越界异常
        int[] b={1,2,3,4};
        System.out.println(b[4]);
        
        //4:ClassCastException类型转换异常
        A c1=new B();//向上转型 B-->A
        B c2=(B)c1;//向下转型 A-->B
        C c3=(C)c1;//抛出异常 B-->C
        
        //5:NumberFormatException数字格式不正确异常
        String str="1234";
        int d=Integer.parseInt(str);//正确
        String str2="song";
        int e=Integer.parseInt(str2);//抛出异常
    }
}

class A{}
class B extends A{}
class C extends A{}

 

常见编译异常:

        1:SQLExceptionSQL语句异常,操作数据库时

        2:IOExceptionIO流异常,操作文件时

        3:FileNotFoundException操作不存在文件

        4:ClassNotFoundException类不存在异常

        5:EOFException操作文件,到文件末尾,发生异常

        6:IIIegalArguementException参数异常

 

异常处理机制:

1:try-catch-finally:程序员在代码中捕获异常,自行处理。

try{
    //代码区,可能发生异常
}catch(Exception e){
    //1:当异常发生时
    //2:系统将异常封装成Exception对象e传递给catch
    //3:得到异常后,程序员自己处理
    //4:如果没有发生异常,catch不执行
}finally{
    //1:不官有没有异常发生都会执行
    //2:通常用来释放资源
}

总结:

①:如果没有出现异常,则执行try中所有语句,不执行catch块中语句,如果有finally,最后还需要执行finally里面的语句。

②:如果出现异常,则try块中剩下的语句不再执行。将执行catch块中语句,如果有finally,最后还要执行finally里的语句。

 

2:throws:将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是虚拟机JVM

10c0db55e0264473a11c44a80f639beb.png

        每个程序,mian方法都会有默认的throws Exception,如果程序员没有显式处理异常,默认就是throws

使用细节:

        1:对于编译异常,程序中必须处理,可以用try-catch或者throws。运行时异常有默认抛出异常,编译异常必须显式抛出异常。

        2:对于运行时异常,程序中如果没有处理,默认就是throws的方式处理。

        3:子类重写父类的方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的一致,要么为父类抛出的异常的子类型。

        4:在throws过程中,如果有方法try-catch,就相当于处理异常,就可以不必throws。

 

自定义异常;

基本概念:

        当程序中出现了某些“错误”,但该错误信息并没有在Throwable子类中描述处理,这个时候可以自己设计异常类,用于描述该错误信息。

步骤:

        1:定义类:自定义异常类名,继承Exception或者RuntimeException

        2:如果继承Exception是属于编译异常。

        3:如果继承RuntimeException,属于运行异常,一般来说,继承RuntimeException

public class Test4 {
    public static void main(String[] args) {
        int age=8;
        if (age>=18&&age<=120){
            System.out.println("OK");
        }else{
            throw new AgeException("NO success age!");
        }

    }
}
//自定义异常
class AgeException extends RuntimeException{
    public AgeException(String msg){
        super(msg);
    }
}

 

throw和throws:

 意义位置后面跟的东西
throws异常处理的一种方式方法声明处异常类型
throw手动生成异常对象的关键字方法体中异常对象

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值