文章目录
一、异常
概念
Java中,将程序执行过程中发生的不正常行为称为异常
Java中不同类型的异常,都有与其对应的类来进行描述
比如:
算术异常
System.out.println(10/0);
运行结果
Exception in thread "main" java.lang.ArithmeticException: / by zero
数组越界异常
int[] arr = {
1,2,3};
System.out.println(arr[3]);
运行结果
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
空指针异常
int[] arr = null;
System.out.println(arr.length);
运行结果
Exception in thread "main" java.lang.NullPointerException
体系结构
Throwable:是异常体系的顶层类,派生出Error
和Exception
两个子类
Error:指Java虚拟机无法解决的严重问题,比如:JVM的内部错误、资源耗尽等,例如,StackOverflowError
和OutOfMemoryError
,一旦出现,无法挽回
Exception:异常产生后程序员可以通过代码处理,使程序继续执行
分类
根据异常发生的时机不同,分为编译时异常和运行时异常
编译时异常
在程序编译期间发生的异常,称为编译时异常,也称为受检查异常(Check Exception)
public class Test {
private String name;
private String gender;
@Override
public Test clone(){
return (Test)super.clone(); // 编译报错
// java: 未报告的异常错误java.lang.CloneNotSupportedException; 必须对其进行捕获或声明以便抛出
}
}
@Override
public Test clone() throws CloneNotSupportedException {
return (Test)super.clone();
}
运行时异常
在程序运行期间发生异常,称为运行时异常,也称为非受检查异常(Unchecked Exception)
RunTimeException
以及其子类对应的异常,都称为运行时异常。比如NullPointerException
、ArrayIndexOutOfBoundsException
、ArithmeticException
。
编译时出现的语法性错误,不能称为异常,比如单词拼写错误
二、异常的处理方式
防御式编程
LBYL
Look Before You Leap
在操作之前做充分的检查,事前防御型
boolean ret = false;
ret = 登陆游戏();
if (!ret) {
处理登陆游戏错误;
return;
}
ret = 开始匹配();
if (!ret) {
处理匹配错误;
return;
}
ret = 游戏确认();
if (!ret) {
处理游戏确认错误;
return;
}
ret = 选择英雄