Java异常处理机制

异常处理精要
  • 异常概述

    • Exception及Error的概念、区别
      • 异常:指程序运行时发生的不正常事件;异常能够被异常机制处理,保证程序继续运行下去;例如:除数为零、文件没有找到、输入数字格式不对。
      • 错误:指示合理的应用程序不应该试图捕获的严重问题。错误不能被程序处理。发生错误后jvm一般会终止程序运行。解决需要我们修改源代码例如:内存泄漏
  • Exception的层次关系

    • API中标准异常的继承树关系

      • API标准异常的顶级父类 Throwable类; //注意是类哦
      • Throwable类有两个子类:Exception和Error;所有异常都是Exception类的直接或间接子类;所有错误都是Error的直接或间接子类;
    • 运行时异常与非运行时异常的区别

      • Exception分类
        • 运行时异常:
          • RuntimeException的子类都是运行时异常,其他都是非运行时异常。
          • 也称非检测性异常,这些异常在编译器不检测,程序可选择处理与否。但是如果不处理运行时会中断。编译不会出问题。
        • 非运行时异常
          • 也称检测性异常,必须进行处理,不处理,会发生编译期错误
    • 常见运行时异常的概念(空指针、数学、格式、造型)

      • RuntimeException的子类都是运行时异常

      • NullPointerException–空指针异常

        • 发生条件:当一个空对象,即没有初始化,依然为null的对象调用属性或方法时
        • 这个异常一般不捕获。
      • ArithmeticException-算术异常

        • 发生条件:整数除以0
      • IndexOutOfBoundException-索引越界异常

        • 包括StringIndexOutOfBoundException

          和ArrayIndexOutOfBoundException

        • 发生条件:访问字符串或数组元素,超过长度时。

      • NumberFormatException-数字格式异常

        • 发生条件:将把一个字符串转换为数字,而字符串内容不是数字时。
      • ClassCastException-类型转换异常

        • 发生条件:把父类对象转换为不相关的子类类型时。
    • 非运行时异常在编译器检测的特性

      • 编译期会被检测,并强制要求处理这类异常,不处理就会报错
      • 常见非运行时异常:IOException 、SQLExeption
  • 异常处理流程及语句

    • Java异常处理的标准流程

      抛出异常-运行时异常JVM自行抛出,非运行时异常使用throw抛出
      捕获异常-catch语句捕获
      捕获成功-catch的异常类型与抛出的异常类型匹配
      	异常被处理,程序继续运行
      (捕获失败-catch的异常不匹配
      	程序中断执行)
      
    • try代码块

      • 放置所有可能抛出异常或肯定抛出异常的代码
    • catch语句

      • 用于捕获异常,匹配就运行catch中语句

      • 可能发生3中情况

        1. 发生异常并捕获成功
        2. 发生异常捕获失败
        3. 未发生异常
      • catch语句一般写:

        • 任意对异常处理的代码
        • 调用异常对象的方法,例如printStackTrace
      • 对于多个异常要做相同处理的时候

        • 可以使用|
        try {
        		int num=s.nextInt();
        		System.out.println(num);
        		//throw new ClassCastException("人为创造的一个类型转换异常");
        		System.out.println(19/0);
        		}catch (ArithmeticException|ClassCastException e) {
        		e.printStackTrace();
        		}finally {
        			s.close();
        		}
        //这里表示对于算术异常和类型转换异常我们做的是同一个处理
        

    • 多个catch

      • 可能抛出多种类型异常时使用
      • 注意:Catch语句的异常类型必须从子类到父类的顺序,否则编译失败。(因为异常只要被成功捕获一次,被处理后,就不会继续抛出了)
    • finally块

      • 希望不管什么情况,都要执行的代码卸载finally块。
    • catch及finally的可选特性

    • finally与return

      • 前面有return 仍然执行
      • 前面有System.exit(0) 不被执行
    • throw与throws

      • 抛出异常:创建一个异常对象,然后使用throw关键字交给异常处理机制去处理;

      • 使用方式:

        throw 异常对象;
        例如
        throw new Exception();catch(Exception e){
          throw e;
        }
        
      • 对于运行时异常,JVM自行执行一条抛出语句

        throw new ArithmeticException();
        
      • 运行时异常JVM自行抛出,非运行时异常需要程序员throw抛出;//在我们觉得异常应该被处理的地方抛出异常

        ​ 然后根据流程我们有两种方式:

        1. try/catch/finally进行处理

        2. 不处理,使用throws声明异常

          • 注意:如果调用第一种方式,异常在try/catch块中就被处理,我们不能再捕获到这个异常了。

            所以我们通常使用第二种方式进行声明,这样会很灵活。

      • throws:位于方法声明处,声明方法中可能发生的异常。

        • 使用throws,当我们调用方法时,编译器会提醒我们要处理这些异常,否则就会编译错误。
  • 自定义异常

    • 自定义异常的意义
      1. 为了不与API中的标准异常混淆
      2. 当我们需要根据业务需求定义业务异常
    • 自定义异常声明和使用
      • 实现方式:继承API中任意一个标准异常类
      • 通常继承Exception类
      • 一般自定义异常类不写其他方法,只重载必要的构造方法
        • 因为构造方法不会被子类继承。
  • 断言

    • 断言的作用
    • 断言的使用
  • 运行时异常和非运行时异常的区别为什么运行时异常使用多。

  • try/catch/finally 可以嵌套在try块、catch块、finally块。

  • 抛出异常与 try/catch块的区别

    • 抛出异常:一般
  • 异常堆栈:异常从内到外抛,方法从外向里调。

