Java中父子异常的处理

捕获多个异常:

* 多个异常使用捕获又该如何处理呢?

  1. 多个异常分别处理。
  2. 多个异常一次捕获,多次处理。
  3. 多个异常一次捕获一次处理。直接在写上catch(Exception e)

  一般我们是使用一次捕获多次处理方式,格式如下:

  ```java
  try{
       编写可能会出现异常的代码
  }catch(异常类型A  e){  当try中出现A类型异常,就用该catch来捕获.
       处理异常的代码
       //记录日志/打印异常信息/继续抛出异常
  }catch(异常类型B  e){  当try中出现B类型异常,就用该catch来捕获.
       处理异常的代码
       //记录日志/打印异常信息/继续抛出异常
  }
  ```

  > 注意:
  *这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。

------------------------------------------------------以下参考博客大佬的,走你--------------------------------------------------------------------

父子异常的处理

一、子类方法只能抛出父类方法的异常或者是其子异常(对于这种限制,主要是因为子类在做向上转型的时候,不能正确地捕获异常)

二、子类构造器必须要抛出父类构造器的异常或者其父异常(这是因为子类构造器中默认添加了父类的构造器)

三、异常丢失

1、在finally中抛出异常,可能会之前抛出的异常丢失

package thinkinginjava;

public class FinallyException {
    public static void main(String[] args){
        try{
            try{
                throw new RedException();
            }finally{
                //把上一个异常覆盖掉
                throw new BlueException();
            }
        }catch(Exception e){
            System.out.println(e);
        }
    }
}

class RedException extends Exception{}
class BlueException extends Exception{}

运行结果:thinkinginjava.BlueException 

2、在finally中使用return,不会抛出异常

package thinkinginjava;

public class ReturnException {
    public static void main(String[] args){
        try{
            throw new Exception();
        }finally{
            return;
        }
    }
}

以上代码我们看到它抛出了异常,但运行时不会有任何输出

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您想将父子数据拆分,可以考虑使用Java的递归算法来实现。以下是一个示例代码,可以将输入的数据拆分成父节点和子节点,然后将它们存储在不同的列表: ``` public class ParentChildSplitter { public static void main(String[] args) { List<String> input = Arrays.asList("A/B", "A/C", "B/D", "C/E", "E/F"); List<String> parents = new ArrayList<>(); List<String> children = new ArrayList<>(); split(input, parents, children); System.out.println("Parents: " + parents); System.out.println("Children: " + children); } public static void split(List<String> input, List<String> parents, List<String> children) { for (String s : input) { String[] parts = s.split("/"); if (parts.length == 1) { parents.add(parts[0]); } else { parents.add(parts[0]); children.add(parts[1]); } } List<String> newParents = new ArrayList<>(children); List<String> newChildren = new ArrayList<>(); for (String c : children) { List<String> temp = new ArrayList<>(); for (String s : input) { if (s.startsWith(c + "/")) { temp.add(s.substring(c.length() + 1)); } } split(temp, newParents, newChildren); } parents.addAll(newParents); children.addAll(newChildren); } } ``` 在此示例,我们首先将输入数据按照“/”拆分成父节点和子节点,并将它们存储在不同的列表。然后,我们使用递归算法来处理子节点,将它们与输入数据的其他节点进行匹配,以确定它们的子节点。最后,我们将所有的父节点和子节点都合并到最终的列表

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值