`

Java Exception | 异常

阅读更多
  
http://docs.oracle.com/javase/tutorial/essential/exceptions/definition.html

Throwable Class and Its Subclasses:

Java中方法的调用构成方法调用栈,方法调用栈中方法的顺序与方法的被调用顺序是相反的。
Java中程序的任何一处抛出Throwable对象后,都是采用按方法调用栈逐级上溯(即与方法调用顺序相反的顺序逐级上溯)的机制来搜寻可以处理被抛出的Throwable对象的方法(注意不管是Checked Exceptions 还是 Unckecked Exceptions,都是使用这种机制处理的)。如果找到了,则异常对象在该方法中被处理;如果搜寻所有方法直至程序入口都未能找到一个可以处理该Throwable对象的方法,则程序退出。如下面两个图所示:

The call stack.

Searching the call stack for the exception handler.




Checked Exceptions & Unckecked Exceptions:
Checked Exceptions:
any subclass of Exception (or Exception itself), excluding class RuntimeException and its subclasses.
checked means they will be checked at compiletime it self,so Checked exceptions must be explicitly caught or propagated(只有两条路:使用try-catch-finally捕获它,或者在方法声明中throws它)。
Unckecked Exceptions:
RuntimeException, Error, and their subclasses
unchecked means you need not handle the unchecked exceptions and they will be handled by the JVM.


什么时候使用checked exception,什么时候使用unchecked exception?
Here's the bottom line guideline: If a client can reasonably be expected to recover from an exception, make it a checked exception. If a client cannot do anything to recover from the exception, make it an unchecked exception.

对checked exception,什么时候应该抛出,什么时候应该捕获?Catch or Propagate Exceptions?
You might be wondering whether you should catch or propate exceptions thrown in your program. It depends on the situation. In many applications you can't really do much about the exception but tell the user that the requested action failed. In these applications you can usually catch all or most exceptions centrally in one of the first methods in the call stack. You may still have to deal with the exception while propagating it though (using finally clauses). For instance, if an error occurs in the database connection in a web application, you may still have to close the database connection in a finally clause, even if you can't do anything else than tell the user that the action failed. How you end up handling exceptions also depends on whether you choose checked or unchecked exceptions for your application. There is more on that in other texts in the error handling trail.



throws和throw的区别
引用
throw用来在语句中抛出一个异常,而throws用在方法声明中,表示这个方法会抛出某类异常。
throw语法:throw <异常对象>
在方法声明中,添加throws子句表示该方法将抛出异常。
throws语法:[<修饰符>]<返回值类型><方法名>([<参数列表>])[throws<异常类>]
其中:异常类可以声明多个,用逗号分割。
区别:
throws可以单独使用;
而对throw:
如果语句中throw抛出的是checked exception,则该checked exception必须被捕获(try-catch[-finally])或者抛出(方法声明中throws);所以可以认为,使用throw抛出checked exception的时候throw不可以单独使用,必须和try-catch[-finally] 或 throws配合使用
如果语句中throw抛出的是unchecked exception(RuntimeException,Error,及他们的子类),unchecked exception是不需要你在代码中做处理的;可以认为,使用throw抛出unchecked exception的时候throw可以单独使用
在方法的一个分支中(主干分支或任意一个条件分支,条件分支如if分支、else分支),throw一个Throwable对象,则如果该分支中throw子句后还存在代码块,则这些代码块会被认为是Unreachable,无法编译通过。
    //存在三个分支:main主分支、if分支、else分支
    public static void main( String[] args ) throws Throwable {
        if(true) {
            throw new Throwable("err");
            //System.out.println("ddd"); //不可达
        } else {
            System.out.println(""); //可达
        }
        throw new NullPointerException("null err"); //可达
        //m1(); //不可达
    }



Sources:
Checked or Unchecked Exceptions?
http://tutorials.jenkov.com/java-exception-handling/checked-or-unchecked-exceptions.html
Basic try-catch-finally Exception Handling in Java
http://tutorials.jenkov.com/java-exception-handling/basic-try-catch-finally.html
  • 大小: 7.3 KB
分享到:
评论

相关推荐

    java Exception

    ### Java中的异常处理详解 #### 一、异常基础概述 在Java编程中,异常处理是一项重要的机制,用于处理运行过程中可能发生的错误情况。通过合理的异常处理,可以显著提高程序的健壮性和可用性。 ##### 1. 异常概念...

    Java exception_java_

    Java的异常类都继承自`java.lang.Throwable`,主要分为两种类型:Error和Exception。Error是系统级的错误,如虚拟机错误、内存不足等,一般开发者无法处理,而Exception是应用程序可以预见并处理的异常。 声明异常...

    javaException_JAVA源码_

    Java异常处理是编程中至关重要的一个部分,它用于在程序运行时处理错误和不寻常的情况。在Java中,异常是一种事件,它中断了程序的正常流程。Java异常处理提供了五种关键字来帮助开发者有效地管理异常:`try`, `...

    java 除0发生的算术异常(ArithmeticException)

    总的来说,`ArithmeticException`是Java中常见的运行时异常之一,通过合理的异常处理和输入验证,我们可以避免这类异常的发生,提高程序的健壮性。理解并妥善处理这种异常对于编写稳定且可靠的Java程序至关重要。

    JAVA 自定义异常 Exception

    自定义异常是在Java中通过继承`java.lang.Throwable`或其子类(如`Exception`或`Error`)来实现的。通常,我们选择继承`Exception`类,因为它用于表示程序可以恢复的错误,而`Error`则用于表示系统级的严重问题,...

    java exception

    除了基本的异常处理,Java还提供了异常链(Exception Chaining),允许一个异常实例引用另一个异常,这样可以保留更详细的错误信息。还有`assert`关键字,用于在开发阶段进行断言检查,确保代码的正确性。 总之,...

    深入理解java异常(异常中的Error+异常中的Exception+检查异常+运行时异常+异常处理+throws关键字等)

    Java 异常机制包括 Error、Exception、检查异常、运行时异常、异常处理和 throws 关键字等几个方面。 Error 是 Java 异常机制中的基类,表示编译时或者系统错误,例如虚拟机相关的错误、系统崩溃等。Error 无法恢复...

    java 异常 问题收集 Exception

    在这个“java 异常 问题收集 Exception”主题中,我们将深入探讨Java异常处理的基本概念、常用类以及最佳实践。 1. 异常的概念与分类: Java中的异常是程序运行时出现的不正常情况,通常会导致程序中断。Java将...

    JAVA Exception Handling & UI Design

    在Java编程中,异常处理(Exception Handling)是确保程序健壮性的重要机制。它允许程序员在遇到错误情况时,能够优雅地处理问题而不是让程序突然崩溃。本项目中,"JAVA Exception Handling & UI Design" 涉及了如何...

    java 异常详解,java异常分类,创建自己的异常

    Java 异常详解 Java 异常是指在程序运行中出现的违背指定正常流向的事件。异常可以分为两大类:-checked 异常和 unchecked 异常。Checked 异常必须在编译时捕捉并处理,而 unchecked 异常可以在编译时忽略,但是在...

    java异常处理习题

    Java 异常处理习题 Java 异常处理是 Java 编程语言中的一种重要机制,用于处理程序在运行时可能出现的错误或异常情况。下面是关于 Java 异常处理的习题和知识点总结: 一、Java 异常处理关键字 * Java 中用来抛出...

    java异常exception

    ### Java异常详解 #### 1. `java.lang.NullPointerException` `NullPointerException`是当程序尝试访问一个为`null`的对象实例的字段、调用其方法或构造函数时抛出的异常。这种异常通常发生在程序员错误地假设某个...

    java异常捕捉

    在Java编程语言中,异常处理是一项至关重要的机制,它允许程序员优雅地处理程序运行时可能出现的问题,从而确保程序的稳定性和可靠性。Java异常捕捉通过使用try、catch、finally和throw关键字来实现,这些关键字帮助...

    Java创建用户异常类

    如果java提供的系统异常类型不能满足程序设计的需求,那么可以设计自己的异常类型。 从java异常类的结构层次...另外一种问题是程序运行错误,java定义为Exception,这种情况下,可以通过程序设计调整来实现异常处理。

    java语言时间异常类

    首先,我们来看看基础的`Exception`类,它是所有Java异常的根类。任何抛出的异常都直接或间接地继承自`Exception`。在处理时间异常时,最常见的可能是`IllegalArgumentException`,这个异常会在方法接收到非法参数时...

    优质资料(2021-2022年收藏)史上最全的Java中所有Exception异常中英文对照.docx

    1. `ArithmeticException`:当计算中出现除以零、非法运算等错误时,会抛出此类异常。 2. `ArrayIndexOutOfBoundsException`:当尝试访问数组的索引超出了数组的实际长度时,会抛出此类异常。 3. `...

    java异常 异常的概念 应用

    在Java中,异常(Exception)被用来表示程序运行时发生的错误或不正常情况。异常并不等同于错误,它是程序设计的一部分,允许我们优雅地处理错误,而不是让程序突然崩溃。 异常的概念: 1. 异常是一种事件,当它...

    Java异常 Exception类及其子类(实例讲解)

    Java异常 Exception类及其子类详解 Java异常Exception类及其子类是Java语言中异常处理的核心部分。异常是指程序在执行过程中出现的非正常情况,例如除数为零、数组索引越界、类型转换错误等。Java语言所有的异常都...

    java异常机制小结

    Java 异常的对象来自两个来源:一是 Java 语言本身定义的一些基本异常类型,二是用户通过继承 Exception 类或者其子类自己定义的异常。异常的对象可以是 Java 运行时环境自动抛出的系统生成的异常,也可以是程序员...

    高效的java异常处理框架高效的java异常处理框架高效的java异常处理框架

    在 Java API 中已经定义了许多异常类,这些异常类分为两大类,错误 Error 和异常 Exception。Java 异常体系结构呈树状,其层次结构图如图 1 所示: 图 1 Java 异常体系结构 Throwable 类是所有异常和错误的超类,...

Global site tag (gtag.js) - Google Analytics