什么是异常?
指的是程序本质上的错误。
在程序运行过程中,意外发生的情况,背离我们程序本身的意图的表现,都可以理解为异常。
异常分类
Error:是程序无法错了的错误,表示运行应用程序中较严重的问题。
Exception:是程序本身可以处理的异常。异常处理通常指针对这种类型异常的处理
RuntimeWxcept:非检查异常,系统不会强制要求你处理异常
异常处理:
try-catch-finally结果处理异常
try后面可以跟多个catch,处理不同类型的异常。
TryDemoOne.java
package com.demo.day7.exception;
import java.util.Scanner;
public class TryDemoOne {
/*
* try-catch-finally结构处理异常:保证程序出现异常后,整个结构能正常运行
*/
public static void main(String[] args) {
try {//捕获这块可能出现代码异常
// 定义两个整数,由键盘输入,并输出其商
System.out.println("======计算开始====");
System.out.print("请输入第一个整数:");
Scanner sc=new Scanner(System.in);
int one=sc.nextInt();
System.out.print("请输入第二个整数:");
int two=sc.nextInt();
System.out.println("one和two的商是:"+(one/two));
//System.out.println("======计算结束====");
}
catch(Exception e) {//处理try捕获到的异常
e.printStackTrace();//打印出异常,重下往上看
}
finally {//不管有没有异常都执行
System.out.println("======计算结束====");
}
}
}
输出结果:
======计算开始====
请输入第一个整数:12
请输入第二个整数:a
java.util.InputMismatchException
======计算结束====
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at com.demo.day7.exception.TryDemoOne.main(TryDemoOne.java:18)
注意事项:
- Exception是所以异常的父类,所以在多重catch中,必须放在末尾,处理前面子类无法处理的异常。
- 终止finally执行的语句:System.exit(1);
- finally语句块中,return会依据finally语句的强制执行特点,也强制执行,将在try和catch中的return屏蔽掉
- Exception的父类是Throwable
使用throws声明异常类型:
如果一个方法可能出现异常,但是这个方法没有处理异常的能力,可以在方法声明处用throws来声明跑出异常,
谁使用这个方法,谁就要对这个异常进行处理。
通过throws跑出异常时,针对可能出现的多种异常情况,解决方案:
- -throws后面接多个异常类型,中间用逗号分隔
- -throws后面接Exception
throw抛出异常
throw抛出异常的处理方式:
自定义类异常
异常链:
-1、throw new(Exception e,e); 第二个参数是上一个扔出来的异常信息。
-2、 Exception e1=new Exception(); e1.initCause(e);
总结: