什么是异常
异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序
程序中的异常
//初识程序中的异常
public class Demo1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("请输入被除数:");
int num1 = in.nextInt();
System.out.print("请输入除数:");
int num2 = in.nextInt();
System.out.println(num1 + "/" + num2 + "=" + num1 / num2);
System.out.println("感谢使用本程序!");
}
}
如果输入的除数是0或者输入的除数不是数字的时候,程序就无法向下运行了。
程序的运行过程中所发生的不正常的事件,会中断正在运行的程序。这就是异常
异常处理
根据不同的异常进行相应的处理,而不会就此中断我们的生活,就是异常处理
Java编程语言使用异常处理机制为程序提供了处理错误的能力
异常处理机制
通过异常处理机制进行处理:(简单的try-catch)
通过异常处理关键字进行专门的处理
try、catch、 finally、throw、throws
try -catch使用
try{
有可能出现错误的代码
}catch(异常){
捕捉异常处理的方式
}
使用try-catch异常处理的三种情况:
1、做了异常处理,但是没有异常
2、有异常,处理到了
3、有异常,但是捕捉到的和catch类型的异常不匹配,没有抓到
异常对象处理
在catch中加入自定义的处理信息:
System.err.println("出现错误:错误提示信息 ");
其中的err,是让打印出来的文字变为红色,err错误
调用方法输出异常信息:
异常对象. printStackTrace();//输出异常的堆栈信息,具体错误
异常对象常用的方法:
常见异常类型:
try-catch-finally
finally块 是否发生异常都会执行的代码
格式:
finally{ 最终都会执行的代码块}
finally唯一不执行的情况:
当前面有system.exit(1);//因为这个方法是强制退出jvm
存在return的try-catch-finally块:
`public void method(){
try {
// 代码段 1
// 产生异常的代码段 2
} catch (异常类型 ex) {
// 对异常进行处理的代码段3
return;
}finally{
// 代码段 4
}
}
return和finally一起出现的时候,先执行finally,再执行return.
多重catch
try 和catch,finally 在一起组合的时候,try是必须的,剩下的二者可全部一起,也可任意一个一起出现
多重catch:
try{}后面可以跟多个catch{}
排列catch 语句的顺序:先子类后父类
发生异常时按顺序逐个匹配
只执行第一个与异常类型匹配的catch语句
使用throws声明异常
使用throw抛出异常
throw和throws的对比:
自定义异常
当JDK 中的异常类型不能满足程序的需要时,可以自定义异常类
自定义异常,只需继承Throwable类,Exception类或者RuntimeException
一个类按照这三种方式进行继承,就变成了异常类
作用:
可以根据我们自己的需要定义异常类,当程序抛出异常的时候,我们可以清楚的知道具体的异常
异常链和异常处理原则
异常链创建了新的异常但却保留了原有异常的信息
异常处理与性能
异常只能用于非正常情况
不要将过于庞大的代码块放在try中
在catch中指定具体的异常类型
需要对捕获的异常做处理
代码练习:
package day03.demo1Excep;
import java.util.Scanner;
//通过异常练习 领取四大名著
public class Demo6Book {
public static void main(String[] args) {
System.out.println("请输入1--4之间的数字:");
Scanner in = new Scanner(System.in);
try{
int num=in.nextInt();
switch (num){
case 1:
System.out.println("您领取到了----《水浒传》");
break;
case 2:
System.out.println("您领取到了----《西游记》");
break;
case 3:
System.out.println("您领取到了----《三国演义》");
break;
case 4:
System.out.println("您领取到了----《红楼梦》");
break;
}
}catch (Exception e){
System.out.println("输入异常");
}
finally {
System.out.println("欢迎提出意见");
}
}
}
结果展示: