Think in java学习笔记-第9章 Exceptions

9章 违例差错控制

Java违例差错控制的基本原理就是形式错误的代码不会运行

违例差错控制总则:不要去隐藏程序运行中的错误,而是要告诉用户在遇到错误时该怎么办。

一、Throwable类和Exception

1、   java.lang.Throwable类:对可以作为违例出的所有东西进行了描述。

1)        public class Throwable extends Object implements Serializable

2)        构造方法

ü          Throwable()

ü          Throwable(String message)

3)        成员方法

ü          Throwable fillInStackTrace()Fills in the execution stack trace.

ü          String getLocalizedMessage()Creates a localized description of this Throwable.

ü          String getMessage()Returns the error message string of this throwable object.

ü          String toString()Returns a short description of this throwable object.

ü          void printStackTrace()Prints this Throwable and its backtrace to the standard error stream.

ü          void printStackTrace(PrintStream s) Prints this Throwable and its backtrace to the specified print stream.

ü          void printStackTrace(PrintWriter s) Prints this Throwable and its backtrace to the specified print writer.

2、   java.lang.Exception

1)        public class Exception extends Throwable

2)        构造方法

ü          Exception()

ü          Exception(String message)

二、     抛出违例

1、   在异常发生时,应中止方法或作用域的继续,你没有办法解决这个异常,必须抛出一个异常。

2、   基本违例的构造方法:

1)                    默认构建器,

2)                    使用一个字串自变量

3、   抛出一个基本违例

1)        方法1throw new NullPointerException();

2)        方法2throw new NullPointerException("t = null");

4、   抛出一个违例时:

1)                          在内存里来创建一个违例对象。

2)                          停止当前执行路径,然后从当前的环境中释放出违例对象的句柄。

3)                          违例控制机制接管一切,并开始查找一个恰当的地方,用于继续程序的执行。

三、     违例的捕获

1、   违例控制器

try {
  
  
  // Code that might generate exceptions
  
  
} catch(Type1 id1) {
  
  
  // Handle exceptions of Type1
  
  
} catch(Type2 id2) {
  
  
  // Handle exceptions of Type2
  
  

2、   违例的声明

1)        如果方法产生违例必须声明

2)        方法名 throws异常名1,异常名2{}

3)        可以声明一个并没有真正抛出的违例

3、   捕获所有违例

try{

}catch(Exception e) { }

例:ExceptionMethods.java

4、   重新出违例

try{

}catch(Type1 id1) {

//

throw id1;

重新出一个不同的违例;

}

例:Rethrowing.javaRethrowNew.java
  
  

四、     标准Java违例

1、   hrowable对象有两种常规子类(Error类代表编译期和系统错误,Exception类是可以从任何标准Java库的类方法中出的基本类型)我们一般不必特意捕获它们(除在特殊情况以外)。

2、   方法抛出RuntimeException违例,不需要声明。假若一个RuntimeException获得到达main()的所有途径,同时不被捕获,那么当程序退出时,会为那个违例调用printStackTrace()

五、 创建自己的违例

1、   建自己的违例类,必须从一个现有的违例类型继承——最好在含义上与新违例近似。

例:Inheriting.javaInheriting2.java
   
   

六、 违例的限制

1、子类覆盖父类的一个方法时,只能产生比父类中该方法定义的违例少的违例。对违例的限制并不适用于构建器。

2、衍生类构建器必须在自己的违例规范中声明所有基础类构建器违例。

例:StormyInning.java
    
    

七、finally清除

1、   无论是否出一个违例,finally从句都会执行。

try {
//
要保卫的区域:
//
可能A,B,C的危险情况
} catch (A a1) {
//
控制器 A
} catch (B b1) {
//
控制器 B
} catch (C c1) {
//
控制器 C
} finally {
//
每次都会发生的情况
}

2、   finally做什么

例:OnOffSwitch.javaWithFinally.javaAlwaysFinally.java
  
  

3、   缺点:丢失的违例

例:LostMessage.java
  
  

八、 构造方法

构造方法一旦产生违例,会正确地进行清除吗?例:Cleanup.java
   
   

九、 违例匹配

1.             出一个违例后,违例控制系统会按当初编写的顺序搜索最接近的控制器。一旦找到相符的控制器,就认为违例已得到控制,不再进行更多的搜索工作。
  
  
2.             在违例和它的控制器之间,并不需要非常精确的匹配。一个衍生类对象可与基础类的一个控制器相配。例:Human.java
  
  

十、 违例准则

用违例做下面这些事情:
(1)
解决问题并再次调用造成违例的方法。
(2)
平息事态的发展,并在不重新尝试方法的前提下继续。
(3)
计算另一些结果,而不是希望方法产生的结果。
(4)
在当前环境中尽可能解决问题,以及将相同的违例重新出一个更高级的环境。
(5)
在当前环境中尽可能解决问题,以及将不同的违例重新出一个更高级的环境。
(6)
中止程序执行。
(7)
简化编码。若违例方案使事情变得更加复杂,那就会令人非常烦恼,不如不用。
(8)
使自己的库和程序变得更加安全。这既是一种短期投资(便于调试),也是一种长期投资(改善应用程序的健壮性)

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值