当前位置:  技术问答>java相关

这几句话什么意思啊?

    来源: 互联网  发布时间:2015-09-17

    本文导语:  throw new java.util.NoSuchElementException(); throw new java.lang.NullPointerException();  throw 是什么意思啊? 他起什么作用啊? | 抛出异常 9.1 基本违例 “违例条件”表示在出现什么问题的时候应中止...

throw new java.util.NoSuchElementException();
throw new java.lang.NullPointerException(); 


throw 是什么意思啊? 他起什么作用啊?

|
抛出异常

9.1 基本违例
“违例条件”表示在出现什么问题的时候应中止方法或作用域的继续。为了将违例条件与普通问题区分开,违例条件是非常重要的一个因素。在普通问题的情况下,我们在当地已拥有足够的信息,可在某种程度上解决碰到的问题。而在违例条件的情况下,却无法继续下去,因为当地没有提供解决问题所需的足够多的信息。此时,我们能做的唯一事情就是跳出当地环境,将那个问题委托给一个更高级的负责人。这便是出现违例时出现的情况。
一个简单的例子是“除法”。如可能被零除,就有必要进行检查,确保程序不会冒进,并在那种情况下执行除法。但具体通过什么知道分母是零呢?在那个特定的方法里,在我们试图解决的那个问题的环境中,我们或许知道该如何对待一个零分母。但假如它是一个没有预料到的值,就不能对其进行处理,所以必须产生一个违例,而非不顾一切地继续执行下去。
产生一个违例时,会发生几件事情。首先,按照与创建Java对象一样的方法创建违例对象:在内存“堆”里,使用new来创建。随后,停止当前执行路径(记住不可沿这条路径继续下去),然后从当前的环境中释放出违例对象的句柄。此时,违例控制机制会接管一切,并开始查找一个恰当的地方,用于继续程序的执行。这个恰当的地方便是“违例控制器”,它的职责是从问题中恢复,使程序要么尝试另一条执行路径,要么简单地继续。
作为产生违例的一个简单示例,大家可思考一个名为t的对象句柄。有些时候,程序可能传递一个尚未初始化的句柄。所以在用那个对象句柄调用一个方法之前,最好进行一番检查。可将与错误有关的信息发送到一个更大的场景中,方法是创建一个特殊的对象,用它代表我们的信息,并将其“掷”(Throw)出我们当前的场景之外。这就叫作“产生一个违例”或者“掷出一个违例”。下面是它的大概形式:
if(t == null)
throw new NullPointerException();
这样便“掷”出了一个违例。在当前场景中,它使我们能放弃进一步解决该问题的企图。该问题会被转移到其他更恰当的地方解决。准确地说,那个地方不久就会显露出来。

9.1.1 违例自变量
和Java的其他任何对象一样,需要用new在内存堆里创建违例,并需调用一个构建器。在所有标准违例中,存在着两个构建器:第一个是默认构建器,第二个则需使用一个字串自变量,使我们能在违例里置入相关信息:
if(t == null)
throw new NullPointerException("t = null");
稍后,字串可用各种方法提取出来,就象稍后会展示的那样。
在这儿,关键字throw会象变戏法一样做出一系列不可思议的事情。它首先执行new表达式,创建一个不在程序常规执行范围之内的对象。而且理所当然,会为那个对象调用构建器。随后,对象实际会从方法中返回——尽管对象的类型通常并不是方法设计为返回的类型。为深入理解违例控制,可将其想象成另一种返回机制——但是不要在这个问题上深究,否则会遇到麻烦。通过“掷”出一个违例,亦可从原来的作用域中退出。但是会先返回一个值,再退出方法或作用域。
但是,与普通方法返回的相似性到此便全部结束了,因为我们返回的地方与从普通方法调用中返回的地方是迥然有异的(我们结束于一个恰当的违例控制器,它距离违例“掷”出的地方可能相当遥远——在调用堆栈中要低上许多级)。
此外,我们可根据需要掷出任何类型的“可掷”对象。典型情况下,我们要为每种不同类型的错误“掷”出一类不同的违例。我们的思路是在违例对象以及挑选的违例对象类型中保存信息,所以在更大场景中的某个人可知道如何对待我们的违例(通常,唯一的信息是违例对象的类型,而违例对象中保存的没什么意义)。

9.2 违例的捕获
若某个方法产生一个违例,必须保证该违例能被捕获,并获得正确对待。对于Java的违例控制机制,它的一个好处就是允许我们在一个地方将精力集中在要解决的问题上,然后在另一个地方对待来自那个代码内部的错误。
为理解违例是如何捕获的,首先必须掌握“警戒区”的概念。它代表一个特殊的代码区域,有可能产生违例,并在后面跟随用于控制那些违例的代码。

9.2.1 try块
若位于一个方法内部,并“掷”出一个违例(或在这个方法内部调用的另一个方法产生了违例),那个方法就会在违例产生过程中退出。若不想一个throw离开方法,可在那个方法内部设置一个特殊的代码块,用它捕获违例。这就叫作“try块”,因为要在这个地方“尝试”各种方法调用。try块属于一种普通的作用域,用一个try关键字开头:

try {
// 可能产生违例的代码
}

若用一种不支持违例控制的编程语言全面检查错误,必须用设置和错误检测代码将每个方法都包围起来——即便多次调用相同的方法。而在使用了违例控制技术后,可将所有东西都置入一个try块内,在同一地点捕获所有违例。这样便可极大简化我们的代码,并使其更易辨读,因为代码本身要达到的目标再也不会与繁复的错误检查混淆。



    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Developer studio什么意思?create new class 什么意思?
  • 哪个高个帮看看这个是什么意思啊,尤其是那个||'/'是什么意思啊?详细点啊,高人们
  • 请问“门户网站”具体的意思是什么意思?
  • ZOD-dvd-x86_64.iso中的ZOD是什么意思?Final zod又是什么意思?
  • 请问下 echo $? 是什么意思? “?”代表什么意思?
  • O_CREAT 中的CREATE是创建的意思 那么O_TRUNC中的TRUNC是什么意思,是什么单词的缩写么?
  • smit是什么意思??lsattr其中attr有是什么意思??谢谢
  • 虽然是菜鸟,但在过年这个节骨眼上,也该送点分意思意思,来者有份(明天中午结贴)
  • redhat9下./命令代表什么意思?.命令又代表什么意思?
  • 有高手能破解RAR的密码吗,至今没有找到人能解决?(先只给10分意思意思,若解决,至少给解决的人500分!说话算话!)
  • 这里的参数是什么意思哦?
  • Serializable?使用和意思?在thinking in java里面看了半天一天也没有明白什么意思!谢谢高手大虾了
  • 各位,unix下编程有意思吗?
  • gcc的编译选项中 -I.和-I./; -L.和-L./ 是同一个意思吗?
  • 在makefile文件中,@$符号代表什么意思?急,再线等待啊!
  • Blueprint是什麼意思?
  • -lposix4 是什么意思?(solaris 下) HP下有什么和他对应的么?
  • 什么意思,看不懂linux的代码
  • ./ 是什么意思?
  • $< 是什么意思?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3