作家
登录

Java异常的深入研究与分析

作者: 来源: 2017-06-06 13:00:49 阅读 我要评论

留意:覆盖父类某办法的子类办法不克不及抛出比父类办法更多的异常,所以,有时设计父类的办法时会声明抛出异常,但实际的实现办法的代码却并不抛出异常,如许做的目标就是为了便利子类办法覆盖父类办法时可以抛出异常。

媒介

为什么抛出的异常必定是已检查异常?RuntimeException与Error可以在任何代码中产生,它们不须要由法度榜样员显示的抛出,一旦出现缺点,那么响应的异常会被主动抛出。碰到Error,法度榜样员一般是力所不及的;碰到RuntimeException,那么必定是法度榜样存在逻辑缺点,要对法度榜样进行修改;只有已检查异常才是法度榜样员所关怀的,法度榜样应当且仅应当抛出或处理已检查异常。罢了检查异常是由法度榜样员抛出的,这分为两种情况:客户法度榜样员调用会抛出异常的库函数;客户法度榜样员本身应用throw语句抛出异常。

本文是异常内容的集大年夜成者,力争周全,深刻的异常常识研究与分析。本文由金丝燕网独家撰写,参考浩瀚网上资本,经由内容辨别弃取,文字格局校验等步调编辑而成,以飨读者。对于本文的内容,建议小白须要多多思虑力争控制,对于熟手在行只需领悟温故知新。对于本文的内容,属于基本常识研究范畴,切勿认为读完此文就能将异常常识控制到家。切记:操千曲而后晓声,不雅千剑而后识器,所以我认为没有大年夜量的源码浏览经验,你很难知道什么时刻须要自定义异常,什么时刻须要抛出异常。

异常机制概述

异常机制是指当法度榜样出现缺点后,法度榜样若何处理。具体来说,异常机制供给了法度榜样退出的安然通道。当出现缺点后,法度榜样履行的流程产生改变,法度榜样的┞菲握权转移到异常处理器。

异常处理的流程

当法度榜样中抛出一个异常后,法度榜样大年夜法度榜样中导致异常的代码处彪炳,java虚拟机检测寻找和try关键字匹配的处理该异常的catch块,如不雅找到,将控制权交到catch块中的代码,然后持续往下履行法度榜样,try块中产生异常的代码不会被从新履行。如不雅没有找到处理该异常的catch块,在所有的finally块代码被履行和当前哨程的所属的ThreadGroup的uncaughtException办法被调用后,碰到异常的当前哨程被中断。

异常的构造

异常的持续构造:Throwable为基类,Error和Exception持续Throwable,RuntimeException和IOException等持续Exception。Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。

Error异常

Error表示法度榜样在运行时代出现了十分严重、弗成恢复的缺点,在这种情况下应用法度榜样只能中断运行,例如JAVA 虚拟机出现缺点。Error是一种unchecked Exception,编译器不会检查Error是否被处理,在法度榜样中不消捕获Error类型的异常。一般情况下,在法度榜样中也不该该抛出Error类型的异常。

RuntimeException异常

Exception异常包含RuntimeException异常和其他非RuntimeException的异常。RuntimeException 是一种Unchecked Exception,即表示编译器不会检检法度榜样是否对RuntimeException作了处理,在法度榜样中不必捕获RuntimException类型的异常,也不必在办法体声明抛出RuntimeException类。RuntimeException产生的时刻,表示法度榜样中出现了编程缺点,所以应当找掉足误修改法度榜样,而不是去捕获RuntimeException。

Checked Exception异常

Checked Exception异常,这也是在编程中应用最多的Exception,所有持续自Exception并且不是RuntimeException的异常都是checked Exception,上图中的IOException和ClassNotFoundException。JAVA 说话规定必须对checked Exception作处理,编译器会对此作检查,要么在办法体中声明抛出checked Exception,要么应用catch语句捕获checked Exception进行处理,不然不克不及经由过程编译。

在声明办法时刻抛出异常

语法:throws(略)

为什么要在声明办法抛出异常?

办法是否抛出异常与办法返回值的类型一样重要。假设办法抛出异常却没有声明该办法将抛出异常,那么客户法度榜样员可声调用这个办法并且不消编写处理异常的代码。那么,一旦出现异常,那么这个异常就没有合适的异常控制器来解决。

在办法中若何抛出异常

语法:throw(略)抛出什么异常?

对于一个异常对象,真正有效的信息是异常的对象类型,而异常对象本身毫无意义。比如一个异常对象的类型是ClassCastException,那么这个类名就是独一有效的信息。所以,在选择抛出什么异常时,最症桨?酵是选择异常的类名可以或许明白解释异常情况的类。

java.lang.NullPointerException

异常对象平日有两种构造函数:一种是无参数的构造函数;另一种是带一个字符串的构造函数,这个字符串将作为这个异常对象除潦攀类型名以外的额外解释。

为什么要创建本身的异常?

当Java内置的异常都不克不及明白的解释异常情况的时刻,须要创建本身的异常。须要留意的是,独一有效的就是类型名这个信息,所以不要在异常类的设计上花费精力。

throw和throws的差别

(2) 在try块中抛出异常。

  1. public class TestThrow 
  2.  
  3.     public static void main(String[] args) 
  4.     { 
     1/5    1 2 3 4 5 下一页 尾页

      推荐阅读

      开源要「开」得安全高效:开源云计算的五大发展趋势

    编者按:以前几年,开辟者几乎都邑用到开源。开源现象日益广泛,有赖于业内人士的聪明和尽力。不过,更重要的┞氛样开源本身的优势:可以或许随便马虎整合多种多样的开源解决筹划。在业内>>>详细阅读


    本文标题:Java异常的深入研究与分析

    地址:http://www.17bianji.com/lsqh/35587.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)