Java违例控制总结

告别手动改图!用Python+PyWin32驱动SolidWorks,实现参数自动化修改(保姆级避坑指南) 本文详细介绍了如何利用Python和PyWin32驱动SolidWorks实现参数自动化修改,提供从环境配置到API连接的工业级解决方案。通过实战案例和避坑指南,帮助工程师高效搭建自动化脚本工作流,显著提升设计效率。 阅读详情
Java违例控制总结


本文主要讨论Java中的违例控制,包括以下内容:
1)什么是违例控制
2)违例的概念
3)Java中违例的类层次结构
4)如何掷出和捕获违例
5)捕获以后如何处理违例

本文将通过深入以上细节,向你完整地展现Java中违例的全貌,使得你能够在以后的程序编写中得心应手地处理各种可能遭遇的情况。

什么是违例控制
简单地说,违例控制就是在程序中提供给你这样一种能力:
1)监视程序中的异常情况
2)当异常情况发生时,将控制权交给你自己编写的违例控制代码

违例控制的流程
在Java中,这些工作由以下关键字来完成:try,catch,throw,throws,finally,他们的基本代码结构如下:

try
{
    //代码块
}
catch(ExceptionType e)

{
    //此违例类型的控制代码
}

finally
{
    //清除回收等工作
}


首先执行try中包含的代码块,如果遇到执行错误,程序掷出(throw)一特定类型的违例,你捕捉到此违例并转而执行catch中的违例控制代码。最后,无论程序是否产生违例都必须执行finally中的代码,其主要为一些变量清除、资源回收(1)等工作。

违例的类层次结构
违例的类层次结构
    首先让我们来看看Throwable类,Sun是这样来描述它的:

The Throwable class is the superclass of all errors and exceptions in the Java language. Only objects that are instances of this class (or one of its subclasses) are thrown by the Java Virtual Machine or can be thrown by the Java throw statement. Similarly, only this class or one of its subclasses can be the argument type in a catch clause.

Instances of two subclasses,Error and Exception,are conventionally used to indicate that exceptional situations have occurred. Typically, these instances are freshly created in the context of the exceptional situation so as to include relevant information (such as stack trace data).


从中我们可以看出:
1)在Java中,违例对象必然是从Throwable中衍生出来的一个类的实例。
2) Throwable包含两个直接子类Error(错误)和Exception(违例)。
3)我们可以创建自己的违例类,只要它是从Throwable或其子类中衍生出来即可(确切地讲应该是从Exception或其子类中衍生出来,本文不准备详细讨论如何创建自己的违例类,你可以参考相关的资料)。

Error类和Exception类
Error表示那些由于异常情况引起的严重错误,我们不应去捕获这类对象,它主要包括系统内部错误以及资源耗尽等情况。而Exception类表示那些你必须去捕捉并处理的情况。

检查违例(Checked Exceptions)和不检查违例(Unchecked Exceptions)
在Exception的子类中有一个非常重要的类:RuntimeException(2)。Java中将自它或者它的子类衍生出来的任何违例都称作“不检查违例”(Unchecked Exceptions),自其他Exception子类衍生出来的违例都称作“检查违例”(Checked Exceptions)(3)。

不检查违例包括的问题主要有:造型错误,数组越界存取,空指针访问等,这些问题一般来说都是你程序编写的问题。简单地说,不检查违例就是那些由编译器来检查而无需你程序中控制的违例。而检查违例是指那些你必须处理的违例,否则编译时会产生一个编译错误。你可以选择下面任意一种方法来处理它:

1)捕获违例:在try代码块后面紧跟catch处理代码块

2)声明违例:在方法签名中用throws来通告可能会产生违例

