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

异常/深入java.lang.Throwable

阅读更多
有几个现象是需要总结的:
--------------------------------------
在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/jsp web.xml详解

    <exception-type>java.lang.Throwable</exception-type> <location>/error.jsp</location> </error-page> ``` 这里配置了当出现404错误时显示`/notfound.jsp`,而任何未捕获的异常则显示`/error.jsp`。 7. **...

    在Java中异常分析

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

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

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

    java-jdk源代码免费分享 src.zip

    9. **异常处理(Exception Handling)**:`java.lang.Throwable`及其子类展示了Java如何处理程序中的错误和异常。 10. **泛型(Generics)**:Java的泛型是类型安全的一种手段,其在`java.lang.reflect`和`java....

    java api下载 英文版

    9. **异常处理**:`java.lang.Throwable`及其子类如`Exception`和`Error`,构成了Java的异常处理机制。 10. **泛型**:自Java 5引入的泛型提高了代码的类型安全性和重用性,如`List<String>`等。 11. **注解...

    Java_api查看.rar

    异常类位于`java.lang.Throwable`及其子类,如`IOException`、`NullPointerException`等。 - `try-catch-finally`语句块用于捕获和处理异常,`finally`块确保无论是否发生异常,某些代码总会被执行。 6. **反射与...

    Java异常处理.pdf

    Java异常处理是Java编程中不可或缺的部分,用于处理程序运行时可能出现的错误和异常情况。异常在Java中被视为程序运行的不正常状态,可以是错误或者是特定的运行...因此,深入理解异常处理是每个Java开发者必备的技能。

    常见的java异常.pdf

    在Java中,异常被组织成一个层次结构,根类是`java.lang.Throwable`,其下有两个主要子类:`Error`和`Exception`。`Error`通常表示系统级的错误,比如内存溢出或虚拟机错误,而`Exception`是程序中可以预见和处理的...

    java动态代理,j-dynproxies-source

    通过深入理解Java动态代理机制,我们可以灵活地扩展已有代码的功能,而无需修改原始代码,这在维护性和可扩展性方面具有很大的优势。同时,`j-dynproxies-source`这样的开源项目可以帮助我们学习和借鉴其他开发者在...

    JSTL详细标签库介绍

    首步我们一般在程序中先处理我们完成异常处理的类,完成异常处理的功能,因为可能除数为0是会出现异常,我们查找java.lang包中各个Exception类,发现RuntimeException类集合中的ArithmeticException可以处理运算异常...

    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`包提供了创建、...

    javaapi.zip

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

    Multiple Choice___ssd3

    7. **异常类的继承**:所有Java异常类都继承自`(a) java.lang.Throwable`类。`Error`和`RuntimeException`是`Throwable`的子类,而`IOException`是`Exception`的子类。 8. **Javadoc规范**:按照Javadoc的约定,每...

    rt.jar包下载

    6. **异常处理**:`java.lang.Throwable`及其子类构成了Java的异常处理机制,如`Exception`和`Error`。 7. **反射**:`java.lang.reflect`包提供了反射API,允许在运行时动态获取类信息,创建对象,调用方法等。 8...

    java throw抛出异常实例二

    首先,异常在Java中是通过类来表示的,这些类都是`java.lang.Throwable`的子类,如`Exception`和`Error`。`Exception`是程序可以预见并通常应该处理的异常,而`Error`则代表更严重的系统级问题,通常不应由应用程序...

    JAVA-API.rar_Java api文档_java api

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

    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`包提供了...

    JAVA-API.zip_java api

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

    Java1.6API中文版

    6. **异常处理**:`java.lang.Throwable`、`Exception`和`Error`是异常处理的核心类,Java强制异常处理使得程序更加健壮。 7. **反射机制**:`java.lang.reflect`包提供了运行时动态访问和修改类或接口的能力,是...

    java基本类库结构图.zip

    6. **异常处理(java.lang.Throwable)**:Java的异常处理机制是通过Exception类和其子类实现的,用于在程序运行时捕获和处理错误。 7. **日期/时间(java.time)**:自Java 8起,引入了新的日期和时间API,如...

Global site tag (gtag.js) - Google Analytics