同步定位与地图构建(SLAM)技术为移动机器人或自主载具在未知空间中的导航提供了核心支撑。借助该技术,机器人能够在探索过程中实时构建环境地图并确定自身位置。典型的SLAM流程涵盖传感器数据采集、数据处理、状态估计及地图生成等环节,其核心挑战在于有效处理定位与环境建模中的各类不确定性。 Matlab作为工程计算与数据可视化领域广泛应用的数学软件,具备丰富的内置函数与专用工具箱,尤其适用于算法开发与仿真验证。在SLAM研究方面,Matlab可用于模拟传感器输出、实现定位建图算法,并进行系统性能评估。其仿真环境能显著降低实验成本,加速算法开发与验证周期。 本次“SLAM-基于Matlab的同步定位与建图仿真实践项目”通过Matlab平台完整再现了SLAM的关键流程,包括数据采集、滤波估计、特征提取、数据关联与地图更新等核心模块。该项目不仅呈现了SLAM技术的实际应用场景,更为机器人导航与自主移动领域的研究人员提供了系统的实践参考。 项目涉及的核心技术要点主要包括:传感器模型(如激光雷达与视觉传感器)的建立与应用、特征匹配与数据关联方法、滤波器设计(如扩展卡尔曼滤波与粒子滤波)、图优化框架(如GTSAM与Ceres Solver)以及路径规划与避障策略。通过项目实践,参与者可深入掌握SLAM算法的实现原理,并提升相关算法的设计与调试能力。 该项目同时注重理论向工程实践的转化,为机器人技术领域的学习者提供了宝贵的实操经验。Matlab仿真环境将复杂的技术问题可视化与可操作化,显著降低了学习门槛,提升了学习效率与质量。 实践过程中,学习者将直面SLAM技术在实际应用中遇到的典型问题,包括传感器误差补偿、动态环境下的建图定位挑战以及计算资源优化等。这些问题的解决对推动SLAM技术的产业化应用具有重要价值。 SLAM技术在工业自动化、服务机器人、自动驾驶及无人机等领域的应用前景广阔。掌握该项技术不仅有助于提升个人专业能力,也为相关行业的技术发展提供了重要支撑。随着技术进步与应用场景的持续拓展,SLAM技术的重要性将日益凸显。 本实践项目作为综合性学习资源,为机器人技术领域的专业人员提供了深入研习SLAM技术的实践平台。通过Matlab这一高效工具,参与者能够直观理解SLAM的实现过程,掌握关键算法,并将理论知识系统应用于实际工程问题的解决之中。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值