Java的异常处理

异常处理机制

1.抛弃异常

异常产生和提交的过程

2.捕获

得到异常对象后,寻找处理这一异常的方法,运行时把当前异常交给该方法进行处理

3.异常处理的一般步骤

①异常抛出➡②异常捕获→③异常处理


Java异常处理的5个关键字

1.try

放可能引发异常的代码,试试它所包含的代码段中是否会发生异常

2.catch

对应的异常类型和一个代码块,表明该catch块用于处理这种类型的代码块,可以有多个catch。当有异常时,抓住并进行相应的处理,使程序不受异常的影响而继续执行下去

3.throw

抛出一个实际的异常,抛出一个具体的异常对象,在程序中明确引发异常

4.throws

如果一个方法可以引发异常,它本身并不处理该异常,那么它必须将该异常抛给调用它的方法。用于声明该方法可能抛出的异常。

5.finally

无论是否发生异常都要执行的代码


异常处理语句

1.try-catch

catch

每个try代码块可以伴随一条或多条catch语句,用于处理try代码块中生成的异常事件。

需要一个形式参数指明它能够捕获地异常类型,必须是Throwable的子类。

不会产生异常情况,执行try{}

public void method(){

        try{

        // 代码段 不会产生异常 √

        }catch(异常类型 ex){

        // 处理异常的代码段

        }

}

会产生异常情况,try{}有异常,与catch(匹配异常类型),执行catch{}

public void method(){

        try{

        // 代码段1

        //  产生异常的代码段2 与catch类型匹配后进入catch{}

        // 代码段3

        }catch(异常类型 ex){        // 如果类型不匹配则程序中断

        // 处理异常的代码段4 √

        }

        // 代码段5

}

2.try-catch-catch

一段代码可能引发多种类型的异常。引发异常时,按顺序查看每条catch语句,执行第一条类型匹配的catch{},后面的catch{}将被忽略。

安排catch语句的顺序时,先安排子类,再安排父类。

public void method(){

        try{

        // 代码段

        }catch(异常类型1 ex){

        // 处理异常的代码段

        }catch(异常类型1 ex){

        // 处理异常的代码段

        }catch(异常类型1 ex){

        // 处理异常的代码段

        }

        // 代码段

}

3.try-finally

没有catch子块,发生异常时无法在当前程序中捕获,由系统处理。

public int method(){

        try{

        return 1;

        }

        finally{

        // 放在任何情况下都必须执行的代码

        return 0;

        }

}

当程序使用了外界资源,必须将释放资源的代码写入finally块

4.try-catch...catch-finally

try{

        // 无异常时跳过catch{},执行完执行finally{}

        // 有异常时与catch{}匹配,跳过try{}直接执行匹配的catch{}

}

catch(异常类型1 ex){

        // 类型匹配时 处理异常

        // 类型不匹配时 进行下一条catch块匹配

}

catch(异常处理2 ex){

        //类型匹配时 处理异常

        //类型依然不匹配时 无finally则中断程序 有finally时执行finally{}

}

finally{

        // 有无异常都要执行

        // catch都不匹配时也要执行

}

throw语句

用来明确地抛出一个异常。

if(异常条件1成立)

        throw new 异常1();

if(异常条件2成立)

        throw new 异常2();

...

// 抛出异常首先要生成异常对象

// 生成异常对象通过throw语句实现:

IOException e=new IOException();

throw e;

throws子句

用来声明一个异常。

returnType methodName([paramlist]) throws exceptionList{...}

返回类型 方法名(参数列表) throws 异常列表{...}

三种嵌套

try

{

    try{ }

    catch(Exception E1){ }

}

catch(Exception E2){ }

try{ }

catch(Exception E1)

{

    try{ }

    catch(Exception E2){ }

}

try{ }

catch(Exception E2){ }

finally

    try{ }

    catch(Exception E1){ }

    finally{ } 


用户自定义异常类

要用try-catch-finally捕获,但必须由用户自己抛出(throw new MyException)。自定义异常类必须使Throw的直接子类或间接子类。(最好定义为Exception的子类。)

class 自定义异常1 extends Exception{

        自定义异常1(String str)

                super(str);

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值