Throwable类的构造器和方法
上面我们已经提到throwable是所有违例的超类,在这里我们就来分析一下它。Throwable类有四个构造器方法:

    Throwable()

    Throwable(String message)

    Throwable(String message,Throwable cause)

    Throwable(Throwable cause)


    后两个是在JDK1.4中新出现的方法,用来支持所谓的链式违例(chained exception)机制(4)。接着,我们来看看throwable的一些主要方法:

    fillInStackTrace()

    getStackTrace()

    printStackTrace()

    setStackTrace(StackTraceElement[] stackTrace)


    这四个方法是用来处理StackTrace的,如果你对StackTrace不是很熟悉,你可以这样理解它:就是当程序由于运行时错误终止时你在屏幕上看到的那些东西。

    getLocalizedMessage()

    getMessage()


    这两个方法提供了访问封装在违例对象里的消息的接口。

    toString()


    Throwable重载了Object类的toString方法,用来返回一个Throwable的简短描述。

    所有的违例对象都继承了throwable类的以上方法,所以你可以在catch代码块中调用其中任意一个方法,比如你可以使用getMessage方法来显示违例的详细信息。


那到底违例是什么意思呢?


在此我们引用Campione,Walrath在《The Java Tutorial》(5)中的原话:

The term exception is shorthand for the phrase "exceptional event". It can be defined as follows: Definition: An exception is an event that occurs during the execution of a program that disrupts the normal flow of instructions."

每当一个方法中有异常情况发生,它就实例化一个违例对象并把控制权交给运行时系统来处理,这些工作都是由throw来完成的(也就是我们通常所说的掷出一个违例)。而且该违例对象一般保存有自己的类型以及违例发生时程序状态等信息。

处理违例
由上可以看出,是由运行时系统来负责找出处理违例的代码。

每当违例发生后,运行时系统就开始向后搜索合适的违例控制器(catch代码块),比较的标准是:违例控制器中的违例类型必须是产生的违例类型或其超类。如果直到程序的结尾也没有找到合适的控制器,程序自动终止。

违例控制的优点
相对于传统的错误处理机制,违例控制具有以下优点:

1)将错误处理代码和常规代码分开

2)将错误交给调用栈处理,这就是所谓“将事情交给最合适的人来完成”的思想

3)通过将违例进行分类,可以让我们很容易地看出错误的所在和原因

违例控制的更多细节
我们在前面说过,除了由Error类和RuntimeException类衍生出来的违例外,你必须在程序中控制(handle)或者声明(declare)所有可能被掷出的违例,也就是所有的检查违例都必须得到处理,否则编译器就会对你亮起红灯,拒绝编译。

捕获违例
选择捕获违例意味着你的程序中必须存在有catch程序块,而且参数ExceptionType的类型必须是被掷出违例的类型,或者是其某一继承链中的超类(supperclass)(6)。

声明违例
如果在方法中会产生检查违例,但你又未在此方法中提供此违例的违例控制,那么你就必须声明此方法可能会掷出某特定违例,利用关键字throws就可以达到此目的。语法结构为(只列出方法的签名signature部分):

methodName(paramType param) throws ExceptionType


到底方法中会掷出哪些违例呢?

它包括你的方法中本身代码掷出的违例,你调用的方法掷出的违例,甚至还包括你调用的方法中调用的其他方法掷出的违例,等等。总之,只要控制流还在你的方法范围内,所有掷出的违例都是你必须考虑的。

实例代码


/**

* <p>Title:Except1.java </p>

* <p>Description: Tested using JDK1.4.0 under Win2000 Professional</p>

* @author Mac

* @version 2002/9/9

*/

import java.lang.Thread;

class Except1

{

public static void main(String[] args)

{

    Except1 obj = new Except1();

    try

    { //begin try block

    obj.myMethod();

}

catch(InterruptedException e)

{

    System.err.println(“Handle exception here”);

} //end catch block

} //end main



void myMethod() throws InterruptedException

{

    Thread.currentThread().sleep(1000);

} //end myMethod

} //end class Except1


