导致程序运行不正常的突发情况称为异常
异常的架构
异常都属于Throwable类
Throwable类有两个子类:Error和Exception
Error类属于不可控的系统级异常,这不是程序本身的问题。这种异常不太容易发生,即使发生了我们所能做的处理也
很有限这类错误产生的原因如:内存不足,线程死锁........
Exception类是可控式异常,在程序中可以对其进行控制
Exception类有子类RuntimeException,所有其它不是RuntimeException的异常类统称为CheckedException
RuntimeException是设计的代码错误导致的,属于主观异常,运行时报错,发现问题修改即可,
无捕捉处理的意义.
CheckedException是外在因素导致的错误,属于客观异常,编译时报错,当然我们主要处理的异常即是此类
目的就是在程序编译时,运行前处理掉这些异常。提前预先到可能出现的异常,预防在客
户端使用时出现问题。
捕捉处理异常
捕捉异常 try...catch
格式如下:
try {
<可能产生异常的程序代码> }
catch {
<处理这个异常的程序代码> }
什么方法会产生什么样的异常?到哪里去找?方法一是到API中去找......
更多情况是程序编译时java直接告诉你哪一段代码会产生什么样的异常
并且要求你一定要去处理它...
所以问题的重点在于捕捉到这个异常后,我们去做什么处理。
异常处理
一般两个步骤:1.显示异常类的名称和一些相关的信息(即使什么也不做,程序也会跳过异常继续执行下去)
2.在安全的状况下恢复程序的运行(即让try中的代码能够得到正确运行)
显示异常信息的方法都继承自Throwable类,以下列出常见方法:
toString()
显示异常类的名称和产生异常的原因(比如直接把异常对象丢给打印语句则会自动调用次方法
:System.out.println(e); )
getLoucalizedMessage() ,getMessage()
显示异常产生的原因,两方法效果一样,用系统平台语言显示
printStackTrace()
显示产生这个异常的相关类名称以及是第几行程序代码产生这个异常
此方法有重载版本,带参数后可以改变显示的位置,比如文件
finally
跟在catch后,表示总要被执行的代码,无论是否发生异常,如果发生异常,那么finally语句块在catch语句
块执行后跟着执行。例外:
A. 在chatch中使用System.exit()方法中止程序
B. computer死机...停电...天灾人祸..........
异常执行的顺序:由于所有异常都继承自Throwable类,所以出现个问题,catch语句块可以有很多个,但是必须遵守
具体—>泛化 这样的捕捉顺序,不然更具体的异常类在后面什么也捕捉不到。
throws关键字:抛出异常,跟在方法参数列表后面,表示抛出异常给方法的调用者而不去处理它,一个方法可以同时
抛出多个异常,并且这种抛出异常不做处理的方式可以连续的一直往上抛,甚至可以抛出main方法
毕竟,设计异常的目的就是为了处理它,这样抛出不做处理没有任何意义,仅仅是能够让程序跳过
异常继续执行而已。
自己设计异常
throw关键字 "少个s" 可在方法内部任何位置抛出一个异常对象,常用来抛出Runtime Exception类异常
因为此异常不能用try...catch语句去捕捉,
并且抛出此类异常后,会显示详细的异常信息(和使用Throwable类的printStackTrace()方法显示的
一样)
并且抛出此类异常后,程序会中止,不会继续运行下去
这种利用throw关键字抛出Runtime Exception类异常的方式,我未见书上给出具体的应用情况
定义自己的Exception类
在自己定义的Exception类的构造方法中直接调用父类的构造方法,把参数参数忘上传就好了,真的很简单
除了构造方法外,另外加上什么样的方法都可以,和一个普通的类没有什么区别,该遵守的得遵守而已。
异常与方法的改写:
改写成功与否的判断的标准是,改写的方法丢出的异常必须能够自动转型为父类方法所丢出的类型
显然,如果不能自动往上转型肯定会出现错误
这点和改写方法时返回类型的要求一样(协变返回类型)
只能比父类做的更具体,不能比父类做的更泛化
由此,可见Java的异常处理机制是很巧妙很灵活的。把导致程序运行不正常的异常划分成组织结构良好的类,把异常 信息都包装在这些异常类中并返回给程序员,而且提供try...catch语句去处理异常,throws关键字抛出不处理异常。
这样要么中止程序,要么返回代码中去修改Runtime Exception异常,要么去处理Checked Exception类异常。
具体的处理可以是提供检查机制,当满足某一条件时执行"异常语句",或者是直接抛给导致出现问题的外因。
总之,java的异常处理机制的目标降低异常故障的损失,当然BUG到处都是,我们能做的只能是尽量在故障发生
之前做好万全的准备,预防这些Checked Exception 。
设计的巧妙之处就是把BUG分门别类,不可控的系统级Error“排除不管”,Runtime Exception类的异常出现后返回
去修改代码,Checked Exception类的异常提前预防,尽力总结成具体的异常类装入类库,在编译时解决掉。
统一采用try...catch语句来避免处理错误的逻辑和处理业务的逻辑混杂在一起,提高程序的可阅读性。
通过throws语句将可能出现异常的代码抛出去,集结在一处处理,避开代码空间的局限性。
而且避免了采用诸如传统的if...else等等检查机制导致的执行效率代价。
发表评论
-
1.选区
2009-07-18 17:09 5981 -
多态 向上转型 动态绑定
2009-02-02 17:43 9681.成员变量和静态方法不具有多态性,因为它们都是编译时绑定的。 ... -
复用类——组合,代理,还是继承?
2009-02-02 17:12 1022类的复用基本是三种方式,组合,代理,继承。为了同样 ... -
阶段总结
2009-02-02 01:21 660最近在看JAVA编程思想和 ... -
引用变量是多态的
2009-02-02 01:20 719//演示引用变量的多态 ... -
构造器调用顺序
2009-02-02 01:19 787/*演示构造器的调用顺序 *一,调用基类构造器,反复递归到根, ... -
类之间的关系
2009-02-02 01:18 683一些简单的类设计技巧 ... -
简单类设计技巧
2009-02-02 01:18 726一些简单的类设计技巧 ... -
打包问题?
2009-02-02 01:17 619关于打包问题: 将类文件打包后,编译成功后。 如果把cla ... -
特殊变量this
2009-02-02 01:16 669特殊变量this A this ... -
方法参数总结
2009-02-02 01:15 755方法参数: java里使用值调用,方法得到的是所以参数值的一个 ... -
构造器与初始化
2009-02-02 01:11 776//演示内容如下 // 重载构造器 // 用this()调用另 ... -
JDK和环境变量的说明
2009-02-02 01:08 1305首先,java是个编程语言。 其次,SUN推出了3个java ...
相关推荐
已学习Python语句的顺序结构和条件分支结构和循环结构,一般程序都可编写,可以学习异常处理这个概念,来对程序编写过程中遇到的问题进行处理,并提高编程技能。 不足之处是对前面所学的知识掌握不够扎实。下图是对...
以下是对"JAVA 异常处理的学习"主题的详细阐述: 一、异常的概念与分类 异常是在程序执行过程中发生的不正常情况,它可以是语法错误、运行时错误或者是程序员逻辑上的问题。Java中的异常被封装在类中,这些类继承自...
"New_SE_Handler"可能是一个新的结构化异常处理程序,结构化异常处理(SEH)是Windows操作系统中的一个特性,用于处理硬件和软件异常。 "GetSeAddr"可能是获取异常发生时的地址函数,这对于分析异常原因和定位问题...
在深入学习异常处理时,理解何时应该使用异常以及何时应该使用返回值或错误码是至关重要的。异常通常用于表示不可恢复的错误,而返回值和错误码更适合报告可恢复的错误状态。此外,良好的编程实践包括避免在构造函数...
Java异常处理是编程中至关重要的一个环节,它确保了程序在遇到错误时能够优雅地运行,而不是突然崩溃。本实验报告“java实验报告4-异常处理”旨在帮助初学者掌握Java中的异常处理机制,以及如何利用log4j进行日志...
这个库可能包含了错误处理的实现,包括错误的捕获、记录、上报和恢复机制,开发者可以查看其源码来学习如何实现一个自定义的异常处理系统,或者直接将其集成到自己的项目中,以提升应用的健壮性。在实际使用时,需要...
C++的异常处理对于C程序员来说可能是一个学习曲线,因为它需要理解面向对象的概念,如类和对象。然而,对于编写复杂软件或需要跨平台兼容性的项目,C++的异常处理能力是不可或缺的。 “C与C++中的异常处理.pdf”...
javaScript异常处理文档,当遇到JavaScript等异常问题时可翻阅本文档寻找答案
学习易语言SEH异常处理源码,可以深入了解异常处理机制,这对于编写稳定、健壮的软件至关重要。通过阅读和分析源码,开发者可以学习到如何在易语言中设置和捕获异常,如何定义自己的异常处理器,以及如何在出现异常...
易语言是一种以中文编程为特色的编程环境,旨在降低编程门槛...总的来说,这个压缩包为你提供了一个学习易语言异常处理的实践平台,通过学习和分析源码,你将能够提升你的编程技能,尤其是在错误管理和程序稳定性方面。
在编程领域,异常处理是一项关键的技术,特别是在C++和Windows编程中。对于VC++(Visual C++)开发者来说,理解并熟练运用异常处理是至关重要的。在这个实例中,我们将聚焦于VC6中的异常处理机制,它主要依赖于结构...
金融系统异常处理是确保金融服务稳定性和安全性的重要环节。在金融行业中,系统异常可能涉及到交易中断、数据丢失、安全漏洞等...在实际操作中,还需要不断学习和适应新的技术和挑战,持续提升金融系统的异常处理能力。
### ARM异常处理机制详解 #### 一、ARM异常处理机制概述 ARM处理器作为一种广泛应用的嵌入式系统核心,为了确保系统的稳定性和实时性,设计了一套完善的异常处理机制。异常处理是嵌入式系统中非常重要的一个方面,...
- 学习异常处理关键字:`try`用于包裹可能出现异常的代码块,`catch`用于捕获并处理特定类型的异常,`finally`则包含无论是否发生异常都需要执行的清理代码。 2. **能力目标**: - 运用`try-catch-finally`结构...
由于Java中异常处理是报告错误的唯一官方方式,且受到Java编译器的强制执行,因此,不学习异常处理就无法编写许多有效的示例。基本异常是指那些阻止方法或程序继续执行的问题,如空指针异常(NullPointerException)...
C++异常处理机制是编程中...通过学习C++异常处理机制,开发者可以编写更加健壮的程序,提高程序的鲁棒性和可靠性。理解并熟练运用异常处理机制,能够帮助开发者更好地应对运行时可能出现的问题,保证程序的稳定运行。
在解压"易语言SEH异常处理源码.rar"后,你可以看到具体的源代码文件,通过阅读和学习这些源码,可以了解易语言中异常处理的原理和实际应用。比如,源码可能包含了如何使用`易出错`和`恢复出错`等关键字来处理系统级...
Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展且易于管理的企业级应用程序。在Struts2中,异常处理是一项重要的功能,它...结合给出的博客链接,可以深入学习更多关于Struts2异常处理的实践案例和技巧。
API设置异常处理是确保程序稳定运行的关键环节。当API调用出现问题时,异常处理能够帮助我们捕获错误,防止程序崩溃,并提供有效的错误报告。 异常处理在编程中扮演着至关重要的角色,尤其是在涉及到API调用时。API...
既然学习异常,必不可少的就是要学习异常处理机制。通过该机制是程序中的业务代码和异常处理代码分离,从而使代码更加优雅,是程序员更专心于业务代码的编写! 下面通过实例说明异常发生的情况 和 如何的处理异常! ...