第六章:异常
我们在程序中会遇到很多的异常,有的是编译时异常,有的是运行时异常
编译时异常:在我们写代码的时候就变红色的,无法启动时的异常。
运行时异常:运行过程中报出的异常。
我们为什么要解决异常?
我们解决异常时因为,我们并不想因为一个地方报错导致整个程序出现崩溃,我们在打游戏时往往是一个是一个模块出现错误,并不影响其他模块的使用,所以我们处理异常。
下面的程序会报错吗?
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的异常处理了。
一,概念
异常是一种特殊的对象,类型为java.lang.Exception或其子类
Java处理异常机制:Java编程语言,使用异常处理机制为程序提供了错误处理的能力。
异常对象都会有一个方法叫printStackTrace()
,它会把错误信息打印出来。
处理过程
处理异常的方式
Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws
常见的异常类型
二,try-catch块
使用try-catch块捕获异常,分为三种情况:
第一种情况:正常
第二种情况:出现异常
第三种情况:异常类型不匹配
另外我们也能在catch
块中添加自定义信息
public void method(){
try {
// 代码段 1
// 产生异常的代码段 2
// 代码段 3
} catch (异常类型 ex) {
// 对异常进行处理的代码段4
System.err.println("出现错误:被除数和除数必须是整数 ");//自定义信息
}
// 代码段5
}
也可以调用Exception
的方法printStackTrace();和getMessage()
去输出错误的堆栈信息。
三,try-catch-finally
这个代码块我们要注意的是执行顺序。
try-catch-finally结构中try语句块是必须的,catch、finally语句块均可选,但两者至少出现之一
四,声明异常
如果在一个方法体中抛出了异常,如何通知调用者?用throws
和throw
关键词去抛出异常。
一,throws
throws声明某个方法可能抛出的各种异常,多个异常用逗号隔开,一般在最外层处理,调用时可以处理,可以继续抛出。
二,throw
一般声明自定义异常,throw后面要实例化一个异常实例,通常是我们自定义的异常类。
三,throw和throws关键字的区别
- 位置不同:
- throw在方法体内,后面跟的是异常类对象名 ;
- throws在方法声明上, 后面跟的是异常类名 ;
- 可以抛出异常的个数不同:
- throws: 可以跟多个异常类名,用逗号隔开 ;
- throw: 只能抛出一个异常对象名 ;
- 处理的位置不同:
- throws: 表示抛出异常,由该方法的调用者来处理;
- throw: 表示抛出异常,由该方法体内的语句来处理;
- 出现异常的可能性不一样:
- throws: throws表示有出现异常的可能性,并不一定出现这些异常;
示抛出异常,由该方法的调用者来处理;- throw: 表示抛出异常,由该方法体内的语句来处理;
- 出现异常的可能性不一样:
- throws: throws表示有出现异常的可能性,并不一定出现这些异常;
- throw: throw则是抛出了异常,执行throw一定出现了某种异常;