在上面这个例子中,我们看到myMethod方法只是简单地声明自己会产生一个名为InterruptedException的违例(throws InterruptedException),而真正的处理违例部分延迟到了main方法(catch(InterruptedException e))中。运行这个例子,并回答以下问题,看你是否确实掌握了它。

1、  如果去掉所有的违例控制代码,会发生什么情况?按照提示一步步完善你的程序。

2、  方法myMethod中的违例是怎么引起的?main方法中呢?

3、  把catch(InterruptedException e)换成catch(Exception e)行不行?为什么?

捕获多个违例


此外,可在try代码块中捕获多个违例类型,并分别对每种类型加以控制,每种类型对应于一个独立的catch从句:

   try

    {

        //codes that might throw exceptions

}

catch(ExceptionType1 e1)

{

    //actions do with e1

}

catch(ExceptionType2 e2)

{

    //actions do with e2

}

catch(ExceptionType3 e3)

{

    //actions do with e3

}

// …


声明多个违例
能够捕获多个违例,当然也就可以声明多个违例。比如在myMethod方法中就可以同时声明四个违例:

  
 void myMethod() throws

                    InterruptedException,MyException,HerException,OurException

    {

        //method code

}


finally从句
前面我们已经讲过,finally从句中的内容一定会被执行,无论是否有违例发生。我们可以利用这个特性,在finally从句中放置一些执行回收资源,内存释放等功能的代码。
 
2024年11月架构设计师案例分析真题回顾,附参考答案、解析及所涉知识点(二) 软考高级系统架构设计师考试包含三个科目:信息系统综合知识、案例分析和系统架构设计论文。考试形式为机考。本文主要回顾2024年下半年(2024-11-10)系统架构设计师考试上午第二科案例分析的题目,同时附带参考解答、解析和所涉知识点。 阅读详情

相关推荐

从像素到光影:解析《黑神话:悟空》中Nanite与Lumen的协同渲染革命

本文深度解析了《黑神话:悟空》如何利用Unreal Engine 5的Nanite与Lumen技术实现渲染革命。Nanite处理亿级多边形几何细节,无需传统LOD优化;Lumen提供全动态全局光照,实现实时光线反弹。两者协同工作,为游戏带来电影级视觉体验,重塑了实时渲染的技术标准与工作流程。

f6g7h8i9j的博客 425

虚拟内存管理

来自 《C++应用程序性能优化》 作者:冯宏华等 2007年版。 http://www.cnblogs.com/cswuyg/archive/2010/08/27/1809808.html 什么是虚拟内存?   虚拟内存是Windows XP为作为内存使用的一部分硬盘空间。即便物理内存很大,虚拟内存也是必不可少的。虚拟内存在硬盘上其实就是为一个硕大无朋的文件,文件名是 PageFile.

nkuzbp的专栏 4465

【点云可视化】自制ply文件并使用open3d可视化点云

使用open3d可视化点云,需要将点云制作为ply文件传入函数中。 安装open3d 直接使用pip安装 pip install open3d ply文件 ply文件的结构为:文件头+数据内容,文件头从 ply 一行开始,到 end_header 为止,里面定义了此 ply文件中数据的组织形式,包括数据类型和个数。后面是点云的坐标信息及每个点的颜色属性的,参考自 如下为具有5个点的点云,end_header后每一行表示一个点的x,y,z,R,G,B信息 ply format ascii 1.0 comme

这个人很蓝 1万+

Java违例控制 总结

Java违例控制 总结Java违例控制 本文主要讨论Java中的违例控制,包括以下内容:1)什么是违例控制2)违例的概念3)Java中违例的类层次结构4)如何掷出和捕获违例5)捕获以后如何处理违例本文将通过深入以上细节,向你完整地展现Java中违例的全貌,使得你能够在以后的程序编写中得心应手地处理各种可能遭遇的情况。什么是违例控制简单地说,违例控制就是在程序中提供给你这样一种能力:1)监视程序中的

