XF文章笔记之《Java异常》重视异常(二)

本文深入探讨了在编程中正确处理异常的重要性,强调了不应忽视或遮掩异常,而是要通过捕获、处理和适当返回异常信息来增强代码的健壮性和可维护性。文章通过Java示例说明了不同类型的异常处理策略,并提供了实用的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在编写代码时,要重视异常,不可忽视异常,也不要遮掩异常,对返回的异常信息要全部返回

重视异常

当产生异常的时候不去捕获,会发生什么?
在执行代码时,代码发生异常没去捕获,线程就会停止。而异常信息没有返回的话,
连出错的地方都很难找。

在JAVA中,发生异常后,主要是:

1.捕获并处理,防止进一步转播。
2.捕获在抛出它,给调用端去处理。
3.不捕获这个异常,随他怎么去传播。

举例
例如:捕获了异常,而没有去处理,将异常吞噬了,这样很可怕

   public  void m1(){
           try {
               
           }catch (Exception e){
               
           }
       }

这样捕获了异常,没有区处理,这样代码会继续执行,和没有发生异常一样,代码将异常吞噬了。

刚开始不知道如何去处理异常,只要应该将异常存储到日志文件中,

public  void m1(){
           try {
               
           }catch (Exception e){
              System.out.println(e); 
              LogException(e);
           }
       }

这样做只能将测试的异常存储,无法记录未发生的异常。如果想要发现测试过程中未发生的异常,就需要去
查找整个程序源码,在打印System.out.println语句应该替换为异常处理代码。

用printStackTrace可以将异常打印在控制台

public  void m1(){
           try {
               
           }catch (Exception e){
              System.out.println(e); 
              e.printStackTrace(System.err);
           }
       }

最好的办法就是去处理异常

不要遮掩异常

在处理先前异常时,如果catch和finally都抛出异常了,finally就会将catch的异常遮掩,只会剩下最后一个异常传给调用端。
如果你想知道函数失败的罪魁祸首,最好不要遮掩异常。

  • 示例
public class Hidden {

    public static void main(String[] args) {
        Hidden hidden = new Hidden();
        try {
            hidden.foo();
        }catch (Exception e){
            System.out.println("In main:" + e.getMessage());
        }
    }

    public void foo() throws  Exception{
        try {
            throw new Exception("first Exception");   //1
        }catch (Exception e){
            throw new Exception("Second Exception");  //2
        }finally {
            throw new Exception("Third Exception");   //3
        }
    }
}

最后只会输出 In main:Third Exception
因为2将1的异常遮掩了,3将2的异常遮掩了,最后只返回3的异常给调用端。
其他异常都被丢弃了。

修改下代码

public static void main(String[] args) {
        Hidden hidden = new Hidden();
        try {
            hidden.foo();
        } catch (Exceptions e) {
            System.out.println("In main:" + e.getException());
        }
    }

    public void foo() throws Exceptions {
        Vector vector = new Vector(2);
        try {
            int i = 2 / 0;
        } catch (ArithmeticException e){
            vector.add(e);
            try {
                int j = Integer.parseInt("e");
            }catch (NumberFormatException ee) {
                vector.add(ee);
            }
        }  finally {
           if(vector.size()!=0){
               throw new Exceptions(vector);
           }
        }
    }
public class Exceptions extends  Exception {
    private Vector vector;

    public Exceptions(Vector vector) {
        this.vector = vector;
    }

    public Vector getException(){
        return vector;
    }
}

将可能发生的异常放入一个list中,最后再将多个异常返回去。这个只是个举例,例子有点俗。

  • 不积跬步,无以至千里 每天一点点。
内容概要:本文档详细介绍了Analog Devices公司生产的AD8436真均方根-直流(RMS-to-DC)转换器的技术细节及其应用场景。AD8436由三个独立模块构成:轨到轨FET输入放大器、高动态范围均方根计算内核和精密轨到轨输出放大器。该器件不仅体积小巧、功耗低,而且具有广泛的输入电压范围和快速响应特性。文档涵盖了AD8436的工作原理、配置选项、外部组件选择(如电容)、增益调节、单电源供电、电流互感器配置、接地故障检测、三相电源监测等方面的内容。此外,还特别强调了PCB设计注意事项和误差源分析,旨在帮助工程师更好地理解和应用这款高性能的RMS-DC转换器。 适合人群:从事模拟电路设计的专业工程师和技术人员,尤其是那些需要精确测量交流电信号均方根值的应用开发者。 使用场景及目标:①用于工业自动化、医疗设备、电力监控等领域,实现对交流电压或电流的精准测量;②适用于手持式数字万用表及其他便携式仪器仪表,提供高效的单电源解决方案;③在电流互感器配置中,用于检测微小的电流变化,保障电气安全;④应用于三相电力系统监控,优化建立时间和转换精度。 其他说明:为了确保最佳性能,文档推荐使用高质量的电容器件,并给出了详细的PCB布局指导。同时提醒用户关注电介质吸收和泄漏电流等因素对测量准确性的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值