java异常类的妙用

以往在使用异常时,只是知道通过异常类的构造方法设置一些出错信息,此外最多就是把引起该异常的原因通过Throwable类的子类一同设置进去。今天在分析springSecurity3.0.5的框架时,看到AuthenticationException这个异常类(用在验证时)的源码,发现这个异常类除了上述常见的用法外,还把Authentication(验证信息)的做为属性放到了异常类中,当验证出错时AuthenticationException抛出时,Authentication(验证信息)一同被抛出了,这样捕获异常的类就能得到更丰富的信息,有些数据还可以通过异常类返回给调用者。看了这样的代码,思路不由地开阔了不少。该类源码如下:

 1 package org.springframework.security.core;
 2
 3 /**
 4  * Abstract superclass for all exceptions related to an {@link Authentication} object being invalid for whatever
 5  * reason.
 6  *
 7  * @author Ben Alex
 8  */
 9 public abstract class AuthenticationException extends RuntimeException {
10     //~ Instance fields ================================================================================================
11
12     private Authentication authentication;
13     private Object extraInformation;
14
15     //~ Constructors ===================================================================================================
16
17     /**
18      * Constructs an <code>AuthenticationException</code> with the specified message and root cause.
19      *
20      * @param msg the detail message
21      * @param t the root cause
22 */
23     public AuthenticationException(String msg, Throwable t) {
24         super(msg, t);
25     }
26
27     /**
28      * Constructs an <code>AuthenticationException</code> with the specified message and no root cause.
29      *
30      * @param msg the detail message
31 */
32     public AuthenticationException(String msg) {
33         super(msg);
34     }
35
36     public AuthenticationException(String msg, Object extraInformation) {
37         super(msg);
38         this.extraInformation = extraInformation;
39     }
40
41     //~ Methods ========================================================================================================
42
43     /**
44      * The authentication request which this exception corresponds to (may be <code>null</code>)
45 */
46     public Authentication getAuthentication() {
47         return authentication;
48     }
49
50     public void setAuthentication(Authentication authentication) {
51         this.authentication = authentication;
52     }
53
54     /**
55      * Any additional information about the exception. Generally a <code>UserDetails</code> object.
56      *
57      * @return extra information or <code>null</code>
58 */
59     public Object getExtraInformation() {
60         return extraInformation;
61     }
62
63     public void clearExtraInformation() {
64         this.extraInformation = null;
65     }
66 }

下面是在AbstractAuthenticationManager类中被使用到的片断:

?

public final Authentication authenticate(Authentication authRequest) throws AuthenticationException {

       try {

           return doAuthentication(authRequest);

       } catch (AuthenticationException e) {

           e.setAuthentication(authRequest);

           if (clearExtraInformation) {

               e.clearExtraInformation();

           }

           throw e;

       }

   }

通过上述两段源码可以看到,老外在写代码时考虑得很细,在异常类中加入了额外信息后,还提供了一个 clearExtraInformation()方法,用来清除额外信息。

转:https://www.cnblogs.com/hzhuxin/archive/2011/12/12/2285101.html

原文地址:https://www.cnblogs.com/jiangtao1218/p/10048861.html

时间: 2024-11-04 11:50:45

java异常类的妙用的相关文章

面试准备(三) Java 异常类层次结构

在Java中,异常分为受检查的异常,与运行时异常. 两者都在异常类层次结构中.这类容易出选择题 考试你是否掌握了异常类并清楚哪些异常类必须捕获 下面的图展示了Java异常类的继承关系. 图1 粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被捕捉处理,命名为 CHecked Exception 是因为Java编译器要进行检查,Java虚拟机也要进行检查,以确保这个规则得到

Java异常类

原文出自:http://blog.csdn.net/hguisu/article/details/6155636  在原文的基础上做优化和编辑. 异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的异常.因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件.当条件生成时,错误将引发异常. Java异常类层次结构图:

Java异常类及处理

异常概述:运行时发生的不正常情况 在java中用类的形式对不正常的情况进行了描述和封装对象. 描述不正常的类,称之为异常类. 异常就是java通过面向对象的思想将问题封装成了对象,用异常类对其进行描述. 不同的问题用不同的类进行具体的描述,比如角标越界,空指针等. 异常体系两大类: 无论是error,还是Exception,问题发生就应该可以抛出,让调用者知道并处理,该体系的特点就在于Throwable及其所有子类都具备可抛性. Throwable: ① 一般不可处理的.Error 特点:是由J

课堂动手动脑验证以及自定义异常类实现对异常处理——java异常类

异常(exception):发生在程序执行期间,表明出现了一个非法运行的情况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象.例如:数组越界和被0除. 代码验证: package test; import javax.swing.*; class AboutException { public static void main(String[] a) { int i=1, j=0, k; try { k = i/j; // Causes division-by-zero except

JAVA 异常类

1.Exception(异常) :是程序本身可以处理的异常. 2.Error(错误): 是程序无法处理的错误.这些错误表示故障发生于虚拟机自身.或者发生在虚拟机试图执行应用时,一般不需要程序处理. 3.检查异常(编译器要求必须处置的异常) :  除了Error,RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常.这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出

java异常类子类和父类的关系

在java 中,当我们子类要重写父类中的方法,如果父类的方法有异常声明,那么子类重写这个方法时候,所要声明的异常不应该比父类的大.只能是小等,或者可以没有.原因如下.假如我们自定意义一个异常: public class MyException extends Exception {public MyException(String message) {}public MyException() {}} 那么我们有一个父类它将有一个方法,将声明抛出这个异常.我们把它做成抽象的(无所谓) publi

下面有关 JAVA 异常类的描述,说法正确的有()

都是Throwable的子类: 1.Exception(异常) :是程序本身可以处理的异常. 2.Error(错误): 是程序无法处理的错误.这些错误表示故障发生于虚拟机自身.或者发生在虚拟机试图执行应用时,一般不需要程序处理. 3.检查异常(编译器要求必须处置的异常) :  除了Error,RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常.这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它

java异常类的使用

1.异常的概念 什么是异常?程序出错分为两部分,编译时出粗和运行时出错.编译时出错是编译器在编译源码时发生的错误: 运行时出错是在编译通过,在运行时出现的错误.这种情况叫异常. 例如:数组越界,除数为0,文件找不到等等. 异常的层次: Object Throwable Error Exception RuntimeException IOException 2.如何解决异常 a.使用try...catch public class UsingTryCatch { public static vo

Core Java 经典笔试题总结(异常类问题)

所有代码均在本地编译运行测试,环境为 Windows7 32位机器 + eclipse Mars.2 Release (4.5.2) 2016-10-17 整理 下面的代码输出结果是多少?为什么?并由此总结几个编程规范. 1 class smallT { 2 public static void main(String args[]) { 3 smallT t = new smallT(); 4 int b = t.get(); 5 System.out.println(b); 6 } 7 8