throwable类,JAVA 中 Throwable是所有异常类的祖先 对吗???
throwable类,JAVA 中 Throwable是所有异常类的祖先 对吗???详细介绍
本文目录一览: throwable和Exception的区别(详细一点)
1、Throwable是java.lang包中一个专门用来处理异常的类。它有两个子类,即Error 和Exception,它们分别用来处理两组异常。
2、Throwable类是整个异常体系类的“父级类”,当然最终追根溯源到底的父类当然要归于Object类。
Throwable类实现了Serializable接口,表示Throwable可以进行序列化,继承自Object类,他的子类主要是Error和Exception类还有一个StackRecorder类。
3、Exception是Throwable的一个主要子类。Exception下面还有子类,其中一部分子类分别对应于Java程序运行时常常遇到的各种异常的处理,其中包括隐式异常。
比如,程序中除数为0引起的错误、数组下标越界错误等,这类异常也称为运行时异常,因为它们虽然是由程序本身引起的异常,但不是程序主动抛出的,而是在程序运行中产生的。
4、子类Error和Exception
Exception 则表示一般性的异常,而且这种异常是设计中早已考虑到很常见的错误,并且一定要求在设计中说明如果处理这种异常。
Error主要是用于表示Java和虚拟机内部的异常信息,而Exception异常则是由于程序中可能存在各种的问题,是需要使用者去注意和捕获的异常。
扩展资料
子类Error和Exception
Exception 则表示一般性的异常,而且这种异常是设计中早已考虑到很常见的错误,并且一定要求在设计中说明如果处理这种异常。
Error主要是用于表示Java和虚拟机内部的异常信息,而Exception异常则是由于程序中可能存在各种的问题,是需要使用者去注意和捕获的异常。
参考资料:百度百科—Exception
所有异常类皆继承哪一个类
java.lang.Throwable类。在Java中,所有异常类都继承自java.lang.Throwable类,它是Java中所有错误和异常的父类。Throwable类有两个重要的子类:Error和Exception。Error类表示Java运行时系统的内部错误和资源耗尽错误,程序一般无法处理此类错误;Exception类则表示程序运行过程中可能出现的异常情况,可以通过程序进行处理和捕获。Exception类又分为两类:可检查异常(checkedexception)和不可检查异常(uncheckedexception)。可检查异常需要在代码中进行捕获和处理,而不可检查异常一般是由程序逻辑错误或者其他无法预料的错误导致的,程序无法处理此类异常。
Throwable的子类都有哪些?
有两个子类 :
一、Error
二、Exception
throwable和Exception的区别:
一、Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。
二、两个子类的实例,Error 和 Exception,通常用于指示发生了异常情况。通常,这些实例是在异常情况的上下文中新近创建的,因此包含了相关的信息(比如堆栈跟踪数据)。
三、Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。
throwable是类还是接口,请详细解释一下,谢谢!
可能是个借口吧。
Throwable 类是 Java 语言中所有错误或异常的超类。有两个子类:
Error, Exception
所以throwable是类
catch,Throwable或Exception,有什么区别??
catch
n.捕捉,陷阱,捕获物
v.抓住;赶上,了解,感染
Throwable 可投掷的
exception n.例外
Please read:
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 等.,1,catch,Throwable或Exception,有什么区别?
I think I was asking about the java-Programming language instead of English,okay?
JAVA 中 Throwable是所有异常类的祖先 对吗???
Throwable 类是 Java 语言中所有错误和异常类的父类。 仅当对象是该类的实例 (或它子类的一个实例)时被 Java Virtual Machine 抛出或被 Java throw 语句抛出。 相似地,只有这个类或它的一个子类能作为 catch 子句的参数。
Throwable是所有异常Exception和错误Error的祖先
常异常类的基类是java.lang.Exception。 相同点:java.lang.Error和java.lang.Exception都是java.lang.Throwable的子类,因此java.lang.Error和java.lang.Exception自身及其子类都可以作为throw的使用对象,如:throw new MyError();和throw new MyException();其中,MyError类是java.lang.Error的子类,MyException类是java.lang.Exception的子类。 不同点:java.lang.Error自身及其子类不需要try-catch语句的支持,可在任何时候将返回方法,如下面的方法定义: public String myMethod() { throw new MyError(); } 其中MyError类是java.lang.Error类的...
记得好像所有的类都是object的子类...
拜托,以后请先看JDK.
public class Throwable extends Object implements Serializable
Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。 两个子类的实例,Error 和 Exception,通常用于指示发生了异常情况。通常,这些实例是在异常情况的上下文中新近创建的,因此包含了相关的信息(比如堆栈跟踪数据)。
Throwable的使用
使用Throwable一个很大的好处在于,他能保存他被实例化的方法的堆栈信息,通过方法:
可以将他和他的cause Throwable和他的cause的cause...( 递归 ) 的堆栈信息都打印出来。
而例如我们要将一个Throwable对象的堆栈信息不仅仅是输出到控制台,还要保存到本地日志或者发送到服务器呢?那么就要将Throwable的堆栈信息提取出来。
令人开心的是, android.util.Log 类提供了这么一个工具方法:
通过该方法,可以直接把 Throwable 对象的堆栈信息都拿出来了。
他有4个构造方法。每个构造方法都会调用 fillInStackTrace() 来记录当前的堆栈信息。
只有两个参数可选:String类型的message,和他的cause Throwable。
那么现在来看一下这两个变量对Throwable有什么用,以及对我们来说有什么意义。
先说结论: detailMessage 和 cause 变量在调用 printStackTrace() 的时候都会被打印出来。
看下 printStackTrace()
看下 toString 是如何包含 message 进来的:
看下打印cause:
可以发现, printEnclosedStackTrace() 方法中又调用了 getCause() 和 printEnclosedStackTrace() ,那么其实就是一个递归,直到递归到最根源的那个cause。
那么当我们要构造一个 Throwable 对象的时候,如果上下文中有一个关联的 Throwable ,那么把他作为cause参数来构造新的 Throwable 对象,这样能更好地记录问题真正的原因。
java中异常与错误有什么区别
错误:程序你运行不了
异常:程序运行到异常那一行会终止,并报出异常,除非你处理了
在Java.lang软件包中有一个java.lang.Throwable类,这个类是java中所有错误和异常的超类。
顾名思义,这个类(以及子类)的实例可以通过JVM或者java的throw语句抛出。而catch子句的参数也只能是Throwable类型(或者其子类型)。
Throwable类有两个子类,Error与 Exception。
错误与异常都是在程序编译和运行时出现的错误。不同的是,异常可以被开发人员捕捉和处理;而错误一般是系统错误,一般不需要开发人员处理(也无法处理),比如内存溢出。
Exception是java中所有异常的基类。在java中异常被分为两大类,编译时异常和运行时异常。
编译时异常是由于外在条件不满足而引发的,比如程序视图打开一个并不存在的远程Socket端口。这种异常是可预知的。编译器强制要求对编译时异常进行捕获或声明。
运行时异常往往是系统错误,比如数组下标越界等。通常我们可以不做处理,系统会把它们交给缺省的异常处理程序。有人说在运行时异常出现后,异常会被一层层向上抛直到找到处理代码,如果我们没有处理运行时异常,异常会被抛到最上层然后抛出,从而导致最上层程序或线程退出。
Error是java中所有错误的基类。错误通常是我们无法处理的,绝大多数情况下,我们不应该试图捕获错误。
java中错误(error)和异常(exception)有什么主要区别?
Error(错误)表示系统级的错误和程序不必处理的异常,一般是指与虚拟机相关的问题,是java运行环境中的内部错误或者硬件问题。比如:内存资源不足等。对于这种错误,程序基本无能为力,除了退出运行外别无选择,它是由Java虚拟机抛出的。
Exception(违例)表示需要捕捉或者需要程序进行处理的异常,它处理的是因为程序设计的瑕疵而引起的问题或者在外的输入等引起的一般性问题,是程序必须处理的。
Exception又分为运行时异常,受检查异常。
运行时异常,表示无法让程序恢复的异常,导致的原因通常是因为执行了错误的操作,建议终止程序,因此,编译器不检查这些异常。
受检查异常,是表示程序可以处理的异常,也即表示程序可以修复(由程序自己接受异常并且做出处理), 所以称之为受检查异常。
Error 表示仅靠程序本身无法恢复的严重错误,比如说内存溢出、动态链接异常、虚拟机错误。应用程序不应该抛出这种类型的对象。假如出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以在进行程序设计时,应该更关注Exception类。
Exception 由Java应用程序抛出和处理的非严重错误,比如所需文件没有找到、零作除数,数组下标越界等。它的各种不同子类分别对应不同类型异常。
Exception可分为两类:CheckedException 和 RuntimeException
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 var15) {((Throwable)var4).addSuppressed(var15);}} else {writer.close();}}} catch (Throwable var16) {var2 = var16; throw var16;} finally { if (br != null) { if (var2 != null) { try {br.close();} catch (Throwable var14) {var2.addSuppressed(var14);}} else {br.close();}}}} catch (IOException var18) {;}}
异常处理的两个基本原则
尽量不要捕获类似 Exception 这样的通用异常,而是应该捕获特定异常
这是因为在日常的开发和合作中,我们读代码的机会往往超过写代码,软件工程是门协作的艺术,所以我们有义务让自己的代码能够直观地体现出尽量多的信息,而泛泛的 Exception 之类,恰恰隐藏了我们的目的。另外,我们也要保证程序不会捕获到我们不希望捕获的异常。比如,你可能更希望 RuntimeException 被扩散出来,而不是被捕获。
不要生吞(swallow)异常。这是异常处理中要特别注意的事情,因为很可能会导致非常难以诊断的诡异情况。
如果我们不把异常抛出来,或者也没有输出到日志(Logger)之类,程序可能在后续代码以不可控的方式结束。没人能够轻易判断究竟是哪里抛出了异常,以及是什么原因产生了异常。
在写程序时可以通过Objects类(jdk提供),或者断言等提前判断问题,如空指针异常的一些值的处理Objects. requireNonNull(filename);而不是使用之后有问题再系统抛出异常,这可能就会不直观的找到问题所在。即:Throw early, catch late 原则
希望对您有所帮助!~
Throwable怎么读啊 java里的所有的子类啊
Throwable是java.lang包中一个专门用来处理异常的类。它有两个子类,即Error 和Exception,它们分别用来处理两组异常。
eclipse里面有一个功能叫查看继承层次,快捷键是ctrl + t
Java 异常结构
异常时程序运行过程中产生的错误。
异常处理框架时java语言健壮性的一个重要体现。
Java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。
在java API中已定义了许多异常类,这些异常类分为两大类,错误类Error和异常Exception。
Java异常体系结构呈树状,其层次结构如图:
Thorwable类所有异常和错误的超类,有两个子类Error和exception,分别表示错误和异常。
其中异常类Exception又分为运行时异常(RuntimeException)和检查异常(Checked Exception)。
两者的区别:
Error和Exception
Error是程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等。这些异常发生时,java虚拟机(JVM)一般会选择线程终止。
Exception是程序本身可以处理的异常,这种异常分两大类:运行时异常和非运行时异常。程序中应当尽可能去处理这些异常。
运行时异常和非运行时异常
运行时异常都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是有程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
非运行时异常是RuntimeException以外的异常,类型上属于Exception类及其子类。从程序角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下自定义检查异常。