`
wtaoli
  • 浏览: 27789 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java.lang.Throwable

    博客分类:
  • J2SE
阅读更多
有几个现象是需要总结的:
--------------------------------------
在java语言中,错误类的基类是java.lang.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类的子类。

java.lang.Exception自身及其子类需要try-catch语句的支持,如下的方法定义是错误的:
public String myMethod() {
throw new MyException();
}
正确的方法定义如下:
public String myMethod() throws MyException {
throw new MyException();
}
其中MyException类是java.lang.Exception的子类。

----------------------------------------
1)如果代码中有一个地方发生了异常, 也就是Throwable被new出来的那个地方,由于Throwable的构造函数中直接调用了fillInStackTrace(), 那么Throwable会一步一步地追踪方法的调用,直到追踪到线程的终端, 例如,main线程的main()方法,其他的线程的run()方法。
2)fillInStackTrace是native方法,也只有native方法可以完成这样的代码追踪。
3)Throwable有一个方法setStackTrace()之外(注意到setStackTrace只是use by RPC frameworks and other advanced systems),也就是说setStackTrace()通常不会被应用程序用到。
4)跟setStackTrace()相反,StackTrace中的信息可以通过调用fillInStackTrace()方法来获得,此外还可以通过deserialize的方法来获得;可以看看它的writeObject()方法。
5)fillInStackTrace()方法返回的Throwable为this指针; 这样可以很方便的使用throw ex.fillInStackTrace();
--------------------------------------------
异常是当JVM(JAVA虚拟机)在执行应用程序的某个方法的时候遇到的非正常现象,JVM就会生成一个异常对象,抛给客户以便客户进行异常处理.Struts框架的异常处理机制建立在java异常处理的基础之上.在研究Struts异常处理之前,先回顾一下java异常处理原理,理解java虚拟机JVM的异常处理过程有助于应用设计正确的异常处理方法.处理异常需要JVM付出不小的开销,所以用于必须慎重使用.

JAVA异常是在java程序运行的时候遇到非正常的情况而创建的对象,它封装了异常信息,java异常的根类为java.lang.Throwable,整个类有两个直接子类java.lang.Error和java.lang.Exception.Error是程序本身无法恢复的严重错误.Exception则表示可以被程序捕获并处理的异常错误.JVM用方法调用栈来跟踪每个线程中一系列的方法调用过程,该栈保存了每个调用方法的本地信息.对于独立的JAVA程序,可以一直到该程序的main方法.当一个新方法被调用的时候,JVM把描述该方法的栈结构置入栈顶,位于栈顶的方法为正确执行的方法.当一个JAVA方法正常执行完毕,JVM回从调用栈中弹处该方法的栈结构,然后继续处理前一个方法.如果java方法在执行代码的过程中抛出异常,JVM必须找到能捕获异常的catch块代码.它首先查看当前方法是否贼这样的catch代码块,如果存在就执行该catch代码块,否则JVM回调用栈中弹处该方法的栈结构,继续到前一个方法中查找合适的catch代码块.最后如果JVM向上追到了main()方法,也就是一直把异常抛给了main()方法,仍然没有找到该异常处理的代码块,该线程就会异常终止,如果该线程是主线程,应用程序也随之终止,此时JVM将把异常直接抛给用户,在用户终端上会看到原始的异常信息.
分享到:
评论

相关推荐

    解析Java中所有错误和异常的父类java.lang.Throwable

    在Java编程语言中,`java.lang.Throwable` 是所有错误(Error)和异常(Exception)的顶级父类,它是异常处理机制的基础。`Throwable` 类提供了封装异常信息的方法和属性,使得开发者能够对程序中出现的问题进行捕获...

    java.lang包

    Java异常是一个对象,继承自`java.lang.Throwable`类。例如,`ArithmeticException`、`NullPointerException`和`IOException`等都是异常类的实例。异常处理通过使用`try-catch-finally`结构来实现。`try`块包含可能...

    在Java中异常分析

    - **异常路径**:`java.lang.Object -> java.lang.Throwable -> java.lang.Exception -> java.lang.RuntimeException -> java.lang.IndexOutOfBoundsException -> java.lang.ArrayIndexOutOfBoundsException` ...

    java.lang包介绍

    Java编程语言的基础构建块之一是`java.lang`包,它被自动导入到每个Java程序中,无需显式导入。这个包包含了许多核心类和接口,是编写任何Java应用程序不可或缺的部分。`java.lang`包中最基本的类是`Object`,它是...

    解析Java中所有错误和异常的父类java.lang.Th

    在Java编程语言中,`java.lang.Throwable`是所有错误(Error)和异常(Exception)的顶级父类,它是Java异常处理机制的核心组成部分。这个类位于`java.lang`包中,是Java标准库的一部分,提供了处理运行时问题的标准...

    stuts2.2_API文档

    java.lang.Throwable (implements java.io.Serializable) java.lang.Exception java.lang.RuntimeException com.opensymphony.xwork2.XWorkException (implements com.opensymphony.xwork2.util.location.Locatable...

    org.aspectj.lang.annotation.Around所需要的包

    在Java编程环境中,有时我们可能会遇到“java.lang.ClassNotFoundException: org.aspectj.lang.annotation.Around”的错误,这通常意味着运行时环境无法找到特定的类,即`org.aspectj.lang.annotation.Around`。...

    常见的java异常.pdf

    在Java中,异常是通过类来表示的,这些类都继承自`java.lang.Throwable`,并分为两种主要类型:Error和Exception。Error通常表示系统级的严重问题,如系统资源耗尽,而Exception是程序设计时可以预见和处理的错误。 ...

    Java异常处理.pdf

    +-- java.lang.Throwable | +-- java.lang.Error | | | +-- java.lang.VirtualMachineError | +-- java.lang.ThreadDeath | +-- ... | +-- java.lang.Exception | +-- java.lang.RuntimeException | | ...

    常见java异常.txt

    - 类层次结构:java.lang.Object -> java.lang.Throwable -> java.lang.Exception -> java.lang.RuntimeException -> java.lang.NullPointerException - 描述:当尝试使用一个未初始化的对象引用时抛出此异常。这...

    java1.6.api

    Java 1.6中的异常类分布在`java.lang.Throwable`、`java.lang.Error`和`java.lang.Exception`等层次结构中。 4. **多线程**:Java 1.6支持多线程编程,`java.lang.Thread`类和`java.util.concurrent`包提供了创建、...

    JAVA-API.rar_Java api文档_java api

    4. **异常和错误**:Java中的异常处理机制是通过`Exception`和`Error`类来实现的,这些类在`java.lang.Throwable`下。例如,`IOException`是所有I/O异常的基类,`NullPointerException`表示尝试访问空对象引用。 5....

    BuglyTinkerSample

    BuglyTinkerSample是一个示例项目,展示了如何在Android应用中集成Bugly平台的Tinker热修复技术。这个项目对于开发者来说,是一个很好的学习资源,它可以帮助理解如何在实际开发中处理应用程序出现的bug,无需发布新...

    javaapi.zip

    `java.lang.Throwable` 是所有异常的父类,包括 `Exception` 和 `Error`。 7. **反射机制**:Java 的反射 API(在 `java.lang.reflect` 包中)允许程序在运行时动态地获取类的信息并操作类的对象,如创建对象、调用...

    JAVA-API.zip_java api

    此外,"异常处理"(java.lang.Throwable和其子类)是Java中错误和异常处理的基础。 对于"Java API"的学习,不仅要理解每个类的功能,还需要掌握如何正确使用它们。例如,了解如何通过方法调用来实现特定功能,如何...

    精选30道Java笔试题.doc

    * Java异常的基类是java.lang.Throwable,java.lang.Error和java.lang.Exception继承自Throwable。 * java.lang.Error用于标识严重错误,不应该被捕获。 * java.lang.Exception用于指示一种合理的程序想去catch的...

    jdk1.6的rt.jar的源码

    1. `java.lang.Throwable`:所有异常和错误的基类,提供了异常处理的基本结构。 2. `java.lang.Thread`:线程类,定义了线程的生命周期和行为,包括启动、暂停、恢复和终止线程。 通过分析JDK1.6的rt.jar源码,...

    JAVA-API.rar_JAVA的API中文版_java API_java api

    API中的`java.lang.Throwable`是所有异常的基类,它的子类如`Exception`和`Error`构成了Java的异常体系。 4. **多线程**: Java API提供了强大的多线程支持。`java.lang.Thread`类和`java.util.concurrent`包提供了...

Global site tag (gtag.js) - Google Analytics