JAVA异常知识整理

原创 2007年09月19日 11:38:00
一、Java中异常处理的原则
*************************************************************************************
当一个类在遇到错误时,它应该设法:
A.返回到一个安全和已知的状态
B.能够使用户执行其它的命令
C.如果可能,就保存所有的工作
D.如果有必要,可以退出以避免造成进一步的危害
*************************************************************************************

二、隐含和显式错误的区别
*************************************************************************************
一个隐含的错误或异常是起源于错误或RuntimeException类。其它类型的异常则被称作是显式异常。隐含异常可以出现在任何类和方法中,在运行时异常的情况下,我们可以有策略地放置if语句来防止它的产生,但在Error的情况下我们将束手无策。
显式异常仅仅出现在方法体中,他们在方法体头部已经明确了该方法所可能遇到的异常类型
隐含异常在它们产生时被自动抛出,而显式异常必须在那些被明确声明的方法中才可能被抛出
*************************************************************************************

三、何时使用if-else来预防异常,何时使用try-catch来捕捉异常
*************************************************************************************
  如果我们明确知道可能发生错误的地方或能够有效预防错误发生,就应该使用if-else来预防错误的发生:比如空指针异常,数组下标越界异常
  如果我们无法明确知道错误发生的地方或无法完全避免异常,应该使用try-catch来捕捉异常:比如I/O异常。
*************************************************************************************

四、如何抛出一个显式异常:
*************************************************************************************
要抛出一个显式异常,必须用以下语法明确地在方法头部声明该方法将会遇到的异常种类:
 [modifiers] returnType methodName throws ListOfExceptionType
 {  …
      throw new ExceptionType1(argument);    // 抛出第一种类型的异常

throw new ExceptionTypeN(argument);    // 抛出第N种类型的异常
}
异常一旦抛出,将在调用该方法的上层方法体内寻找合适的异常处理代码,而不会继续执行该方法的正常处理流程。

五、如何自定义一个异常
*************************************************************************************
A.创建一个继承Exception的类或者其它已经存在的异常类的子类
B.在该类中创建一个默认的无参构造方法,这个构造方法以适当的错误信息作为输入,来调用它的超类的构造方法
C.再增加一个带字符串参数的构造方法,这个构造方法以合适的错误消息作为输入(还包括输入的字符串)来调用它的超类的构造方法
例如:
public String getText(String s) throws LongStringException{
        if(s.length()<=10){
            return s;
}
else {
    throw new LongStringException(“String too long”);
}
}
*************************************************************************************


六、是不是所有的方法都可以抛出一个异常
*************************************************************************************
不是,如果子类方法覆盖了父类的方法,且父类方法本身不会抛出异常的话,子类的方法即使在方法的头部声明了异常的抛出也不能够抛出异常
碰到这种情况,可以采用在一个与父类方法不同名的方法中,调用父类的方法,然后明确地声明该方法可能会抛出的异常就行了。
*************************************************************************************


七、什么时候才是抛出异常的时机
*************************************************************************************
A.如果一个简单的测试就可以防止异常的产生,那么就竭力防止它(特别适用RunntimeException)
B.如果知道如何正确的处理这种异常,那么就着手解决它,而不要抛出一个异常,因为对于一个
需要返回值的方法来说,抛出一个异常会导致该方法的执行中断,转到异常处理方法中,从而
不能正常的返回一个值
D.如果不能确信怎样去处理这个异常,那就抛出它,把它留给一个合适的方法去处理。同样在调
用一个方法时,这个方法抛出一个异常,那么也可以不去处理它,而把它重抛(re-throw)给别的方法去处理
*************************************************************************************


八、如何捕捉异常
*************************************************************************************
如果在try块里的任何一段代码产生了一个catch块要捕捉的异常,那么在try块中其余剩下的代码都将被忽略,而相应的catch块将会被执行
如果在try块里没有代码产生异常,那么所有的catch语句块都将会被忽略
如果抛出的异常在catch块里面没有被声明,那么方法立刻退出
*************************************************************************************

