易网时代-编程资源站
Welcome
首页
/
软件开发
/
JAVA
违例自变量
2017-02-06
21
违例自变量2007-05-28 yycnet.yeah.net yyc译和Java的其他任何对象一样,需要用new在内存堆里创建违例,并需调用一个构建器。在所有标准违例中,存在着两个构建器:第一个是默认构建器,第二个则需使用一个字串自变量,使我们能在违例里置入相关信息:if(t == null)throw new NullPointerException("t = null");稍后,字串可用各种方法提取出来,就象稍后会展示的那样。在这...
try块
2017-02-06
18
try块2007-05-28 yycnet.yeah.net yyc译9.2.1 try块若位于一个方法内部,并“掷”出一个违例(或在这个方法内部调用的另一个方法产生了违例),那个方法就会在违例产生过程中退出。若不想一个throw离开方法,可在那个方法内部设置一个特殊的代码块,用它捕获违例。这就叫作“try块”,因为要在这个地方“尝试”各种方法调用。try块属于一种普通的作用域,用一个...
违例控制器
2017-02-06
21
违例控制器2007-05-28 yycnet.yeah.net yyc译当然,生成的违例必须在某个地方中止。这个“地方”便是违例控制器或者违例控制模块。而且针对想捕获的每种违例类型,都必须有一个相应的违例控制器。违例控制器紧接在try块后面,且用catch(捕获)关键字标记。如下所示:try {// Code that might generate exceptions} catch(Type1 id1) {// Handle ex...
java的违例规范
2017-02-06
19
java的违例规范2007-05-28 yycnet.yeah.net yyc译在Java中,对那些要调用方法的客户程序员,我们要通知他们可能从自己的方法里“掷”出违例。这是一种有礼貌的做法,只有它才能使客户程序员准确地知道要编写什么代码来捕获所有潜在的违例。当然,若你同时提供了源码,客户程序员甚至能全盘检查代码,找出相应的throw语句。但尽管如此,通常并不随同源码提供库。为解决这个问题,Java提供了一种特殊的语法格式(并强迫我...
捕获所有违例
2017-02-06
19
捕获所有违例2007-05-28 yycnet.yeah.net yyc译我们可创建一个控制器,令其捕获所有类型的违例。具体的做法是捕获基础类违例类型Exception(也存在其他类型的基础违例,但Exception是适用于几乎所有编程活动的基础)。如下所示:catch(Exception e) {System.out.println("caught an exception");}这段代码能捕获任何违例,所以在实际使用时最好将其置于控...
重新“掷”出违例
2017-02-06
21
重新“掷”出违例2007-05-28 yycnet.yeah.net yyc译在某些情况下,我们想重新掷出刚才产生过的违例,特别是在用Exception捕获所有可能的违例时。由于我们已拥有当前违例的句柄,所以只需简单地重新掷出那个句柄即可。下面是一个例子:catch(Exception e) {System.out.println("一个违例已经产生");throw e;}重新“掷”出一个违例导致违例进入更高一级...
标准Java违例
2017-02-06
20
标准Java违例2007-05-28 yycnet.yeah.net yyc译Java包含了一个名为Throwable的类,它对可以作为违例“掷”出的所有东西进行了描述。Throwable对象有两种常规类型(亦即“从Throwable继承”)。其中,Error代表编译期和系统错误,我们一般不必特意捕获它们(除在特殊情况以外)。Exception是可以从任何标准Java库的类方法中“掷”...
RuntimeException的特殊情况
2017-02-06
21
RuntimeException的特殊情况2007-05-28 yycnet.yeah.net yyc译本章的第一个例子是:if(t == null)throw new NullPointerException();看起来似乎在传递进入一个方法的每个句柄中都必须检查null(因为不知道调用者是否已传递了一个有效的句柄),这无疑是相当可怕的。但幸运的是,我们根本不必这样做——它属于Java进行的标准运行期检查的一部分。若对一个空句柄发...
创建自己的违例
2017-02-06
22
创建自己的违例2007-05-28 yycnet.yeah.net yyc译并不一定非要使用Java违例。这一点必须掌握,因为经常都需要创建自己的违例,以便指出自己的库可能生成的一个特殊错误——但创建Java分级结构的时候,这个错误是无法预知的。为创建自己的违例类,必须从一个现有的违例类型继承——最好在含义上与新违例近似。继承一个违例相当简单://: Inheriting.java// Inheriting ...
java违例的限制
2017-02-06
20
java违例的限制2007-05-28 yycnet.yeah.net yyc译覆盖一个方法时,只能产生已在方法的基础类版本中定义的违例。这是一个重要的限制,因为它意味着与基础类协同工作的代码也会自动应用于从基础类衍生的任何对象(当然,这属于基本的OOP概念),其中包括违例。下面这个例子演示了强加在违例身上的限制类型(在编译期)://: StormyInning.java// Overridden methods may throw only the //...
用finally清除违例
2017-02-06
19
用finally清除违例2007-05-28 yycnet.yeah.net yyc译无论一个违例是否在try块中发生,我们经常都想执行一些特定的代码。对一些特定的操作,经常都会遇到这种情况,但在恢复内存时一般都不需要(因为垃圾收集器会自动照料一切)。为达到这个目的,可在所有违例控制器的末尾使用一个finally从句(注释④)。所以完整的违例控制小节象下面这个样子:try {// 要保卫的区域:// 可能“掷”出A,B,或C的危险情...
用finally做什么
2017-02-06
21
用finally做什么2007-05-28 yycnet.yeah.net yyc译在没有“垃圾收集”以及“自动调用破坏器”机制的一种语言中(注释⑤),finally显得特别重要,因为程序员可用它担保内存的正确释放——无论在try块内部发生了什么状况。但Java提供了垃圾收集机制,所以内存的释放几乎绝对不会成为问题。另外,它也没有构建器可供调用。既然如此,Java里何时才会用到fina...
缺点:丢失的违例
2017-02-06
20
缺点:丢失的违例2007-05-28 yycnet.yeah.net yyc译一般情况下,Java的违例实施方案都显得十分出色。不幸的是,它依然存在一个缺点。尽管违例指出程序里存在一个危机,而且绝不应忽略,但一个违例仍有可能简单地“丢失”。在采用finally从句的一种特殊配置下,便有可能发生这种情况://: LostMessage.java// How an exception can be lostclass VeryImpor...
构建器
2017-02-06
21
构建器2007-05-28 yycnet.yeah.net yyc译为违例编写代码时,我们经常要解决的一个问题是:“一旦产生违例,会正确地进行清除吗?”大多数时候都会非常安全,但在构建器中却是一个大问题。构建器将对象置于一个安全的起始状态,但它可能执行一些操作——如打开一个文件。除非用户完成对象的使用,并调用一个特殊的清除方法,否则那些操作不会得到正确的清除。若从一个构建器内部“掷”出...
违例匹配
2017-02-06
24
违例匹配2007-05-28 yycnet.yeah.net yyc译“掷”出一个违例后,违例控制系统会按当初编写的顺序搜索“最接近”的控制器。一旦找到相符的控制器,就认为违例已得到控制,不再进行更多的搜索工作。在违例和它的控制器之间,并不需要非常精确的匹配。一个衍生类对象可与基础类的一个控制器相配,如下例所示://: Human.java// Catching Exception Hierarchiescl...
违例准则
2017-02-06
22
违例准则2007-05-28 yycnet.yeah.net yyc译用违例做下面这些事情:(1) 解决问题并再次调用造成违例的方法。(2) 平息事态的发展,并在不重新尝试方法的前提下继续。(3) 计算另一些结果,而不是希望方法产生的结果。(4) 在当前环境中尽可能解决问题,以及将相同的违例重新“掷”出一个更高级的环境。(5) 在当前环境中尽可能解决问题,以及将不同的违例重新“掷”出一个更高级的环境。(6) ...
Java的IO系统
2017-02-06
19
Java的IO系统2007-05-28 yycnet.yeah.net yyc译“对语言设计人员来说,创建好的输入/输出系统是一项特别困难的任务。”由于存在大量不同的设计方案,所以该任务的困难性是很容易证明的。其中最大的挑战似乎是如何覆盖所有可能的因素。不仅有三种不同的种类的IO需要考虑(文件、控制台、网络连接),而且需要通过大量不同的方式与它们通信(顺序、随机访问、二进制、字符、按行、按字等等)。Java库的设计者通过创建大量类来...
输入和输出
2017-02-06
21
输入和输出2007-05-28 yycnet.yeah.net yyc译可将Java库的IO类分割为输入与输出两个部分,这一点在用Web浏览器阅读联机Java类文档时便可知道。通过继承,从InputStream(输入流)衍生的所有类都拥有名为read()的基本方法,用于读取单个字节或者字节数组。类似地,从OutputStream衍生的所有类都拥有基本方法write(),用于写入单个字节或者字节数组。然而,我们通常不会用到这些方法;它们之所以存在,是因为更复...
java的InputStream的类型
2017-02-06
20
java的InputStream的类型2007-05-28 yycnet.yeah.net yyc译InputStream的作用是标志那些从不同起源地产生输入的类。这些起源地包括(每个都有一个相关的InputStream子类):(1) 字节数组(2) String对象(3) 文件(4) “管道”,它的工作原理与现实生活中的管道类似:将一些东西置入一端,它们在另一端出来。 (5) 一系列其他流,以便我们将其统一收集到单独一个流内。(6...
java的OutputStream的类型
2017-02-06
22
java的OutputStream的类型2007-05-28 yycnet.yeah.net yyc译这一类别包括的类决定了我们的输入往何处去:一个字节数组(但没有String;假定我们可用字节数组创建一个);一个文件;或者一个“管道”。除此以外,FilterOutputStream为“破坏器”类提供了一个基础类,它将属性或者有用的接口同输出流连接起来。这将在以后讨论。表10.2 OutputStream的类...
<<
11
12
13
14
15
16
17
18
19
20
>>
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图