Java学习笔记之异常

结构:

java.lang.Object

java.lang.Throwable

  • java.lang.Error:错误,程序中不进行处理。
  • java.lang.Exception:异常,要求在编写时就要考虑对这些异常的处理。

异常的种类:

运行时异常:

在运行时出现的异常(执行java.exe命令时出现的异常)

常见的运行时异常:

①:数组下标越界异常ArrayIndexOutOfBoundsException

 @Test
    public void test1() {
        int[] arr = new int[10];
        System.out.println(arr[10]);
    }

②算术异常:ArithmeticException

@Test
    public void test2() {
        int i = 10;
        System.out.println(i / 0);
    }

③类型转换异常:ClassCastException

 @Test
    public void test1() {
        int[] arr = new int[10];
        System.out.println(arr[10]);
    }
④空指针异常:NullPointerException

@Test
    public void test4() {
        String str1 = new String();
        str1 = null;
        System.out.println(str1.toString());
    }



当执行一段代码时,如果出现异常,那么异常之后的代码不会执行。


编译时异常:

在编译期间会出现的异常(执行javac.exe命令时出现的异常)

常见的编译时异常:

@Test
    public void test5() {
        FileInputStream fis = new FileInputStream(new File("hello.txt"));
        int b;
        while ((b = fis.read()) != -1) {
            System.out.println((char) b);
        }
    }

二、如何处理异常:

Java提供的是异常处理的抓抛模型。

1.“抛”:当我们执行代码时,一旦出现异常,就会在异常的代码处,生成一个对应的异常类型的对象,并将此对象抛出。

>一旦抛出此异常类的对象,程序终止执行。

>此异常类的对象抛给方法的调用者。

2.”抓“:抓住上一步抛出的异常类的对象。如何抓?即为异常的处理方式。

java提供了两种方式来处理一个异常类对象。

try {
            // 可能出现异常的代码

        } catch (Exception1 e1) {
            // 处理方式1
        } catch (Exception2 e2) {
            // 处理方式2
        } finally {
            // 一定执行的代码,不管出不出现异常
        }

注:1、try块内声明的变量,类似局部变量,出了try块就不能被调用了。

2、finally是可选的。

3、catch语句是对异常对象的处理

>getMessage(); printStackTrace();

4、可以有多个catch语句。try中抛出的异常对象从上往下去匹配catch中的异常的类型,一旦满足就执行catch中的代码。执行完就跳出其后的多条catch语句。

5、如果异常处理了,那么其后的代码继续执行。

6、 如果catch中多个异常类型是并列关系,孰上孰下都可以。

如果catch中多个异常类型是包含关系,须将子类异常对象放在父类异常对象上面进行处理,否则报错。

7、finally中存放的是一定会被执行的代码,不管try中、catch中是否仍有异常未被处理,以及是否有return语句。

8、try-catch是可以嵌套的


三、对于运行时异常来说,可以不显示的处理,对于编译时异常来说,必须要显示的处理。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值