九、为什么在捕捉异常时要把Exception放在catach块的最后
*************************************************************************************
  因为当异常产生时,JVM会按照顺序查找与异常匹配的catch块,如果把catch(Exception e)放在所有catch块的最前面,由于大多数RuntimeException类都继承了Exception类,所有的异常都会被catch(Exception e)所捕捉。这意味着其它的catch块都不会被执行。所以catch块的排列顺序应该是按照先子类、后父类的方式排列,最后才是catch(Exception e)
*************************************************************************************

十、异常的抛出和捕捉的时机
*************************************************************************************
A.    如果能够找到一个有意义的方法来捕获异常,就立即引入这个方法
B.    否则就应该考虑做某些处理后传递或者再次抛出异常,也可以把异常转换为另一种形式,然后抛出一个新的异常
C.    另一个方法是,可以完全忽略这个异常,而把它加到方法的头部的throws语句中,由调用这个方法的方法来处理它
D.    通过捕获一个公共的异常超类,可以在一个块里面捕获多个异常,但不能够用一个空的catch语句块来完全制止一个异常。
 

【好程序员笔记分享】——java中关于异常的知识点

android培训------我的java笔记,期待与您交流! 关于java中异常的知识点也学习了好久了,今天依旧把前段时间学习的异常的知识点整理一下. 好了,开始上笔记: 一:java中异常是...
  • u012960536
  • u012960536
  • 2015年05月11日 22:44
  • 410

Java知识整理——基础知识

什么是JVM? 为什么称Java为跨平台的编程语言? Java虚拟机(Java Virtual Machine)是可以执行Java字节码的虚拟机,每个Java源文件将被编译成字节码文件,然后在JVM...
  • Lnho2015
  • Lnho2015
  • 2015年05月09日 15:12
  • 486

MySQL数据库知识整理归纳

数据库创建需要考虑的内容
  • cz28274815
  • cz28274815
  • 2014年09月04日 22:21
  • 751

Java注解知识点整理

注解:是元数据,可以声明在包、类、属性、方法、局部变量、方法参数等前面,用来对这些元素进行说明、注释。...
  • wen294299195
  • wen294299195
  • 2015年11月28日 15:44
  • 598

Java知识点整理:第一章:基础知识梳理

把java知识给总结下,也是我自己一个梳理的过程,可能这辈子这种事情就会干这一次了,好好梳理梳理脑子里面的知识。 学习Java其实没有大家想想中的那么困难,有一句话说的很好,却往往被大家所忽视,那就是...
  • junlei0426
  • junlei0426
  • 2016年11月06日 20:27
  • 509

Java入门基础-数组知识点整理

今天上班第一天,也学习Java基础。下面我整理了学习数组过程中的笔记。 1、Java中,数据存储在什么地方?下面是在视频中的截图,很清晰! 从上面JVM内存分配图中,我也可以把程序分解为:数据+代...
  • x_panda
  • x_panda
  • 2013年12月12日 12:00
  • 828

Java异常知识整理

一、异常分类 都是Throwable的子类: Exception(异常):程序本身可以处理的异常Error(错误):程序无法处理的错误,一般都是发生在虚拟机自身或者执行应用时。Checked(编...
  • CHEN_DOUDOU
  • CHEN_DOUDOU
  • 2017年10月12日 16:59
  • 128

java异常知识点总结

一:异常处理机制       异常是指使运行的程序中断或者停止的的事件,这些事件通常是由硬件或者程序逻辑不当引起的,对这些事件的捕获和处理可以增强代码的健壮性。 二:异常的分类      在ja...
  • gdfdgreg
  • gdfdgreg
  • 2017年02月14日 16:53
  • 359

JAVA异常知识点总结

1、Java异常的体系结构
  • MichaelJY1991
  • MichaelJY1991
  • 2014年10月24日 11:35
  • 785

Java中异常的总结

转自:http://blog.csdn.net/hguisu/article/details/6155636根据上面的层次图,异常类包括Error和Exception两大类 Error类异常主要是运...
  • zjwcdd
  • zjwcdd
  • 2016年05月26日 16:33
  • 962
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA异常知识整理
举报原因:
原因补充:

(最多只允许输入30个字)