Java异常处理浅析

java异常结构和处理

异常结构

异常结构
Error : JVM错误,无法处理
Exception :

  1. 运行期异常
    在这里插入图片描述
  2. 编译期异常
    在这里插入图片描述

异常处理

一般只针对编译期异常


五个关键字-----> try 、catch、finally、throw、throws


1.try…catch…

    public static void main(String[] args) {
        try {
            Class c = Class.forName("d1");
            Thread.sleep(1000);
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }catch(InterruptedException e){
            e.printStackTrace();
        }

    }
}

1、try
用try来捕获可能发生异常的语句,且try块中的语句都是程序正常要执行的语句,把可能发生异常的语句就放在try块中
注意:

  • 1).如果当前try块中存在多条可能发生异常的代码A,B,C三条语句,如果A发生异常,此时B,C不会被执行到。
  • 2).try块尽量避免嵌套

2、catch—>(尽量避免过细划分)
一个try块可有多个catch语句,catch块用于处理try块中的异常,且catch块语句需要一个形式参数指明处理的异常

注意:1).先用关心的子类处理,再用父类处理(假设try中有可能发生的异常的代码A,B,C,当catch捕获A 的异常时,剩下的异常B,C的catch不再进行匹配)

try{
	//代码代码
	A;    B;    C;    D;
}catch(异常类型,异常的变量名e){
	e.printStackTrace();    //A的
}catch(异常类型,异常的变量名e){
	e.printStackTrace();   //B的
}catch (Exception e){
    e.printStackTrace();     //C,D的
}
   //如果只考虑A的异常,剩下的异常可以catch (Exception e) 处理剩下的

2.finally----->特点是:无论try块中的语句 是否 发生异常,finally里中的语句必定会被执行到;

 public static void main(String[] args) {
        try {
            Thread.sleep(1000);
        }catch(InterruptedException e){
            e.printStackTrace();
        }  finally {
            System.out.println("eee");
        }
    }
}

在这里插入图片描述
常见问题

  1. 如果try块包含return;并且finally块也包含return,此时从哪退出
    try块里有return,在执行try块的return之前调用finally执行,从finally里return退出
  2. 如果try里面包含退出System.exit();finally里也包含,此时从哪退出:
    从try块中exit中退出,强制退出

3.throw
扔异常对象

public int peek(){
        if(size == 0) {
            throw new EmptyStackException();
        }
        return element[size-1];
    }

4.throws
void fun() throws 异常 { }
方法抛出异常时,方法会从栈被取出,而异常会再丢给栈上的方法,并未处理

//可同时指明多个异常,用逗号隔开
public static void fun() throws InterruptedException, ClassNotFoundException {
       Thread.sleep(1000);
       Class c = Class.forName("d1");
    }
//也可以全部用Exception全部抛出
public static void fun() throws Exception {
       Thread.sleep(1000);
       Class c = Class.forName("d1");
    }

throws抛出异常:出现了异常,不做任何处理
在这里插入图片描述
在这里插入图片描述
throw 是语句抛出一个异常;throws 是方法抛出一个异常

throw 是语句抛出一个异常;throws 是方法抛出一个异常

异常处理方式:

  1. try…catch…finally 进行捕获处理
  2. throw、throws 声明抛出异常不处理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值