checked or runtime or unchecked?

本文深入探讨Java中的异常处理机制,区分Checked与Unchecked异常,并通过具体案例解析Error与Exception的不同应用场景,帮助开发者更好地理解和运用异常处理。

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

checked or runtime or unchecked?

"MalformedURL-
Exception, for instance, indicates that the address given for the service is not
valid. To recover from this exception, the application will at minimum need to be
reconfigured and may have to be recompiled. No try/catch block will be able to
recover gracefully, so why should your code be forced to catch and handle it?"

看SpringInAction时原RMI时,看到了上面的一段话,再结合这些天项目中的业务逻辑和异常处理,想通了异常处理时的一些困惑.

Java中的异常处理要比C++中强大的多(书上说的,这个我也能多多少少地体会的到),不过当初自学Java学到异常这一块很是苦恼,当时由于没有多少项目经验也就想体会不到Java里异常的优点.只是停留在字面上,"死盯"着"Exception"这个单词看,只是从它自己的类图里记住了Exception分RuntimeException和checked exception,根本不理解把Exception分成这几种情况的初衷,当然也不可能很好很自觉地用到自己的设计中来.

看到SpringInAction里的那段话后,再回过头来研读了Sun提供的Tutorial里关于"
The Three Kinds of Exceptions"(http://java.sun.com/docs/books/tutorial/essential/exceptions/catchOrDeclare.html)
的描述,现在一下子明白多了.

Exception这个单词说的就是正常业务逻辑之外的那想"不正常"(也就是"异"这个字的来源),不过这个"不正常"又可分成多种情况.
    (1),用咱们的大白话有些不正常是用户自身造成的,就像SunTutorial里所说的那样,本来业务逻辑要求用户输入一个存在的可读的文件的路径给系统,可用户由于种种原因输入不合法,这种情况下,一个Well-written的系统就该报出Exception来告诉用户文件路径有误,并在用户重新输入路径后进入正常的处理逻辑.

    (2),还有的不正常情况是那些用户和系统都无能为力的,比如说SunTutorial中提到的那种硬盘坏了.当这种"不正常"发生时用户很难像"文件不合法"那样就可以轻易就可解决掉的,针对这种情况,Java就提供了Error这个类.对于这个Error当然也可用Catch来捉住它,不过捉住后也没什么多大的用处(现在能想到一个好处就是把这个Error所描述的信息给更友好地报告给用户).

    (3),上面的(1)和(2)都属于系统外部的(一个是用户自身,一个是硬件或网络情况),最后一种自然也就是系统自身了,像我们常看到的那种NullPointerException,NoSuchMethodException...这些异常的报出完全说明了系统自身不够robust,设计不够合理,Coding不够仔细.当这种Exception报出后,除了整个系统大修并重新编译外别的无药可救.这也就是"Runtime exceptions are not subject to the Catch or Specify Requirement. The application can catch this exception, but it probably makes more sense to eliminate the bug that caused the exception to occur."

现在再回过头来回答标题里的问题:我们所面对的"不正常"以check的角度来分有两种:checked和unchekced(呵呵,有些废话的意思).而unchecked分为Error和Exception里除RuntimeException中别的子类.

 

刚看到的一个新链接: http://www.javaworld.com/javaworld/jw-11-2007/jw-11-exceptionset.html

在机器人操作系统(ROS)中,机器视觉是机器人感知和理解周围环境的关键技术。robot_vision功能包专注于这一领域,集成了多种视觉处理技术,包括摄像头标定、OpenCV库应用、人脸识别、物体跟踪、二维码识别和物体识别,极大地拓展了ROS在视觉应用方面的能力。 摄像头标定:作为机器视觉的基础,摄像头标定用于消除镜头畸变并获取相机的内参和外参。在ROS中,camera_calibration包提供了友好的用户界面和算法,帮助计算相机参数矩阵,为后续的图像校正和三维重建提供支持。 OpenCV:OpenCV是一个广泛使用的开源计算机视觉库,在ROS中扮演着重要角色。robot_vision功能包可能包含OpenCV的示例代码和节点,涵盖图像处理、特征检测、模板匹配和图像分割等功能,这些功能对机器人视觉系统至关重要。 人脸识别:ROS中的人脸识别结合了图像处理和机器学习技术。robot_vision可能集成了基于OpenCV的人脸检测算法,如Haar级联分类器或Adaboost方法,甚至可能包含深度学习模型(如FaceNet或SSD),帮助机器人实现人脸的识别和跟踪,提升人机交互能力。 物体跟踪:物体跟踪使机器人能够持续关注并追踪特定目标。在ROS中,通常通过卡尔曼滤波器、粒子滤波器或光流法实现。robot_vision功能包可能包含这些算法的实现,助力机器人完成动态目标跟踪任务。 二维码识别:二维码是一种高效的信息编码方式,常用于机器人定位和导航。ROS中的二维码包可用于读取和解析二维码,而robot_vision可能进一步封装了这一功能,使其更易于集成到机器人系统中。 物体识别:作为机器视觉的高级应用,物体识别通常涉及深度学习模型,如YOLO、SSD或Faster R-CNN。robot_vision功能包可能包含预训练的模型和对应的ROS节点,使机器人能够识别环境中的特
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值