• java异常处理


    异常处理:

    异常:指的是程序运行过程中,因为用户的误操作、代码的BUG、等等一系列原因,引起的程序奔溃的现象,被称为异常

    Java程序在执行过程中所发生的异常事件可分为两类:

    • Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowError(栈溢出)和OOM(内存溢出)。一般不编写针对性的代码进行处理。
    • Exception: 其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。

    在这里插入图片描述
    如果num1为10,num2为0,就会抛出
    在这里插入图片描述

    异常处理:
    解决掉异常的现象,让程序继续运行(不要奔溃退出)下去。
    程序容错能力提升!程序就会越稳定!

    java进行异常处理,有两种解决方案:
    |-- 抓捕异常【重点掌握】
    |-- 抛出异常

    异常分类:
    编译型异常:
    在源码编译阶段,直接抛出异常,这种异常必须要处理。不处理,这无法正常运行代码。
    在这里插入图片描述

    运行时异常:
    在代码运行时,有可能出现的异常,被称为运行时异常
    在这里插入图片描述

    在这里插入图片描述
    从继承关系可知: Throwable 是异常体系的根,它继承自 Object 。 Throwable 有两个体
    系: Error 和 Exception , Error 表示严重的错误,程序对此一般无能为力,例如:

    • OutOfMemoryError :内存耗尽
    • NoClassDefFoundError :无法加载某个Class
    • StackOverflowError :栈溢出

    而 Exception 则是运行时的错误,它可以被捕获并处理。
    某些异常是应用程序逻辑处理的一部分,应该捕获并处理。例如:

    • NumberFormatException :数值类型的格式错误
    • FileNotFoundException :未找到文件
    • SocketException :读取网络失败

    还有一些异常是程序逻辑编写不对造成的,应该修复程序本身。例如:

    • NullPointerException :对某个 null 的对象调用方法或字段
    • IndexOutOfBoundsException :数组索引越界

    Exception 又分为两大类:

    1. RuntimeException 以及它的子类;
    2. 非 RuntimeException (包括 IOException、 ReflectiveOperationException 等等)

    抓捕异常:
    针对于可能出现异常的代码,进行抓捕

    try {
    		// 可能发生异常的代码
    
    } catch (Exception e) {
    		// 如果出现了一次,代码会立刻进入catch中
    		// 在这儿解决抓捕到的异常
    } finally {
    		// 必须要执行的代码
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    如果使用抓捕异常,通过这种处理,程序即便是遇到了,也不崩溃

    try catch运行流程
    出现异常的流程
    不出现异常的流程
    在这里插入图片描述

    java中异常的继承关系:

    Throwable 异常的顶级类
    |-- Error 致命性的错误
    |-- Exception 常见的异常的父类
    |-- RuntimeException 运行时异常,只有运行时,才有可能出现异常

    其他的Exception的子类都是编译型异常,必须处理

    多个异常的处理方案:
    在这里插入图片描述

    抛出异常的处理方案:
    编程型异常,如果我们不想处理,可以直接抛给调用者,有调用者完成处理

    创建一个text:
    在这里插入图片描述
    如果路径不正确:
    在这里插入图片描述

    异常 异常处理

    抓捕

    try {
    	
    	} catch(XxxException e) {
    		// 异常处理
    	} catch(XxxxException e) {
    		// 异常处理
    	} catch(Exception e) {
    		// 异常处理
    	} finally {
    		// 必须要执行的代码
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    抛出异常
    将异常交给调用者处理

    finally关键字

    	try {
    		// 可能存在异常的代码
    	} catch(XxxException e) {
    		// 异常处理代码
    	} [finally {	
    	}]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    回收垃圾
    关闭IO流
    关闭数据库连接
    ……

    核心必须要执行代码

    try {
    } finally {
    		// 将必须要执行的代码写在finally中!
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    行返回的是30
    因为虽然finally的一定执行,但是在b=30时已经存在这个数,会返回
    注意:在开发过程中请注意,return关键字和finally关键字同时出现的情况,认真分析、仔细考虑

    自定义异常类:
    接触到的都是属于java官方提供的异常类,
    自己设计异常类

    用户自定义异常类
    一般地,用户自定义异常类都是RuntimeException的子类。
    自定义异常类通常需要编写几个重载的构造器。
    自定义异常需要提供全局常量:serialVersionUID
    自定义的异常通过throw抛出。
    自定义异常最重要的是异常类的名字,当异常出现时,可以根据名字判断异常类型。

    定义一个普通的类,让该类成为Exception类或者它的子类的子类
    在这里插入图片描述

    异常抛出:
    可以通过创建异常(系统或者自定义),来给调用者一个确切的错误信息
    调用者就可以通过抛出的信息做成对应的判断。

    接口可以继承接口的

    包装(封装)类:
    java面向对象的语言,8种基本数据类型

    byte Byte
    short Short
    int Integer
    long Long
    boolean Boolean
    float Float
    double Double
    char Character

    在这里插入图片描述

    有了包装类,基本数据类型的功能得的了非常大强化和扩展。

    包装类是对象
    基本数据类型是常量

    拆箱和装箱功能
    拆箱:将包装类的对象转换为基本数据类型 Integer i = 100; ==> int ii = i;
    装箱:将基本数据类型包装为包装类 double a = 3.14 ==> Double b = a;

    在jdk5.0之前,拆装箱,必须调用对应的方法来来完成
    Integer i = 100;
    int ii = i.intValue(); // 拆箱

    int a = 10;
    Integer b = new Integer(a); // 9以及之后版本过时了,不建议使用

    Integet bb = Integer.valueof(b); // 建议使用这个方法

    在jdk之后,所有的所有的拆箱和装箱功能会自动完成。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    ios手动符号表解析
    学生HTML个人网页作业作品 (服装商城HTML+CSS)
    java版直播商城免费搭建平台规划及常见的营销模式+电商源码+小程序+三级分销+二次开发
    微信小程序Snapshot导出海报
    【python笔记】第十一节 生成器和迭代器
    Qt的信号和槽机制
    Java Object类简介说明
    promise函数
    高并发下丢失更新的解决方案
    iphone备份后怎么转到新手机,iphone备份在哪里查看
  • 原文地址:https://blog.csdn.net/weixin_53136274/article/details/126034537