java的异常体系

目录

一、是什么

1.error(错误)

2.exception(异常)

(1)运行时异常(非受检异常)

(2)非运行时异常(受检异常)

3.用代码表示

(1)运行时异常(非受检异常)

(2)非运行时异常(受检异常)

(3)错误

二、java是如何解决异常的

 1.try-catch-finally

(1)

(2)如果想向下继续执行,就要处理好错误,用try-catch环绕

(3)finally的作用

2.throws抛出异常


一、是什么

包括error和exception

1.error(错误)

Error是程序无法处理的错误,它是由JVM产生和抛出的(和堆栈有关),比如OutOfMemoryError、ThreadDeath等

2.exception(异常)

异常就是报错

Exception是程序本身可以处理的异常,分两大类,程序应尽可能去处理这些异常

包括两大类:

(1)运行时异常(非受检异常)

在程序运行期间爆出的异常,在运行之前并没有被程序检验出来

(2)非运行时异常(受检异常)

在运行之前被检验出来的异常

3.用代码表示

(1)运行时异常(非受检异常)

public class Test {
    public static void main(String[] args) {
        int[] arr=new int[5];
        int a=arr[10];//这样做一定会出错
    }
}

这是一个异常------》数组越界ArrayIndexOutOfBoundsException

(2)非运行时异常(受检异常)

这样写报错了 ,要求我们对这个地方进行处理,因为它怕当前没有这个文件,手动处理:

(3)错误

public class Test {
    public static void main(String[] args){
        run();
    }
    public static void run(){
        run();
    }
}

此时运行报错:(StackOverflowError---栈溢出错误)

不断的让run()方法入栈,迟早会造成栈溢出

二、java是如何解决异常的

 1.try-catch-finally

这个才是真正的去解决问题

(1)

public class Test {
    public static void main(String[] args) {
        int[] arr=new int[10];
        int a=arr[11];
        System.out.println("-------");
    }
}

运行之后:

在int a=arr[11]; 这行出错,所以程序就在这里中断,不再向下执行

(2)如果想向下继续执行,就要处理好错误,用try-catch环绕

public class Test {
    public static void main(String[] args) {
        try{
            int[] arr=new int[10];
            int a=arr[11];
        }catch (Exception e){
            e.printStackTrace();
        }
        
        System.out.println("-------");
    }
}

运行:

①int a=arr[11]; 这行还是出错,但是并不影响整个程序的向下执行

②try是尝试执行,发现走不通就会走catch里面的语句,e.printStackTrace(); 是输出当前错误(错误类型,行数,错误点)

 ③catch里面应该写什么?

在不知道是什么异常的情况下,就写Exception,因为Exception是所有异常的父类

④catch可以写多个

try{

    语句;

}catch(SomeException1 e){

}catch(SomeException2 e){

}

(3)finally的作用

finally指是无论如何都要执行的代码块

2.throws抛出异常

在方法当中抛出异常,由方法的调用者来处理异常

抛出异常是一种最简单最省事的方式,但是他并没有真正的去解决问题,只是把问题抛给了别人去解决

Add exception to method signature(添加异常到方法签名)

Class.forName("cn.edu.bdu.mc.Test"); 里边是可能会产生异常的

由方法的调用者来处理异常,这里main()方法调用run()方法,所以他要去处理异常:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值