栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

异常的总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

异常的总结

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

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

异常事件可分为两类:

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

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

    • 空指针访问

    • 试图读取不存在的文件

    • 网络连接中断

    • 数组角标越界

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-87t8ZR7P-1654065751736)(C:UsersdellAppDataRoamingTyporatypora-user-imagesimage-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)



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/946961.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号