throwable,throwable类
throwable和Exception的区别(详细一点)
throwable和exception的区别:
1、throwable是父类,exception是子类。
2、throwable是根基,exception是从throwable派生出来的。
3、throwable中包括exception(异常)和error(错误)。
4、throwable用来定义所有可以作为异常被抛出来的类,exception专指程序本身可以处理的异常,一般性的异常。
在Java程序中,所有异常对象的根基类是Throwable,Throwable从Object直接继承而来(这是Java系统所强制要求的)。Throwable有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。
扩展资料:
Error(错误)是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时?JVM(Java 虚拟机)出现的问题。Exception(异常)是程序本身可以处理的异常。
Error是一种严重的问题,应用程序不应该捕捉它。?Exception一般可能是程序和业务上的错误,是可以恢复的。
throwable是类还是接口,请详细解释一下,谢谢!
Throwable 类是 Java 语言中所有错误或异常的超类。有两个子类:
Error, Exception
所以throwable是类
Throwable的子类都有哪些?
有两个子类 :
一、Error
二、Exception
throwable和Exception的区别:
一、Throwable 类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。
二、两个子类的实例,Error 和 Exception,通常用于指示发生了异常情况。通常,这些实例是在异常情况的上下文中新近创建的,因此包含了相关的信息(比如堆栈跟踪数据)。
三、Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。
有Throwable,为什么还要Exception
抛出的可以是错误,异常。有些是可预料的,有些不可预料的,有些是可恢复的有些是不可恢复的。
比如一般 Error 这种就是不可恢复的错误,也就是说你再试一次很可能还得到完全相同的错误。而 exception 就不一定。
这里 Error 就表示是一个错误,不是个意外。
同时 RuntimeException 和它的子类也其它的 exception 又略有不同。runtime exception 是指这个异常很可能经常出现而如果你的程序做到位可能就不出现了,程序员应该自己明确这点,把事情处理的到位,哪怕在方法的签名中你没有指出这点,我们也应该尽可能在各个环节中意识到可能有这样的问题,就算我们意义到参数不正常我们依然可以抛出 runtime exception 去告诉使用者这些问题,这些异常给了我们方法调用的第2种退出方式。
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 对象,这样能更好地记录问题真正的原因。
关于成链异常Throwable构造函数的问题.
楼主是不是想要做自定义异常?
代码错误主要在于这句:NullPointerException x = new NullPointerException(s) ;
虽然NullPointerException间接继承与Throwable,可是,NullPointerException 本身只有两个构造函数,public NullPointerException() {super();}和 public NullPointerException(String s) {super(s);},所以,你这样的写法是会报错的。
如果只是想要获取“call Ari”这个异常的话,你可以这样写:
class a{
static ArithmeticException s = new ArithmeticException("call Ari");
static void shifang() {
NullPointerException x = new NullPointerException(s.getMessage());
throw x;
}
}
public class test {
public static void main(String args[]) {
try {
a.shifang();
} catch (Exception o) {
System.out.println(o.toString());
}
}
}
希望能帮到你