文章目录
学习目标
1、掌握异常处理机制的基本格式,熟悉try、catch、finally关键字的作用
2、掌握throw、throws等关键字
3、了解Exception与RuntimeException的区别和联系
4、掌握自定义异常的意义与实现
一、认识异常
异常是指在程序执行时由程序处理逻辑上的错误而导致程序中断的一种指令流。
范例:有异常的代码
public class yichang {
public static void main(String[] args) {
System.out.println("------程序开始执行------");
System.out.println((10/0)); //执行运算
System.out.println("------程序执行完毕------");
}
}
程序执行结果:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at yichang.main(yichang.java:4)
------程序开始执行------
产生数学异常除零异常(ArithmeticException),所以需要导入异常处理语句来完善代码。
try {
//有可能出现异常的句子
} catch(异常类型 对象){
//异常处理
} catch(异常类型 对象){
//异常处理
} finally{
;//不管出现任何异常,都会执行的一行代码
}
二、异常处理
在Java中提供了3个核心关键字:try、catch、finally,可以组成异常处理格式
提示:异常的格式组合
try……catch、try……catch……finally、try……finally
范例:异常处理
public class yichang {
public static void main(String[] args) {
System.out.println("------程序开始执行------");
try {
System.out.println((10/0)); //执行运算
}catch (ArithmeticException e){ //捕获算数异常
System.out.println("处理异常");
}
System.out.println("------程序执行完毕------");
}
}
程序输出执行:
处理异常
范例:使用finally语句
public class yichang {
public static void main(String[] args) {
System.out.println("------程序开始执行------");
try {
System.out.println((10/0)); //执行运算
}catch (ArithmeticException e){ //捕获算数异常
System.out.println("处理异常");
}finally { //不管出不出现异常,该语句一直执行
System.out.println("我一直执行");
}
System.out.println("------程序执行完毕------");
}
}
程序输出结果:
------程序开始执行------
处理异常
我一直执行
------程序执行完毕------
范例:异常简化处理
public class yichang {
public static void main(String[] args) {
System.out.println("------程序开始执行------");
try {
System.out.println((10/0)); //执行运算
}catch (Exception e){ //捕获算数异常
System.out.println("处理异常");
}finally { //不管出不出现异常,该语句一直执行
System.out.println("我一直执行");
}
System.out.println("------程序执行完毕------");
}
}
程序输出结果:
------程序开始执行------
处理异常
我一直执行
------程序执行完毕------
此时,一场统一使用Exception进行处理,这样不管有任何异常都可以捕获处理。
throws关键字
为了方便进行异常处理,会对异常进行标记,需要通过throws。
范例:观察throws关键字的使用
public class throws1 {
public static void main(String[] args) {
try { //调用throws方法需要进行的异常处理
System.out.println(MyMath.div(10,2));
}catch (Exception e){
e.printStackTrace();
}
}
}
class MyMath{
public static int div(int x,int y) throws Exception{ //在子类中定义方法
return x/y;
}
}
程序输出结果:
5
throw关键字
在默认情况下,所有的异常类的实例化对象都是由JVM默认实例化并且自动抛出,为了方便用户手动抛出,JVM提供了throw关键字。
范例:手动抛出异常
public class throw1 {
public static void main(String[] args) {
try {
throw new Exception("自己抛出的对象");
}catch (Exception e){
e.printStackTrace();
}
}
}
程序输出结果:
java.lang.Exception: 自己抛出的对象
at throw1.main(throw1.java:4)
提示:throw和throws关键字的区别
throw | 在代码块中使用,主要是手动进行异常对象抛出 |
---|---|
throws | 方法定义中使用的,表示将异常告诉给调用处 |
自定义异常类
1、类java.lang.Throwable是所有异常类的基类,它包括两个子类:Exception和Error,Exception类用于描述程序能够捕获的异常,如ClassNotFoundException。Error类用于指示合理的应用程序不应该试图捕获的严重问题,如虚拟机错误VirtualMachineError
2、自定义异常类可以继承Throwable类或者Exception,而不要继承Error类。自定义异常类之间也可以有继承关系
3、需要为自定义异常类设计构造方法,以方便构造自定义异常对象。
范例:实现自定义异常
public class throw1 {
public static void main(String[] args) {
try {
Food.eat(11); //输入吃的数量
}catch (Exception e){
e.printStackTrace();
}
}
}
class BombeException extends Exception{
public BombeException(String str){
super(str); //调用父类构造
}
}
class Food{
public static void eat(int num) throws BombeException{ //吃东西
if (num > 9999){ //吃了数量
throw new BombeException("东西吃多了");
}else {
System.out.println("没事");
}
}
}
程序输入结果:
没事
总结
1、异常是导致程序中断运行的一种指令流,
2、异常处理可以使用try……catch结构进行处理,也可以使用try……catch……finally结构、或者使用try……finally进行处理;
finally总会输出。
3、throws用在方法声明出,表示本方法不处理异常。
4、throw表示在方法中手动抛出一个异常。