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 {
		// 必须要执行的代码
}

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

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

java中异常的继承关系:

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

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

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

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

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

异常 异常处理

抓捕

try {
	
	} catch(XxxException e) {
		// 异常处理
	} catch(XxxxException e) {
		// 异常处理
	} catch(Exception e) {
		// 异常处理
	} finally {
		// 必须要执行的代码
	}

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

finally关键字

	try {
		// 可能存在异常的代码
	} catch(XxxException e) {
		// 异常处理代码
	} [finally {	
	}]

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

核心必须要执行代码

try {
} finally {
		// 将必须要执行的代码写在finally中!
}

在这里插入图片描述
行返回的是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之后,所有的所有的拆箱和装箱功能会自动完成。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值