异常处理:
异常:指的是程序运行过程中,因为用户的误操作、代码的BUG、等等一系列原因,引起的程序奔溃的现象,被称为异常
Java程序在执行过程中所发生的异常事件可分为两类:
如果num1为10,num2为0,就会抛出
异常处理:
解决掉异常的现象,让程序继续运行(不要奔溃退出)下去。
程序容错能力提升!程序就会越稳定!
java进行异常处理,有两种解决方案:
|-- 抓捕异常【重点掌握】
|-- 抛出异常
异常分类:
编译型异常:
在源码编译阶段,直接抛出异常,这种异常必须要处理。不处理,这无法正常运行代码。
运行时异常:
在代码运行时,有可能出现的异常,被称为运行时异常
从继承关系可知: Throwable 是异常体系的根,它继承自 Object 。 Throwable 有两个体
系: Error 和 Exception , Error 表示严重的错误,程序对此一般无能为力,例如:
而 Exception 则是运行时的错误,它可以被捕获并处理。
某些异常是应用程序逻辑处理的一部分,应该捕获并处理。例如:
还有一些异常是程序逻辑编写不对造成的,应该修复程序本身。例如:
Exception 又分为两大类:
抓捕异常:
针对于可能出现异常的代码,进行抓捕
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之后,所有的所有的拆箱和装箱功能会自动完成。