异常
含义:异常是指程序在运行时出现的错误
1. 异常分类:对于一些经常出现的异常,分为两类,JVM自动捕获的异常称之为“运行时异常(Runtime Expection)”或者“不受检异常(Unchecked Exception )” ,由程序员进行处理或者声明的异常称之为“受检查异常(Check Exception)
2. 异常处理:通常来说是受检查异常中的处理:一般来说分为两种方式
- 当前方法进行捕获,处理异常
- 异常向上抛出,由方法调用者进行处理
- 异常捕捉:try catch 语句
try{
}catch{}
catch{}
.....(可以有若干个catch)
finally{}
发现异常跳到catch块进行捕捉输出
catch块中 出现异常之后代码语句将不会执行
异常类输出语句: printStackTrace();
finally中语句无论异常与否都将输出
案例:
public class Text1 {
public static void main(String[] args) {
System.out.println("开始执行!");
try
{System.out.println("执行计算,结果为:"+10/0);
}catch (Exception e) {
e.printStackTrace();
}
finally {
System.out.println("异常检测完毕!");
}
System.out.println("执行完毕!");
}
}
3.异常捕获:throw,throws关键字的使用
throws在方法的声明处使用,表示此方法不处理异常,所有异常都交给调用处进行处理
throw 主要用于方法体中,表示认为抛出一个异常类的实例化对象
案例:
public class Throws {
public static int check(String string) throws Exception{
int age=Integer.parseInt(string);
if(age<0)
{
throw new Exception("输出异常!年龄无法为负数!");
}
return age;
}
public static void main(String[] args) {
try {
int test =check("-101");
System.out.println(test);
}catch(Exception e){
System.out.println("不符合常理!");
System.out.println("异常原因为:"+e.getMessage());
}
finally {
System.out.println("异常检查完毕!");
}
}
}
4.Error和excetion区别
Error:表示的是JVM系统出错,此时程序还没有执行,用户不能处理(一般建议终止程序)
Exception:表示的是所有程序运行过程中出现的异常,用户可以进行处理
5.异常类构造图以及异常捕捉顺序
如图:上层为父类,下层为子类
检查流程:先子类异常匹配之后父类异常匹配,所以不同catch块中也需要把子类catch块异常放在父类前面,否则会编译错误
注意:
1.try语句块中声明的变量为局部变量,只在try语句块中有效,其后的try,catch,finally语句块或其他位置都不能访问该变量;
try语句块外声明的变量,其后的try,catch,finally语句块能访问该变量。
2.throw抛出一个异常对象时,该语句后面代码都不会执行
案例:出现无法编译
public class Throws {
public static int check(String string) throws Exception{
int age=Integer.parseInt(string);
if(age<0)
{
throw new Exception("输出异常!年龄无法为负数!");
}
return age;
}
public static void main(String[] args) {
try {
int test =check("-101");
System.out.println(test);
}catch(Exception e){
throw e;
System.out.println("不符合常理!");//永远到达不了的代码
System.out.println("异常原因为:"+e.getMessage());
}
finally {
System.out.println("异常检查完毕!");
}
}
}
6.异常处理流程图(综合理解)
7.自定义异常这里不做详解,只提一个关键:自定义异常类一定要说明好继承(extends)的父类异常类型