异常处理

本文介绍了Java7中异常处理的两项重要改进:支持在一个catch子句中捕获多个异常和在捕获并重新抛出异常时提供更精确的异常类型。此外,还详细讲解了try-with-resources语句的使用,这是一种用于自动管理资源的新语法。

异常处理以一种简洁的方式表示了程序中可能出现的错误,以及应对这些错误的处理方式。

Java7对异常处理的2个重要改动:

  • 支持在一个catch子句中同时捕获多个异常。
  • 在捕获并重新抛出异常时的异常类型更加精确。

几个关键词:

  • throws:用来声明一个方法可能抛出的异常,对方法体中可能抛出的异常都要进行声明。
  • throw:用来在遇到错误的时候抛出一个具体的异常。
  • try-catch-finally:则用来捕获异常并进行处理。

分类:

  • Java中的异常有受检异常和非受检异常两类。
    非受检异常指的是java.lang.RuntimeException和java.lang.Error类及其子类,所有其他的异常类都称为受检异常
  • 区别:两者的差别就在于使用受检异常时的合法性要在编译时刻由编译器来检查。因此受检测异常需要比非受检测异常更多的代码来避免编译错误。
    目前的主流意见是,最好优先使用非受检异常。

try-with-resources语句

  • 一个catch子句捕获多个异常
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

/**
 * try-with-resources
 * 在使用try-with-resources语句的时候,异常可能发生在try语句中,也可能发生在释放资源时。
 * 如果资源初始化时或try语句中出现异常
 * ,而释放资源的操作正常执行,try语句中的异常会被抛出;如果try语句和释放资源都出现了异常,
 * 那么最终抛出的异常是try语句中出现的异常,
 * 在释放资源时出现的异常会作为被抑制的异常添加进去,即通过Throwable.addSuppressed方法来实现。
 * 能够被try语句所管理的资源需要满足一个条件
 * ,那就是其Java类要实现java.lang.AutoCloseable接口,否则会出现编译错误。当需要释放资源的时候
 * ,该接口的close方法会被自动调用
 * 与I/O相关的java.io.Closeable继承了AutoCloseable,而与数据库相关的java.sql.Connection
 * 、java.sql.ResultSet和java.sql.Statement也继承了该接口。
 * 
 * 资源申请原则: 谁申请,谁释放
 */
public class ResourceBasicUsage {
    public String readFile(String path) throws IOException, IOException {
        try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
            StringBuilder builder = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                builder.append(line);
                builder.append(String.format("%n"));
            }
            return builder.toString();
        }
    }
}
  • 除了对单个资源进行管理之外,try-with-resources还可以对多个资源进行管理。
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * 除了对单个资源进行管理之外,try-with-resources还可以对多个资源进行管理。
 * 
 * @author wangbaofu
 * 
 */
public class MultipleResourcesUsage {
    public void copyFile(String fromPath,String toPath) throws IOException, IOException {
        try(InputStream inputStream =  new FileInputStream(fromPath);
                OutputStream ouStream =  new FileOutputStream(toPath)){
                byte[]buffer =  new byte[8192];
                int len=-1;
                while((len=inputStream.read(buffer))!=-1){
                    ouStream.write(buffer, 0, len);
                }
        }
    }
}
  • 实现 AutoCloseable 接口
/**
 * 实现 AutoCloseable 接口
 * @author wangbaofu
 *
 */

public class CustomResource implements AutoCloseable {

    @Override
    public void close() throws Exception {
        // TODO Auto-generated method stub
        System.out.println("进行资源释放。");
    }
    public void useCustomeResource() throws Exception{
        try(CustomResource resource= new CustomResource()){
            System.out.println("使用资源。");
        }
    }
}
内容概要:本文围绕基于模型预测控制(MPC)与滚动时域估计(MHE)集成的目标点镇定展开研究,重点探讨了在动态系统中如何通过MPC实现精确控制,同时利用MHE进行状态估计以提升系统鲁棒性和精度。文中结合Matlab代码实现,展示了MPC与MHE协同工作的算法流程、数学建模过程及仿真验证,尤其适用于存在噪声或部分可观测的复杂系统环境。该方法能够有效处理约束条件下的最优控制问题,并实时修正状态估计偏差,从而实现对目标点的稳定镇定。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校研究生、基于模型预测控制(MPC)与滚动时域估计(MHE)集成的目标点镇定研究(Matlab代码实现)科研人员及从事控制系统开发的工程技术人员;熟悉状态估计与最优控制相关概念的研究者更为适宜; 使用场景及目标:①应用于机器人控制、航空航天、智能制造等需要高精度状态估计与反馈控制的领域;②用于深入理解MPC与MHE的耦合机制及其在实际系统中的实现方式,提升对预测控制与状态估计算法的综合设计能力; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,重点关注MPC代价函数构建、约束处理、滚动优化过程以及MHE的滑动窗口估计机制,同时参考文中可能涉及的卡尔曼滤波、最小均方误差等辅助方法,系统掌握集成架构的设计思路与调参技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值