huhpreal的专栏 992

药物重定位实战:如何用反向找靶技术挖掘老药新用(附Python代码示例)

本文详细介绍了药物重定位中的反向找靶技术,通过分子相似性计算、机器学习模型和结构对接等方法,挖掘已有药物的新治疗潜力。附Python代码示例,帮助读者快速实现从分子结构到潜在靶标的智能预测,显著提升药物研发效率。

weixin_28726671的博客 259

uniapp实战:mui-player插件如何完美适配m3u8/flv直播流(附完整代码)

本文详细介绍了如何在Uniapp中使用mui-player插件完美适配m3u8和flv直播流,提供从基础配置到高级优化的全流程解决方案。通过动态加载策略、响应式布局和内存管理,实现跨平台稳定播放,适用于企业级直播应用开发。

weixin_29001655的博客 236

java自动违例设计,Java违例控制总结

Java违例控制总结本文主要讨论Java中的违例控制,包括以下内容:1)什么是违例控制2)违例的概念3)Java中违例的类层次结构4)如何掷出和捕获违例5)捕获以后如何处理违例本文将通过深入以上细节,向你完整地展现Java中违例的全貌,使得你能够在以后的程序编写中得心应手地处理各种可能遭遇的情况。什么是违例控制简单地说,违例控制就是在程序中提供给你这样一种能力:1)监视程序中的异常情况2)当异常情...

weixin_30100295的博客 181

NFC门禁卡复制全解析:从M1卡到UID卡的攻防实践

本文深入解析了NFC门禁卡的安全机制与攻防实践。从M1卡基于Crypto1算法的原理漏洞讲起,详细阐述了利用Proxmark3等工具进行侦听、破解密钥及使用UID卡进行复制的完整攻击链条。同时,为防御方提供了从升级CPU卡、启用全扇区认证到部署多因子验证的系统性防护策略,旨在帮助管理员构建更稳固的物理安全防线。

weixin_29182481的博客 1401

java违例

通过先进的错误纠正与恢复机制,我们可以有效地增强代码的健壮程度。对我们编写的每个程序来说,错误恢复都属于一个基本的考虑目标。它在 Java 中显得尤为重要,因为该语言的一个目标就是创建不同的程序组件,以便其他用户(客户程序员)使用。为构建一套健壮的系统,每个组件都必须非常健壮。 java违例    和 Java 的其他任何对象一样,需要用 new 在内存堆里创建违例,并需调用一个构建器。在所有

wojiaohuangyu的专栏 1386

HTOL集成电路老化测试学习总结-20250510

电子元器件的可靠性在产品开发中至关重要,尤其是在微电子技术迅速发展的今天。电子元器件的失效率通常遵循“浴盆曲线”,分为早期失效期、可使用期和老化期。为了评估芯片的可靠性,常采用高温操作寿命测试(HTOL),通过高温和高压加速芯片老化,以筛选出早期失效的芯片并评估其长期可靠性。HTOL测试中,芯片在高温下运行并监控其性能变化,通过阿伦尼乌斯公式计算加速因子,预测芯片的失效率和寿命。此外,Burn-in测试用于加速芯片老化,提前发现并剔除不合格产品,而早期失效率测试(ELFR)则用于评估产品初期使用阶段的可靠性

歌颂苦难的行为是无耻的; 2102

6-2 GPU GART 绑定机制与 TLB 失效

本文详细解析了AMD GPU的GART(Graphics Address Remapping Table)绑定机制实现。主要内容包括: 绑定流程:从ttm_tt_bind()到硬件PTE更新的完整调用链,重点分析amdgpu_gart_bind()函数实现。 关键函数: amdgpu_gart_bind():执行安全检查、记录映射关系、更新页表等操作 amdgpu_gart_map():将CPU页映射为多个GPU页并填充PTE amdgpu_gmc_set_pte_pde():处理硬件特定的PTE格式 内存

