欢迎来到皮皮网官网

【非凡赞源码系统】【源码资本投资案例分析】【短信接收平台源码失效】throwable 源码解析

时间:2024-12-30 03:16:02 来源:dgc源码

1.exception和error的区别
2.throwable和Exception的区别(详细一点)
3.exception和error区别
4.java中 异常类Exception(String message,码解 Throwable cause)
5.java中常见的异常类

throwable 源码解析

exception和error的区别

       1.如图Exception 和 Error都继承自Throwable类,由jdk api文档中对该类的描述可以知道它是异常处理机制的基本组成类型。可以由虚拟机抛出或者编码者自行抛出(throw)

       jdk8中文发翻译Throwable类的描述:Throwable类是Java语言中所有错误和异常的Throwable类。 只有作为此类(或其一个子类)的实例的对象由Java虚拟机抛出,或者可以由Java throw语句抛出。 类似地,只有这个类或其子类可以是catch子句中的参数类型。

       2.Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类。Exception 是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。

       3.Error 是指在正常情况下,不大可能出现的情况,绝大部分的 Error 都会导致程序(比如 JVM 自身)处于非正常的、不可恢复状态。既然是非正常情况,所以不便于也不需要捕获,常见的比如 OutOfMemoryError 之类,都是 Error 的子类。

       4.Exception 又分为可检查(checked)异常和不检查(unchecked)异常,可检查异常在源代码里必须显式地进行捕获处理,这是编译期检查的一部分。前面我介绍的不可查的 Error,是 Throwable 不是 Exception。

       å¦‚何处理这些异常?

       åœ¨çŽ°å®žç¼–程中我们一般使用 try-with-resources 和 multiple catch来进行一些异常处理(便利的特性),在编译时期,会自动生成相应的处理逻辑,比如,自动按照约定俗成 close 那些扩展了 AutoCloseable 或者 Closeable 的对象。

       try-with-resources 是一种处理Closeable实现类关闭资源的一种写法,简单写了一个例子可以发现其实这就是一中语法,这种语法可以自动编译帮忙编译最后关闭流的操作:

       public static void main(String[] args) {

       try (BufferedReader br = new BufferedReader(new FileReader("a"));

       BufferedWriter writer = new BufferedWriter(new FileWriter("a"))) {

       // Try-with-resources

       } catch (IOException e) { // Multiple catch

       // Handle it

       }

       }

       ç¼–译后class

       public static void main(String[] args) {        try {

       BufferedReader br = new BufferedReader(new FileReader("a"));

       Throwable var2 = null;            try {

       BufferedWriter writer = new BufferedWriter(new FileWriter("a"));

       Object var4 = null;                if (writer != null) {                    if (var4 != null) {                        try {

       writer.close();

       } catch (Throwable var) {

       ((Throwable)var4).addSuppressed(var);

       }

       } else {

       writer.close();

       }

       }

       } catch (Throwable var) {

       var2 = var;                throw var;

       } finally {                if (br != null) {                    if (var2 != null) {                        try {

       br.close();

       } catch (Throwable var) {

       var2.addSuppressed(var);

       }

       } else {

       br.close();

       }

       }

       }

       } catch (IOException var) {

       }

       }

       å¼‚常处理的两个基本原则

       å°½é‡ä¸è¦æ•èŽ·ç±»ä¼¼ Exception 这样的通用异常,而是应该捕获特定异常

       è¿™æ˜¯å› ä¸ºåœ¨æ—¥å¸¸çš„开发和合作中,我们读代码的机会往往超过写代码,软件工程是门协作的艺术,所以我们有义务让自己的代码能够直观地体现出尽量多的信息,而泛泛的 Exception 之类,恰恰隐藏了我们的目的。另外,我们也要保证程序不会捕获到我们不希望捕获的异常。比如,你可能更希望 RuntimeException 被扩散出来,而不是被捕获。

       ä¸è¦ç”Ÿåžï¼ˆswallow)异常。这是异常处理中要特别注意的事情,因为很可能会导致非常难以诊断的诡异情况。

       å¦‚果我们不把异常抛出来,或者也没有输出到日志(Logger)之类,程序可能在后续代码以不可控的方式结束。没人能够轻易判断究竟是哪里抛出了异常,以及是什么原因产生了异常。

       åœ¨å†™ç¨‹åºæ—¶å¯ä»¥é€šè¿‡Objectsç±»(jdk提供),或者断言等提前判断问题,如空指针异常的一些值的处理Objects. requireNonNull(filename);而不是使用之后有问题再系统抛出异常,这可能就会不直观的找到问题所在。即:Throw early, catch late 原则

       å¸Œæœ›å¯¹æ‚¨æœ‰æ‰€å¸®åŠ©ï¼~

