在java语言中try-catch的catch中能否再加try--catch?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在java语言中try-catch的catch中能否再加try--catch?相关的知识,希望对你有一定的参考价值。

例如:
try
//code
catch(Exception e) //在这个catch中能否再加个try-catch ?
try
//code
catch(Exception e)
//code

//code

希望大神能回答的详细点,多谢……

当然可以,但是不建议这么去做,你可以把你需要捕获异常的代码块放在一个try catch中,捕获你可能出现的所有异常就醒了,比如:try
catch(Exception1)
catch(Exception2)
。。。
这种捕获是顺序捕获,如果觉得麻烦,就捕获所有异常!
参考技术A 可以。

这样的写法,如果在内部try中出现异常,则catch接受,继续向上级抛出异常
参考技术B try
  //code
   try
        //code
    catch(Exception e)
        //code
    
catch(Exception e)   //在这个catch中能否再加个try-catch ?
    try
        //code
    catch(Exception e)
        //code
    
    //code

可以任意嵌套使用。任意可以写代码的地方都可以写try/catch

参考技术C 可以的,如
InputStream in = null;
try
in = new FileInputStream("c:\\a.txt");
catch(Exception e)
try
in.close();
catch(Exception e1)

参考技术D catch中可以再进行捕捉catch。

你上面的代码是正确的。

表示当最外层的代码出现异常时,执行异常中的代码,并进行异常捕捉。

try-catch的使用以及细节

文章目录

try-catch的使用以及细节

🎈 Java中提供 trycatch块来处理异常。try块用于包含可能出错的代码。catch块用于处理try块中发生的异常。可以根据需要在程序中有多个try…catch块。

1. 基本语法

try
//可疑代码
//将异常生成对象的异常对象传递给catch块
catch(异常)
//对异常进行处理
finally
 //可以没有finally

2. 注意细节

  1. 如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch

  2. 如果异常没有发生,则顺序执行try的代码块,不会进入到catch

  3. 如果希望发不发生异常都进入到某段代码段 例如:关闭数据库的连接,则使用 finally

public static void main(String[] args) 

    //ctrl + alt +t 
    try 
        String str = "123";
        int a = Integer.parseInt(str);
        System.out.println(a);
     catch (NumberFormatException e) 
        System.out.println("异常信息" + e.getMessage());
    finally 
        System.out.println("finally代码块被执行");
    
    System.out.println("程序继续");

运行结果为:

当更改为"abc"时语句时再次运行:

  1. 可以有多个catch语句,捕捉不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,比如Exception 在后 ,NullPointerException在前,如果发生异常,只会匹配一个catch
public class TryCatchDetai 
    public static void main(String[] args) 

        try 
            Person person = new Person();
            person = null;
            System.out.println(person.getName());
            int n1 = 10;
            int n2 = 0;
            int res = n1/n2;
        catch (NullPointerException e)
            System.out.println("空指针异常 " + e.getMessage());
        
        catch (Exception e)
            System.out.println("算术异常" + e.getMessage());
        finally 

        
    


class Person
    private String name = "yayaya";

    public String getName()
        return name;
    

运行的结果为:

但是实际上还有一个异常为算术异常 及分母不能为0,因为已经找到一个异常就不会捕获下一个异常。

person = null;代码注销

再次运行:

如果更改获取异常的顺序,编译器就会报错。所以父类异常需要在后,子类异常需要在前。

  1. 可以进行try-finally 配合使用,这种用法相当于没有捕获异常
    所以程序会崩溃。但是finally一定会执行,例如:需要关闭数据库,一些必须要执行的代码
public class TryCatchDetail02 
    public static void main(String[] args) 
        try 
            int n1 = 10000;
            int n2 = 0;
            System.out.println(n1/n2);
        finally 
            System.out.println("执行finally");
        
        System.out.println("程序继续运行");
    

当程序运行到n1/n2时候会报错,这个时候会先执行finally语句,执行完之后就崩溃。!!

运行结果为:

快捷键

全选住代码 ctrl + alt +t 选择6就可以一键生成try=catch

以上是关于在java语言中try-catch的catch中能否再加try--catch?的主要内容,如果未能解决你的问题,请参考以下文章

Future中 try-catch 和 catchError

java异常 throw和try-catch的关系

try-catch语句

java中try-catch模块中with语句块的作用

java 在try-catch块中使用if语句不适用于JSoup

try-catch的使用以及细节