图形/计算GPU的驱动与虚拟化技术分享园地 2655

Java违例控制

“违例”(Exception)这个词表达的是一种“例外”情况,亦即正常情况之外的一种“异常”。 在问题发生的时候,我们可能不知具体该如何解决,但肯定知道已不能不顾一切地继续下去。此时,必须坚决地停下 来,并由某人、某地指出发生了什么事情,以及该采取何种对策。但为了真正解决问题,当地可能并没有足够多的信息。因此,我们需要将其移交给更级的负责人,令其作出正确的决定(类似一个命令链)。 “违例条件

sharpeha的博客 724

【人工智能之深度学习】12. BERT微调实战:医疗文本分类的领域自适应技巧与工业级实现

摘要:医疗文本分类是自然语言处理在医疗健康领域的核心应用,可辅助疾病诊断、病历结构化和医疗质量监控。然而,医疗文本的专业术语密集、实体关系复杂及数据长尾分布等特性,导致通用BERT模型性能受限。本文系统阐述医疗文本分类的领域自适应技术,从理论原理到工业级实现展开全流程讲解。首先分析医疗文本的独特属性及技术挑战;随后详解领域继续预训练、适配器微调、对抗训练等核心技术的数学原理;构建包含数据预处理、模型优化、隐私保护的完整实战架构;通过疾病分类、情感分析、事件检测三大案例验证技术有效性。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1005

java自动违例设计,Java违例控制,java违例

前言本文主要讨论Java中的违例控制,包括以下内容:1)什么是违例控制2)违例的概念3)Java中违例的类层次结构4)如何掷出和捕获违例5)捕获以后如何处理违例本文将通过深入以上细节,向你完整地展现Java中违例的全貌,使得你能够在以后的程序编写中得心应手地处理各种可能遭遇的情况。什么是违例控制简单地说,违例控制就是在程序中提供给你这样一种能力:1)监视程序中的异常情况2)当异常情况发生时,将控制...

weixin_33265107的博客 168

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

24.JAVA编程思想——违例差错控制

24.JAVA编程思想——违例差错控制 Java 的基本原理就是“形式错误的代码不会运行”。 与C++类似,捕获错误最理想的是在编译期间,最好在试图运行程序以前。然而,并非所有错误都能在编译期间侦测到。有些问题必须在运行期间解决,让错误的缔结者通过一些手续向接收者传递一些适当的信息,使其知道该如何正确地处理遇到的问题。 在C++和其他早期语言中,可通过几种手续来达到这个目的。而且它们通常是作

badman250的专栏 3万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java--违例控制(异常处理)

违例发生时Java处理过程: 首先,创建违例对象:在内存“堆” 里,用new来创建。 随后,停止当前执行路径(记住不可沿这条路径继续下去),然后从当前的环境中释放出违例对象的句柄。 此时,违例控制机制会接管一切,并开始查找一个恰当的地方,用于继续程序的执行。这个恰当的地方便是“...

霍淇滨的博客 215

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java--违例差错控制

401

24 JAVA编程思想——违例差错控制

24 JAVA编程思想——违例差错控制

ugghhj的博客 155

java 为什么违例差错控制_Java违例差错控制

Java违例差错控制Java 的基本原理就是“形式错误的代码不会运行”。捕获错误最理想的是在编译期间,最好在试图运行程序以前。然而,并非所有错误都能在编译期间侦测到。有些问题必须在运行期间解决“违例”( Exception)这个词表达的是一种“例外”情况,亦即正常情况之外的一种“异常”基本违例“违例条件”表示在出现什么问题的时候应中止方法或作用域的继续,为了将违例条件与普通问题区分开,违例条件是非...

weixin_28858247的博客 177

第9章 违例差错控制

