异常的总结

异常

1.异常概述与异常体系结构

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

异常事件可分为两类:

  1. Error:java虚拟机无法解决的严重问题。如:资源耗尽等情况。

  2. Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如:

    • 空指针访问

    • 试图读取不存在的文件

    • 网络连接中断

    • 数组角标越界

对于这些错误,在编写程序时,就考虑到错误的检测,错误消息的提示,以及错误的处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-87t8ZR7P-1654065751736)(C:\Users\dell\AppData\Roaming\Typora\typora-user-images\image-20220530161735609.png)]

红色为编译时异常

蓝色为运行时异常

2.异常处理方式

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

过程一:抛——程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象,并将此对象抛出。一旦抛出后,其后的代码不再执行。

过程二:抓——可以理解为异常的处理方式。

2.1 try-catch-finally

说明:

  1. finally是可选的
  2. 使用try将可能出现异常代码包装起来,在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据对象的类型,去catch中进行匹配。
  3. 一旦try中的异常对象匹配到某一个catch中,就进入catch中进行异常的处理,一旦处理完成,就跳出当前的try-catch结构(没有finally的时候),继续执行其后的代码
  4. 注意:catch中的异常类型如果满足子父类关系,则要求子类一定要声明在父类之上。否则,报错。
  5. 常用的异常对象处理的方式:1. getmessage() 2.printStackTrace()
  6. 在try结构中声明的变量,出了try结构以后不能被调用
  7. 使用try-catch-finally处理编译时的异常,是程序在编译时就不报错了,运行时仍有可能报错,相当于我们使用try-catch-finally将一个编译时可能出现的异常,延迟到运行时出现。
try {
    //可能出现异常的代码
}catch (){//异常类型1 变量名1
    //处理异常的方式一
}catch (){//异常类型2 变量名2
    //处理异常的方式二
}finally {
    //一定会执行的代码
}
2.1.1 Finally

finally是可选的

finally中声明的是一定会被执行的代码。即使catch中又出现了异常

像数据库连接,输入输出流等资源,jvm是不能回收的,我们需要手动释放。此时的资源释放,就需要声明在finally中。

public static int method(){
    try {
        int[] ints = new int[10];
        System.out.println(ints[10]);
        return 1;
    }catch (ArrayIndexOutOfBoundsException e){
        e.printStackTrace();
        return 2;
    }finally {
        System.out.println("666");
    }
}

先会输出666,再返回2

2.2 throws+异常类型

说明:

1."throws+异常类型"写在方法的声明处。指明此方法执行时,可能会抛出的异常类型。一旦当方法执行时,出现异常,仍会在异常代码处生成一个异常类的对象,此对象满足throws后异常类型时,就会被抛出。异常代码后续的代码,就不会执行。

体会:

try-catch-finally:真正的将异常处理掉了。

throws:只是将异常抛给了方法的调用者。并没有将异常处理掉。

public void text01() throws FileNotFoundException, IOException {
    FileInputStream inputStream = new FileInputStream("yyh.txt");

    int len;
    byte[] bytes = new byte[1024];
    while ((len=inputStream.read())!=-1){
        int str = inputStream.read(bytes,0,len);
        System.out.println(str);
    }

}

3.手动抛出异常

throw new +异常类型

public class Throwtest {
    private int id;
    public  void yyh(int id) throws Exception {
        if (id>0){
            this.id=id;
        }else {
            throw new Exception();
        }
    }

    public static void main(String[] args) {
        Throwtest throwtest = new Throwtest();
        try {
            throwtest.yyh(-8);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

4.自定义异常类

  1. 继承于现有的异常结构:RuntimeException,Exception
  2. 提供全局常量:serialversionuid 序列号
  3. 提供重载的构造器
public class MyException extends Exception{
    static final long serialVersionUID = -3387516993124229948L;

    public MyException(){

    }

    public MyException(String msg){
        super(msg);
    }
}

5.总结

sionUID = -3387516993124229948L;

public MyException(){

}

public MyException(String msg){
    super(msg);
}

}


## 5.总结

![总结](https://img-blog.csdnimg.cn/df97b59891fc460b8ecb44800c5f2162.png#pic_center)



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一些异常练习题以及实验总结: 1. 编写一个程序,要求实现两个整数相除的功能,如果分母为0,抛出一个自定义的异常。 ```java class MyException extends Exception { public MyException(String message) { super(message); } } public class Divide { public static void divide(int a, int b) throws MyException { if (b == 0) { throw new MyException("除数不能为0!"); } else { System.out.println(a / b); } } public static void main(String[] args) { try { divide(8, 2); divide(8, 0); } catch (MyException e) { System.out.println(e.getMessage()); } } } ``` 2. 编写一个程序,要求实现对一个数组的操作,如果数组下标越界,抛出一个自定义的异常。 ```java class MyException extends Exception { public MyException(String message) { super(message); } } public class ArrayTest { public static void arrayTest(int[] arr, int index) throws MyException { if (index < 0 || index >= arr.length) { throw new MyException("数组下标越界!"); } else { System.out.println(arr[index]); } } public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5}; try { arrayTest(arr, 2); arrayTest(arr, 5); } catch (MyException e) { System.out.println(e.getMessage()); } } } ``` 实验总结: 在 Java 异常是一种处理错误的机制。当程序出现错误时,异常会被抛出,如果没有被处理,程序就会崩溃。因此,我们需要在程序使用 try-catch 块来捕获异常并进行处理。同时,Java 也提供了一些标准的异常类,比如 NullPointerException、IndexOutOfBoundsException 等等,我们可以使用这些类来处理常见的异常情况。如果需要自定义异常,可以继承 Exception 类或其子类,并重写构造方法。在处理异常时,我们可以使用 getMessage() 方法来获取异常信息,也可以使用 printStackTrace() 方法来输出异常信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值