黑马程序员-异常

来源:互联网 发布:java获取ip访问次数 编辑:程序博客网 时间:2024/05/07 03:28

----------------------android开发java培训、期待与您交流! ----------------------

1)异常的概述:

异常就是所谓的程序运行不正常情况。异常出现的原因有很多,例如说程序中出现了零做除数的情况,线程出现死锁等。异常的问题出现,可以通过java的类的形式进行描述并封装成对象。其实就是JAVA对不正常情况描述后的对象体现。对于异常可以分为两种,一种是不严重的问题,Java通过Exception类进行描述,这种问题往往可以通过具体问题具体分析解决的办法进行处理。 另一种是严重的问题,Java通过Error类进行描述,这种问题一般不做针对性的处理。

2)异常的处理:

Java提供了特有的语句进行处理

try{ 需要被检测的代码;}

catch(异常类   变量){处理异常的代码(即处理方法)}

finally{一定会执行的语}

3)对于获得的异常对象进行常见的方法操作

一般是通过string getmassage()的方法来获取异常信息。

4)对于多异常的处理

首先声明异常时应该声明具体的异常,出现几个声明异常就对应几个catch块,不要定义多余的catch块。如果多个catch块中异常出现继承关系,父类异常的catch放在最下面。

异常:是在运行时期发生的不正常情况;其实异常就是java通过面向对象的思想将问题封装成了对象,用异常类对其进行描述。不同的问题用不同的类进行具体的描述。比如角标越界。空指针等等。问题很多,意味着描述的类也很多,将其共性进行向上抽取,形成了异常体系。在Java中,异常是把问题进行专业化处理的一种手段;不得不说,异常机制也是非常繁琐的,就像垃圾分拣一样繁琐。ThrowableErrorExceptionRuntimeException             

1Throwable体系的特点:Throwable:无论是error,还是异常,问题发生就应该可以抛出,让调用者知道并处理。(该体系的特点就在于Throwable及其所有的子类都具有可抛性。)可抛性其实是通过两个关键字来体现的;就是throws throw ,凡是可以被这两个关键字所操作的类和对象都具备可抛性。就是说它们整个家族都是有共性的,把问题控制在一定范围内,能用特定的方法来进行相关操作;子类的后缀名都是用其父类名作为后缀,阅读性很强。对于角标是整数不存在,可以用角标越界表示,对于负角标为负数的情况,准备用负数角标异常来表示,这里涉及到自定义异常;(负数角标这种异常在java中并没有定义过。那就按照java异常的创建思想,面向对象,将负数角标进行自定义描述,并封装成对象。) Throwable 分成了两大类:ExceptionError1Error:一般不可处理的,是程序无法处理的错误;这些错误都是显示的,基本上不用花太多心思就能解决; 比如OutOfMemoryErrorThreadDeath等。这些错误发生时,java虚拟机(JVM)一般会选择线程终止。(2Exception:可以处理的异常,下面是详细介绍;异常体系的特点:异常体系中的所有类以及建立的对象都具备可抛性;也就是说可以被throwthrows关键字所操作。只有异常体系具备这个特点。

3throwthrows的区别比较:1throws是用在函数上;throw是用在函数内。2throws抛出的是异常类,可以抛出多个,用逗号隔开;throw抛出的是异常对象。异常的两种分类:1,编译时被检测异常:除了特殊子类RuntimeException体系之外的整个Exception体系都是。这种问题一旦出现,希望在编译时就进行检测,让这种问题有对应的处理方式。这样的问题都可以针对性的处理。(4)编译时不被检测异常(运行时异常):就是Exception中的RuntimeException和其子类。这种问题的发生,无法让功能继续,运算无法进行,更多是因为调用者的原因导致的而或者引发了内部状态的改变导致的。那么这种问题一般不处理,直接编译通过,在运行时,让调用者程序强制停止,以对代码进行修正。

5)用finally要注意的地方:1finally中定义的通常是关闭资源代码;因为资源必须要释放。2finally只有一种情况不会执行,就是当程序执行到System.exit(0);finally不会执行。自定义异常:定义类继承Exception或者RuntimeException1,为了让该自定义类具备可抛性;3,让该类具备操作异常的共性方法。

6)自定义异常:是按照java的面向对象思想,将程序中出现的特有问题进行封装。

7)异常处理的原则:1,函数内容如果抛出需要检测的异常,那么函数上必须要声明。否则必须在函数内用try catch捕捉,否则编译失败。(注意:RuntimeException除外;也就是说如果函数内抛出的是RuntimeException异常,函数上可以不用声明)2,如果调用到了声明异常的函数,要么try catch要么throws,否则编译失败。3,什么时候catch,什么时候throws呢?     (1)功能内容可以解决,用catch。(需要定义针对性的处理方式,不要简单的定义printStackTrace输出语句)    (2)解决不了,用throws告诉调用者,由调用者解决4,一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性的处理。内部有几个需要检测的异常,就抛几个异常,抛出几个,就catch几个。(多个catch,父类的catch放到最下面)5,子类在覆盖父类方法时,子类抛出的异常必须是父类的异常的子类或者子集。如果父类或者接口没有异常抛出时,子类覆盖出现异常,那么子类覆盖时就只能try不能抛。异常的好处和弊端:好处就是,将正常流程代码和问题处理代码分离。提高阅读性。而弊端就体现在代码上,不得不仔细找出来每一个异常,并进行相关的处理方式,每一种都会牵扯出一段代码,造成代码结构臃肿。

----------------------android开发java培训、期待与您交流! ----------------------

0 0
原创粉丝点击