Java的基本原理就是“形式错误的代码不会运行”。与C++类似,捕获错误最理想的是在编译期间,最好在试图运行程序以前。然而,并非所有错误都能在编译期间侦测到。有些问题必须在运行期间解决,让错误的缔结者通过一些手续向接收者传递一些适当的信息,使其知道该如何正确地处理遇到的问题。在C++和其他早期语言中,可通过几种手续来达到这个目的。而且它们通常是作为一种规定建立起来的,而非作为程序设计语言的一部分。

Coding Log 868

违例差错控制

Java 最基本的设计宗旨之一便是组织错误的代码不会真的运行起来。编译器会尽可能捕获问题。但某些情况 下,除非进入运行期,否则问题是不会被发现的。这些问题要么属于编程错误,要么则是一些自然的出错状 况,它们只有在作为程序正常运行的一部分时才会成立。Java 为此提供了“违例控制”机制,用于控制程序 运行时产生的一切问题。这一章将解释try、catch、throw、throws以及fina...

dengjuanshou7445的博客 119

java程序员可以控制_Java程序员违例错误的控制

从最古老的程序设计语言开始,错误控制一直都是设计者们需要解决的一个大问题。由于很难设计出一套完美的错误控制方案,许多语言干脆将问题简单地忽略掉,将其转嫁给库设计人员。对大多数错误控制方案来说,最主要的一个问题是它们严重依赖程序员的警觉性,而不是依赖语言本身的强制标准。如果程序员不够警惕——若比较匆忙,这几乎是肯定会发生的——程序所依赖的错误控制方案便会失效。“违例控制”将错误控制方案内置到程序设计...

weixin_28826961的博客 137

java自动违例设计,java学习记录(二):java的违例控制机制

1 产生一个违例时,首先按照与创建java对象一样的方法创建违例对象:在内存“堆”里,使用new 来创建。随后停止当前执行路径,然后从当前环境中释放违例句柄。此时,违例控制机制会接管一切,并开始查找一个恰当的地方,用于继续程序的执行。这个地方便是违例控制器,catch语句。它的职责是从问题中恢复,使程序要么执行另一条路径,要么简单的继续。2 违例更重要的信息保存在违例类型中,而不是违例对象中。3 ...

weixin_28358083的博客 132

《java编程思想》读书笔记——第一章1.8违例控制

1.8违例控制 在早期语言中,因为难以设计出所有类型错误的具体解决方案,大部分的语言放弃了对于程序的错误管理,而将程序的错误交付给了程序员——这并非一种可取的方法 因而,出现了一种违例控制对象(Exception) 在代码进行运行时,若出现异常情况,将会向外抛出一个异常对象 而后,这些异常对象将会被违例控制器进行捕获,并根据设计的逻辑进行特定的处置 并且,我们可以通过重写为例控制器等方法,使得程序...

qq_41445205的博客 201

JAVA编程思想学习 — 第九章 (违例差错控制)

1.违例自变量     和 Java 的其他任何对象一样,需要用 new 在内存堆里创建违例,并需调用一个构建器。在所有标准违例中,存在着两个构建器:第一个是默认构建器,第二个则需使用一个字串自变量,使我们能在违例里置入相关信息:     if(t == null)     throw new NullPointerException("t = null”);     在这儿,关键字 th

叶孤心的专栏 549

java编程思想----9,异常差错控制

第9章 违例差错控制   Java的基本原理就是“形式错误的代码不会运行”。 与C++类似,捕获错误最理想的是在编译期间,最好在试图运行程序以前。然而,并非所有错误都能在编译期间侦测到。有些问题必须在运行期间解决,让错误的缔结者通过一些手续向接收者传递一些适当的信息,使其知道该如何正确地处理遇到的问题。 在C++和其他早期语言中,可通过几种手续来达到这个目的。而且它们通常是作为一种规定建立...

27Up的博客 428
上一篇: Java正则表达式之从入门到精通
下一篇: 目录的递归遍历
CodingMouse
博客等级 码龄19年 82粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值