5.13 异常
1.异常定义:就是在程序的运行过程中所发生的不正常事件,它会中断正在运行的程序
2.if-else来解决异常问题的弊端:
1.代码臃肿
2.程序员要花很大精力“堵漏洞”
3.程序员很难堵住所有“漏洞”
3.异常处理 定义:
异常处理机制就像是我们对平时可能会遇到的意外情况,预计想好了一些处理的方法.也就是说,在程序执行代码的时候,万一发生异常,程序会按照预定的处理方法对异常进行处理,处理完毕以后,程序继续进行.
4.Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws.
try:执行可能产生异常的代码
catch:捕获异常
finally:无论是否发生异常,代码总能执行
throws:声明方法可能要抛出的各种异常
throw:手动抛出异常
5.try-catch
1.正常运行
public void method(){
try {
// 代码段(此处不会产生异常)
} catch (异常类型 ex) {
// 对异常进行处理的代码段
}
// 代码段
}
2.使用try-catch块的三种情况
正常;出现异常;异常类型不匹配
3.在catch块中处理异常
1,加入自定义信息;
2,调用方法输出异常信息 e.printStackTrace()
4.异常对象常用的方法
void printStackTrace(); 输出异常的堆栈信息
String getMessage(); 返回异常信息描述字符串,是printStackTrace()输出信息的一部分
6.异常常见类型
异 常 类 型 说 明
Exception 异常层次结构的父类
ArithmeticException 算术错误情形,如以零作除数
ArrayIndexOutOfBoundsException 数组下标越界
NullPointerException 尝试访问 null 对象成员
ClassNotFoundException 不能加载所需的类
IllegalArgumentException 方法接收到非法参数
ClassCastException 对象强制类型转换出错
NumberFormatException 数字格式转换异常,如把"abc"转换成数字
7.在try-catch块后加入finally块
1.是否发生异常都执行
2.不执行的唯一情况
8.存在return的try-catch-finally块
public void method(){
try {
// 代码段 1
// 产生异常的代码段 2
} catch (异常类型 ex) {
// 对异常进行处理的代码段3
return;
}finally{
// 代码段 4
}
}
9.引发多种类型的异常
1.排列catch 语句的顺序:先子类后父类
2.发生异常时按顺序逐个匹配
3.只执行第一个与异常类型匹配的catch语句
10.方法体中出现异常解决:
1.调用者处理异常
try {
divide();
} catch (Exception e) {
e.printStackTrace();
}
2.调用者继续声明异常
public static void main(String[] args) throws Exception {
divide();
}
}
11.日志(log)
主要用来记录系统运行中一些重要操作信息
便于监视系统运行情况,帮助用户提前发现和避开可能出现的问题,或者出现问题后根据日志找到原因
12.日志分类
SQL日志、异常日志、业务日志
13.log4j是一个非常优秀的开源日志记录工具
控制日志的输出级别
控制日志信息输送的目的地是控制台、文件等
控制每一条日志的输出格式
14.使用log4j记录日志步骤
1>在项目中加入log4j的JAR文件
2>创建log4j.properties文件
3>配置日志信息
4>使用log4j记录日志信息
15.throws和throw区别:
1.作用部位不同: throw用于程序中抛出异常,throws用于声明在该方法内抛出异常
2.使用位置不同: throw位于方法体内部,可以作为单独语句使用,throws必须跟在方法参数列表的后面,不能单独使用
3.内容不同: throw抛出一个异常对象,而且只能是一个,throws后面跟异常类,而且可以跟多个异常类.
16.异常分类:
1.error与exceptio的区别:
error:表示紧靠程序本身无法恢复的严重错误,无法解决.
exception:是由java应用程序抛出和处理的非严重错误,是程序员可以解决的错误
2.运行时异常和checked异常的区别
运行时异常:包括runtimeexpection及其所有子类,不要求程序必须对他们处理
checked表示非运行异常: 除了运行时异常外的其他有expection继承的异常类
对于异常分为两种:检查异常和非检查异常(运行异常)
检查异常:编译时被检测的异常(try和catch),编译不通过,检查语法(thow和thows配套使用)
非检查异常:编译时不被检查的异常
主要表现在以下两个方面 :
(1)如何定义方法
(2)如何处理抛出的异常