程序中的异常处理

异常的体系结构

JVM默认处理异常的方式

1.- 把异常的名称,错误原因及异常出现的位置等信息输出在了控制台

2.- 程序停止执行

try-catch方式处理异常

try {

可能出现异常的代码;

} catch(异常类名 变量名) {

异常的处理代码;

}

执行流程

- 程序从 try 里面的代码开始执行

- 出现异常,就会跳转到对应的 catch 里面去执行

- 执行完毕之后,程序还可以继续往下执行

Throwable成员方法

public String getMessage()返回此 throwable 的详细消息字符串

public String toString()返回此可抛出的简短描述

public void printStackTrace()把异常的错误信息输出在控制台

编译时异常和运行时异常的区别

编译时异常

- 都是Exception类及其子类

- 必须显示处理,否则程序就会发生错误,无法通过编译

运行时异常

- 都是RuntimeException类及其子类

- 无需显示处理,也可以和编译时异常一样处理

运行时异常与一般异常

运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。RuntimeException 体系包括错误的类型转换、数组越界访问和试图访问空指针等等。处理RuntimeException 的原则是:假如出现 RuntimeException,那么一定是程序员的错误,例如,可以通过检查数组小标和数组边界来避免越界访问异常。

  一般异常:定义方法时必须声明所有可能会抛出的checked exception;在调用这个方法时,必须捕获它的checked exception,不然就得把它的exception传递下去;checked exception是从java.lang.Exception类衍生出来的。

throws,throw,try,catch,finally分别代表什么意义?

throws:获取异常。

throw:抛出异常。

try:将会报出异常的语句括起来,然后进行异常处理。

catch:如果有异常会就会指向catch语句里面的内容。

finally:不论是否有异常都会执行的语句。

try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

会执行,在return前,执行完try里面的代码之后将数据存储进去return中,然后在返回之前,先执行了finally 内的内容,执行完finally中的内容之后在返回执行return。

例题

public class VariableDemo01 {
    static void methodA() {
        try {
            System.out.println("进入方法A");//1.输出"进入方法A"
            throw new RuntimeException("制造异常");//3.输出"制造异常"
        } finally {//由于finally是每次代码都会执行的,执行完之后在回去执行throw 
            System.out.println("用A方法的finally");//2.输出finally的语句"用A方法的finally"
        }                                        
    }

    static int methodB() {
        try {
            System.out.println("进入方法B");//4.输出"进入方法B"
// throw new Exception();
            return 1;//执行完finally方法后,才来执行return方法,因为return方法在finally方法后执行
        } catch (Exception e) {
            return 3;
        } finally {//同样,finally方法执行完try之后来执行
            System.out.println("调用B方法的finally");//5.输出"调用B方法的finally"
// return 2;
        }
    }

    public static void main(String[] args) {//先看主函数
        try {
            methodA();//找到methodA方法
        } catch (Exception e) {//由于执行了RuntimeException,所以回来执行catch方法,
            System.out.println(e.getMessage());//找到methodB方法
        }
        int i = methodB();//这个时候methodB方法return 1,所以i=1
        System.out.println(i);//6.输出i=1.
    }
}
进入方法A
用A方法的finally
制造异常
进入方法B
调用B方法的finally
1
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值