throwable和Exception的区别(详细一点)

       catch

       n. 捕捉,陷阱,捕获物

       v. 抓住;赶上,了解,感染

       Throwable 可投掷的

       exception n. 例外

       Please read:

       /bbs/dispbbs.asp?boardid=&ID=&replyID=

       Java语言要求java程序中(无论是谁写的代码)所有抛出(throw)的异常都必须是从Throwable派生而来。当然,实际的Java编程中,由于JDK平台已经为我们设计好了非常丰富和完整的异常对象分类模型。因此,java程序员一般是不需要再重新定义自己的异常对象。而且即便是需要扩展自定义的异常对象,也往往会从Exception派生而来。所以,对于java程序员而言,它一般只需要在它的顶级函数中catch(Exception ex)就可以捕获出所有的异常对象。 所有异常对象的根基类是 Throwable ,Throwable从Object直接继承而来(这是java系统所强制要求的),并且它实现了 Serializable接口(这为所有的异常对象都能够轻松跨越Java组件系统做好了最充分的物质准备)。从Throwable直接派生出的异常类有Exception和Error 。Exception是java程序员所最熟悉的,它一般代表了真正实际意义上的异常对象的根基类。也即是说, Exception 和从它派生而来的所有异常都是应用程序能够catch到的,并且可以进行异常错误恢复处理的异常类型。而Error则表示Java系统中出现了一个非常严重的异常错误,并且这个错误可能是应用程序所不能恢复的,例如LinkageError ,或 ThreadDeath 等。

exception和error区别

       以java为例,其exception和error的码解区别如下:

       1、Exception和Error都继承了Throwable类,码解在java中只有Throwable类型的码解非凡赞源码系统实例才可以被抛出(Throw)或者捕捉(catch),它是码解异常处理机制的基本组成类型。Exception是码解源码资本投资案例分析程序正常运行中,可以预料的码解意外情况,可能并且应该被捕获,码解进行相应的码解处理。

       2、码解Error指在正常情况下,码解不大可能出现的码解情况,绝大部门的码解短信接收平台源码失效Error都会导致程序处于非正常的,不可恢复状态。码解既然是码解非正常情况,所以不便于也不需要捕获。外汇指标指标公式源码比如常见的OutOfMemoryError之类,都是Error的子类。

       Exception类又分为可检查异常(checked)和不检查异常(unchecked),直播源码网站注册不了可检查异常在源码里必须显示的进行捕获处理,这是编译期检查的一部分。不检查异常就是所谓的运行时异常,类似NullPointerException,ArrayIndexOutOfBoundsException之类,通常是可以编码避免的逻辑错误。

java中 异常类Exception(String message, Throwable cause)

       æ˜¯å¼•èµ·è¿™ä¸ªå¼‚常的异常,如果这个值是空值,那么这个异常就是源头;如果这个值等于自己,那么这个异常还没被初始化。

       ä¸‹é¢æ˜¯JDK中源码给出的注释,英语好的话一看就懂。

        /

**

        * The throwable that caused this throwable to get thrown, or null if this

        * throwable was not caused by another throwable, or if the causative

        * throwable is unknown. If this field is equal to this throwable itself,

        * it indicates that the cause of this throwable has not yet been

        * initialized.

       

*

        * @serial

        * @since 1.4

        */

java中常见的异常类

       ä»Žå¼‚常类的继承架构图中可以看出:Exception 类扩展出数个子类,其中 IOException、RunntimeException 是较常用的两种。

       ä¹ æƒ¯ä¸Šå°† Error 与 Exception 类统称为异常类,但这两者本质上还是有不同的。Error 类专门用来处理严重影响程序运行的错误,可是通常程序设计者不会设计程序代码去捕捉这种错误,其原因在于即使捕捉到它,也无法给予适当的处理,如 JAVA 虚拟机出错就属于一种 Error。

       ä¸åŒäºŽ Error 类,Exception 类包含了一般性的异常,这些异常通常在捕捉到之后便可做妥善的处理,以确保程序继续运行,如 TestException7_2 里所捕捉到的 ArrayIndexOutOfBoundsException 就是属于这种异常。

       RunntimeException 即使不编写异常处理的程序代码,依然可以编译成功,而这种异常必须是在程序运行时才有可能发生,例如:数组的索引值超出了范围。

       ä¸ŽRunntimeException 不同的是,IOException 一定要编写异常处理的程序代码才行,它通常用来处理与输入/输出相关的操作,如文件的访问、网络的连接等。

       å½“异常发生时,发生异常的语句代码会抛出一个异常类的实例化对象,之后此对象与 catch 语句中的类的类型进行匹配,然后在相应的 catch 中进行处理。

扩展资料:

       Java异常的分类:

       Java标准裤内建了一些通用的异常,这些类以Throwable为顶层父类。

       Throwable又派生出Error类和Exception类。

       é”™è¯¯ï¼šError类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。

       å¼‚常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。

       å‚考资料:百度百科-异常

copyright © 2016 powered by 皮皮网   sitemap