精华内容
下载资源
问答
  • 自定义异常

    2020-12-26 15:57:04
    1.创建自定义异常类 2.在方法中通过throw关键字抛出异常对象 3.如果在当前抛出异常的方法中处理异常,可以使用try -catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续...

    步骤:
    1.创建自定义异常类
    2.在方法中通过throw关键字抛出异常对象
    3.如果在当前抛出异常的方法中处理异常,可以使用try -catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作
    4.在出现异常方法的调用者中捕获并处理异常
    主类
    public class Myexception extends Exception{//自定义异常的信息
    private int detail;

    public Myexception(int a) {//初始化参数,接收参数信息
        this.detail = a;
    }
    @Override//toString  打印异常信息
    public String toString() {
        return "Myexception{" +
                "detail=" + detail +
                '}';
    }
    

    }
    测试类
    public class Test {
    public static void main(String[] args) {

        try {
            test(11);
        } catch (Myexception e) {
            System.out.println(e);
        }
    }
    public static void test(int a) throws Myexception {
        System.out.println("传递的参数为:"+a);
        if(a>10){
            throw new Myexception(a);//抛出异常
        }
    }
    

    }
    运行main方法后的输出结果为
    传递的参数为:11
    Myexception{detail=11}
    具体步骤:main方法中调用test测试方法,使用try-catch(try-catch语句写在main或者方法体里面均可)语句抓取是否出现异常,如果出现异常,则抓取并输出异常语句。
    注意
    处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理
    在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常
    对于不确定的代码,也可以加上try-catch,处理潜在的异常
    尽量去处理异常,切忌只是简单的调用printStackTrace()去打印输出
    具体如何处理异常,要根据不同的业务需求和异常类型去决定
    尽量添加finally、语句块去释放占用的资源

    展开全文
  • 开发过程中由于出现异常时想要返返回指定类型的json串,springboot自带的异常处理无法满足需求,自己封装异常处理类进行指定的异常处理。 import java.util.HashMap; import java.util.Map; import org.spring...

     

           开发过程中由于出现异常时想要返返回指定类型的json串,springboot自带的异常处理无法满足需求,自己封装异常处理类进行指定的异常处理。

    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.springframework.http.HttpStatus;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.ResponseStatus;
    /**
    *统一处理拦截
    *
    */
    @ControllerAdvice//标识为controller异常处理类
    public class ControllerExceptionHandler {
    	
    	@ResponseBody
    	@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)//状态码500
    	@ExceptionHandler(UserException.class)//指定异常
    	public Map<String ,Object> UserNotExitException(UserException ue){
    		Map<String,Object> map = new HashMap<String,Object>();
    		map.put("id", ue.getId());
    		map.put("message", ue.getMessage());
    		return map;
    	}
    }
    

    自定义异常处理类

    //自定义异常类
    public class UserException extends RuntimeException{
    
    	private static final long serialVersionUID = 1L;
    
    	private String id;
    	
    	private String message;
    	
    	public UserException(String id, String message) {
    		super("this is user exception");
    		this.id = id;
    		this.message = message;
    	}
    
    
    	public String getId() {
    		return id;
    	}
    
    
    	public void setId(String id) {
    		this.id = id;
    	}
    
    
    	public String getMessage() {
    		return message;
    	}
    
    
    	public void setMessage(String message) {
    		this.message = message;
    	}
    	
    	
    	
    }

    运行时异常抛出

    @JsonView(User.UserDetailView.class)//json视图处理器,博主下一篇文章解释,可注释掉
    	//@RequestMapping(value="/user/{id:\\d+}",method = RequestMethod.GET)//限制id只能为数字
    	@GetMapping("/{id:\\d+}")//正则表达式,限制传入内容只能为id
    	public User  getInfo(@PathVariable(name="id") String thisId){//获取url中的指定id
    		User u = new User();
    		u.setUsername("1");
    		u.setPassword("11");
    		throw new UserException("1","我这出问题了");//抛出指定异常
    		//return u;
    	}
    	

     

    总结一下restful风格开发情况下,springboot2异常抛出时捕获处理顺序

    controller  -- aspec  --- interceptor---filter

     

    展开全文
  • &gt; 异常的分类: ① 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和...② Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异...

    > 异常的分类:
    ① 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception,具体的RuntimeException继承RuntimeException。 
    ② Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)

    Java.lang.Exception和Java.lang.Error继承自Java.lang.Throwable; Java.lang.RuntimeException继承自Java.lang.Exception.
        编译时异常(Java.lang.Exception): 程序正确,但因为外在的环境条件不满足引发。例如:用户错误及I/O问题----程序试图打开一个并不存在的远程Socket端口。这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误)。对商用软件系统,程序开发者必须考虑并处理这个问题。Java编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。
        运行期异常(Java.lang.RuntimeException): 这意味着程序存在bug,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免,Java编译器强制要求处理这类异常。
        错误(Java.lang.Error): 一般很少见,也很难通过程序解决。它可能源于程序的bug,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而有运行环境处理。

    -- Java中用2种方法处理异常:
    1.在发生异常的地方直接处理;
    2.将异常抛给调用者,让调用者处理。

    -- 异常类有:

    1. java.lang.nullpointerexception

      这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了。数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话)
    2. java.lang.classnotfoundexception
      这个异常是很多原本在jb等开发环境中开发的程序员,把jb下的程序包放在wtk下编译经常出现的问题,异常的解释是"指定的类不存在",这里主要考虑一下类的名称和路径是否正确即可,如果是在jb下做的程序包,一般都是默认加上package的,所以转到wtk下后要注意把package的路径加上。
    3. java.lang.arithmeticexception
      这个异常的解释是"数学运算异常",比如程序中出现了除以零这样的运算就会出这样的异常,对这种异常,大家就要好好检查一下自己程序中涉及到数学运算的地方,公式是不是有不妥了。
    4. java.lang.arrayindexoutofboundsexception
      这个异常相信很多朋友也经常遇到过,异常的解释是"数组下标越界",现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常
    5. java.lang.illegalargumentexception
      这个异常的解释是"方法的参数错误",很多j2me的类库中的方法在一些情况下都会引发这样的错误,比如音量调节方法中的音量参数如果写成负数就会出现这个异常,再比如g.setcolor(int red,int green,int blue)这个方法中的三个值,如果有超过255的也会出现这个异常,因此一旦发现这个异常,我们要做的,就是赶紧去检查一下方法调用中的参数传递是不是出现了错误。
    6. java.lang.illegalaccessexception
      这个异常的解释是"没有访问权限",当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了package的情况下要注意这个异常。

     算术异常类:ArithmeticExecption
     空指针异常类:NullPointerException
     类型强制转换异常:ClassCastException
     数组负下标异常:NegativeArrayException
     数组下标越界异常:ArrayIndexOutOfBoundsException
     违背安全原则异常:SecturityException
     文件已结束异常:EOFException
     文件未找到异常:FileNotFoundException
     字符串转换为数字异常:NumberFormatException
     操作数据库异常:SQLException
     输入输出异常:IOException
     方法未找到异常:NoSuchMethodException
     java.lang.AbstractMethodError,抽象方法错误。当应用试图调用抽象方法时抛出。
     java.lang.AssertionError,断言错。用来指示一个断言失败的情况。
     java.lang.ClassCircularityError,类循环依赖错误。在初始化一个类时,若检测到类之间循环依赖则抛出该异常。
     java.lang.ClassFormatError,类格式错误。当Java虚拟机试图从一个文件中读取Java类,而检测到该文件的内容不符合类的有效格式时抛出。
     java.lang.Error,错误。是所有错误的基类,用于标识严重的程序运行问题。这些问题通常描述一些不应被应用程序捕获的反常情况。
     java.lang.ExceptionInInitializerError,初始化程序错误。当执行一个类的静态初始化程序的过程中,发生了异常时抛出。静态初始化程序是指直接包含于类中的static语句段。
     java.lang.IllegalAccessError,违法访问错误。当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。
     java.lang.IncompatibleClassChangeError, 不兼容的类变化错误。当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出该异常。一般在修改了应用中的某些类的声明定义而没有对整个应用重新编译而直接运行的情况下,容易引发该错误。
     java.lang.InstantiationError,实例化错误。当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常.
     java.lang.InternalError,内部错误。用于指示Java虚拟机发生了内部错误。
     java.lang.LinkageError,链接错误。该错误及其所有子类指示某个类依赖于另外一些类,在该类编译之后,被依赖的类改变了其类定义而没有重新编译所有的类,进而引发错误的情况。
     java.lang.NoClassDefFoundError,未找到类定义错误。当Java虚拟机或者类装载器试图实例化某个类,而找不到该类的定义时抛出该错误。
     java.lang.NoSuchFieldError,域不存在错误。当应用试图访问或者修改某类的某个域,而该类的定义中没有该域的定义时抛出该错误。
     java.lang.NoSuchMethodError,方法不存在错误。当应用试图调用某类的某个方法,而该类的定义中没有该方法的定义时抛出该错误。
     java.lang.OutOfMemoryError,内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。
     java.lang.StackOverflowError,堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。
     java.lang.ThreadDeath,线程结束。当调用Thread类的stop方法时抛出该错误,用于指示线程结束。
     java.lang.UnknownError,未知错误。用于指示Java虚拟机发生了未知严重错误的情况。
     java.lang.UnsatisfiedLinkError,未满足的链接错误。当Java虚拟机未找到某个类的声明为native方法的本机语言定义时抛出。
     java.lang.UnsupportedClassVersionError,不支持的类版本错误。当Java虚拟机试图从读取某个类文件,但是发现该文件的主、次版本号不被当前Java虚拟机支持的时候,抛出该错误。
     java.lang.VerifyError,验证错误。当验证器检测到某个类文件中存在内部不兼容或者安全问题时抛出该错误。
     java.lang.VirtualMachineError,虚拟机错误。用于指示虚拟机被破坏或者继续执行操作所需的资源不足的情况。
     java.lang.ArithmeticException,算术条件异常。譬如:整数除零等。
     java.lang.ArrayIndexOutOfBoundsException,数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。
     java.lang.ArrayStoreException,数组存储异常。当向数组中存放非数组声明类型对象时抛出。
     java.lang.ClassCastException,类造型异常。假设有类A和B(A不是B的父类或子类),O是A的实例,那么当强制将O构造为类B的实例时抛出该异常。该异常经常被称为强制类型转换异常。
     java.lang.ClassNotFoundException,找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。
     java.lang.CloneNotSupportedException,不支持克隆异常。当没有实现Cloneable接口或者不支持克隆方法时,调用其clone()方法则抛出该异常。
     java.lang.EnumConstantNotPresentException,枚举常量不存在异常。当应用试图通过名称和枚举类型访问一个枚举对象,但该枚举对象并不包含常量时,抛出该异常。
     java.lang.Exception,根异常。用以描述应用程序希望捕获的情况。
     java.lang.IllegalAccessException,违法的访问异常。当应用试图通过反射方式创建某个类的实例、访问该类属性、调用该类方法,而当时又无法访问类的、属性的、方法的或构造方法的定义时抛出该异常。
     java.lang.IllegalMonitorStateException,违法的监控状态异常。当某个线程试图等待一个自己并不拥有的对象(O)的监控器或者通知其他线程等待该对象(O)的监控器时,抛出该异常。 
     java.lang.IllegalStateException,违法的状态异常。当在Java环境和应用尚未处于某个方法的合法调用状态,而调用了该方法时,抛出该异常。
     java.lang.IllegalThreadStateException,违法的线程状态异常。当县城尚未处于某个方法的合法调用状态,而调用了该方法时,抛出异常。
     java.lang.IndexOutOfBoundsException,索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常。
     java.lang.InstantiationException,实例化异常。当试图通过newInstance()方法创建某个类的实例,而该类是一个抽象类或接口时,抛出该异常。
     java.lang.InterruptedException,被中止异常。当某个线程处于长时间的等待、休眠或其他暂停状态,而此时其他的线程通过Thread的interrupt方法终止该线程时抛出该异常。
     java.lang.NegativeArraySizeException,数组大小为负值异常。当使用负数大小值创建数组时抛出该异常。
     java.lang.NoSuchFieldException,属性不存在异常。当访问某个类的不存在的属性时抛出该异常。
     java.lang.NoSuchMethodException,方法不存在异常。当访问某个类的不存在的方法时抛出该异常。
     java.lang.NullPointerException,空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。
     java.lang.NumberFormatException,数字格式异常。当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常。
     java.lang.RuntimeException,运行时异常。是所有Java虚拟机正常操作期间可以被抛出的异常的父类。
     java.lang.SecurityException,安全异常。由安全管理器抛出,用于指示违反安全情况的异常。
     java.lang.StringIndexOutOfBoundsException,字符串索引越界异常。当使用索引值访问某个字符串中的字符,而该索引值小于0或大于等于序列大小时,抛出该异常。
     java.lang.TypeNotPresentException,类型不存在异常。当应用试图

    > 非RuntimeException(checkedException)和RuntimeException(uncheckedException)区别:
     ① RuntimeException:RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。处理RuntimeException的原则是:如果出现RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。 也可以主动抛出异常,停止程序运行。if(obj==null){throw new exception};......
     ②其他非RuntimeException(IOException等等):这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。
      1. checkedException 在程序中必须使用try...catch进行处理。
        比如一个IO系统的设计者会认为诸如物理文件不存在或者介质无法读取等异常时很可能发生,而使用者完全可能捕获这个异常,通过让用户 重新输入文件名等方式重新进行这个操作,也就是说,这是一个可恢复的操作。所以我会在诸如 read()/write()等操作中throw 一个 IOException(checked exception)。同时还要在Finally中关闭连接,数据库连接同理。(记得File 如果没有找到,然后file.close()会抛异常,所以要先判断file是否为null)
      2. RuntimeException可以不使用try...catch进行处理但是如果有异常产生则异常将由JVM进行处理。
        对于RuntimeException的子类最好也使用异常处理机制。虽然RuntimeException的异常可以不使用try...catch进行处理但是如果一旦发生异常则肯定会导致程序中断执行。所以,为了保证程序再出错后依然可以执行,在开发代码时最好使用try...catch的异常处理机制进行处理。RuntimeException也可以说是程序员的错误,程序员可以通过优秀的代码编写,来避免runtimeException.运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。而Exception是指出现错误后,可以由程序员进行补救或其他工作。

      >  Throwable是所有Java程序中错误处理的父类,有两种资类:Error和Exception。
         Error:表示由JVM所侦测到的无法预期的错误,由于这是属于JVM层次的严重错误,导致JVM无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形.应用程序不应该抛出这种类型的对象(一般是由虚拟机抛出).假如出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的.
        Exception:表示可恢复的例外,这是可捕捉到的。
    Java提供了两类主要的异常:runtime exception和checked exception。checked 异常也就是我们经常遇到的IO异常,以及SQL异常都是这种异常。对于checked这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误.
      但是另外一种异常:runtime exception,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等.处理RuntimeException的原则是:假如出现RuntimeException,那么一定是程序员的错误.例如,可以通过检查数组下标和数组边界来避免数组越界访问异常.
    出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。运行时异常是Exception的子类,也有一般异常的特点,是可以被Catch块处理的。只不过往往我们不对他处理罢了。也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。
    如果不想终止,则必须扑捉所有的运行时异常,决不让这个处理线程退出。队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,然后记录日志。不应该由于异常数据而影响下面对正常数据的处理。在这个场景这样处理可能是一个比较好的应用,但并不代表在所有的场景你都应该如此。如果在其它场景,遇到了一些错误,如果退出程序比较好,这时你就可以不太理会运行时异常,或者是通过对异常的处理显式的控制程序退出。

      异常处理的目标之一就是为了把程序从异常中恢复出来。

      出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。运行时异常是Exception的子类,也有一般异常的特点,是可以被Catch块处理的。只不过往往我们不对他处理罢了。也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。
       如果不想终止,则必须扑捉所有的运行时异常,决不让这个处理线程退出。队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,然后记录日志。不应该由于异常数据而影响下面对正常数据的处理。在这个场景这样处理可能是一个比较好的应用,但并不代表在所有的场景你都应该如此。如果在其它场景,遇到了一些错误,如果退出程序比较好,这时你就可以不太理会运行时异常,或者是通过对异常的处理显式的控制程序退出。

    > 自定义异常

    /*自定义异常*/  
    class ChushulingException extends Exception{  
        public ChushulingException(String msg)   {  
            super(msg);  
        }  
    }   
    /*自定义异常 End*/  
    class Numbertest{  
        public int shang(int x,int y) throws ChushulingException,ChushufuException  
        {  
            if(y<0){  
                throw new ChushufuException("您输入的是"+y+",规定除数不能为负数!");//抛出异常  
            }  
            if(y==0){  
                throw new ChushulingException("您输入的是"+y+",除数不能为0!");  
            }  
            int m=x/y;  
            return m;  
        }  
    }  
    /**  */
    class Rt001{  
        public static void main(String[]args){  
            Numbertest n=new Numbertest();  
            //捕获异常  
            try{  
                System.out.println("商="+n.shang(1,-3));  
            }  
            catch(ChushulingException yc){  
                System.out.println(yc.getMessage());  
                yc.printStackTrace();  
            }  
            catch(ChushufuException yx){  
                System.out.println(yx.getMessage());  
                yx.printStackTrace();  
            }  
            catch(Exception y){  
                System.out.println(y.getMessage());  
                y.printStackTrace();  
            }      
          finally{ 
    System.out.println("finally!");} finally不管发没发生异常都会被执行    
        }  
    }  
    /* 
    [总结] 
      1.自定义异常: 
    class 异常类名 extends Exception { 
        public 异常类名(String msg){ 
            super(msg); 
        } 
    }  
      2.标识可能抛出的异常: 
     throws 异常类名1,异常类名2 
      3.捕获异常: 
    try{} 
    catch(异常类名 y){} 
    catch(异常类名 y){} 
      4.方法解释 
    getMessage() //输出异常的信息 
    printStackTrace() //输出导致异常更为详细的信息 

    展开全文
  • 关于自定义异常的层次

    千次阅读 2010-12-23 15:17:00
     纵观众多的开源框架,甚至是jdk自身,异常几乎总是按一定的类层次结构组织起来。那种认为一个系统只需要提供一个异常基类,其余所有异常都是只需要继承这一个基类的观点是武断和片面的。我们至少可以从两个...

         纵观众多的开源框架,甚至是jdk自身,异常几乎总是按一定的类层次结构组织起来。那种认为一个系统只需要提供一个异常基类,其余所有异常都是只需要继承这一个基类的观点是武断和片面的。我们至少可以从两个方面来认识异常层次的重要性:
     
          一、有时候我们关心某一种具体的异常,需要对其做特别地处理,而有的时候,我们只需要对“一组相近”的异常做出同样的处理,在这种情况下,设计良好的异常体系就体现出了它的价值。此时我们只需要catch它们共同的直接父类而不必catch每一个子类并复制同样的异常处理代码。
     
          二、有人认为一个异常被设计出来而不被throw和catch是没有任何意义的。但是做为良好设计的产物,我们确实会在一些优秀的产品和框架中发现一些异常类,它们的主要作用就是用来被继承。或者更加确切地说是对异常进行“划分”。这种异常多是抽象类。就以经典的spring数据访问异常体系为例,作为处于异常体系中间层的org.springframework.dao.NonTransientDataAccessException,既非最高基类异常,同时又有众多的直接子类。从spring的源码中我们几乎找不到throw(org.springframework.dao.NonTransientDataAccessException是抽象类,因此不会有直接throw该异常的地方)和catch这个异常的代码。它的存在完全是与和它比肩的org.springframework.dao.TransientDataAccessException一起对异常做“范围划分“,在设计层面上体现合理的组织关系。像这种异常在众多产品和框架中大量存在。
     
          很多系统都不会出现层次过深的异常体系,多数情况下,可能是一些继承了同一基类的简单异常。但这并不表示我们没有设计异常体系的必要。在我看来,一个用户登陆异常和一个payment异常是毫无瓜葛的。如果它们的直接父类是同一个,似乎很难说得过去。当然,话又说回来,不是可以,只是不够好罢了。

    展开全文
  • 2014.05.28 自定义异常

    2014-05-28 14:49:10
    throw: 抛出具体的某一个异常; throws:声明可能会抛出naxi
  • 使用Dubbo捕获不到自定义异常的问题

    千次阅读 2019-04-25 10:20:03
    Dubbo是阿里巴巴公司开源的一个高性能优秀的 服务框架,使得应用可通过高性能的 RPC 实现服务的输 出和输入功能,可以和Spring框架无缝集成,现在在很多Rpc项目中作为同步请求用到,现在当当网维护出Dubbox添加了...
  • 在 Spring Boot 项目中 ,异常统一处理,可以使用 Spring 中 @ControllerAdvice 来统一处理,也可以自己来定义异常处理方案。Spring Boot 中,对异常的处理有一些默认的策略,我们分别来看。 默认情况下,Spring ...
  • 本文首发至java技术博客[码上]:码上​jdkcb.com...我们一般有两种处理方式,一种是throws直接抛出,一种是使用try..catch捕获,一般的话,如果逻辑的异常,需要知道异常信息,我们往往选择将异常抛出,如果只是要保...
  • 最近要写一个商城项目,用的时Android Jetpack库,今天开始使用的DataBinding(以前只是用传统的开发,没深入接触过Jetpack,不过因为此库的优秀,所以新项目采用了Jetpack)。并且在项目的开始就需要进行自定义view...
  • 自定义线程池

    千次阅读 2018-08-15 16:25:21
    为被拒绝的线程抛出一个RejectExecution异常。 当有线程总数超过4个时,就会抛出这个错误。 三、如何保证没有线程被抛弃 我的目的是为了保证项目实际在跑的过程中,不会有丢掉,漏掉。所以尽量不会出现...
  • 在第一篇中已经讲过,LayoutManager主要用于布局其中的Item,在LayoutManager中能够对每个Item的大小,位置进行更改,将它放在我们想要的位置,在很多优秀的效果中,都是通过自定义LayoutManager来实现的,比如: ...
  • Android自定义view

    2017-08-26 17:25:50
    我们的需求,这时候就需要自定义控件了。自定义控件对于初学者总是感觉是一种复杂 的技术。因为里面涉及到的知识点会比较多。但是任何复杂的技术后面都是一点点简单 知识的积累。通过对自定义控件的学习去可以更...
  • 本文部分内容参考自掘金网:点击打开链接坐标图解:概述Android已经为我们提供了大量的View供我们使用,但是可能有时候这些组件不能满足我们的需求,这时候就需要自定义控件了。自定义控件对于初学者总是感觉是一种...
  • 这篇介绍下CI框架的异常和错误处理机制。... 在CI初始化程序CodeIgniter.php中,设置自定义的错误处理方法,自定义异常处理方法,自定义的php中止处理方法。 1 set_error_handler('_error_handler')...
  • Android 自定义View

    千次阅读 2016-01-29 12:29:19
    Android 自定义VIew, 信息来自官网; Android framework包含大量的View类, 它们被广泛的用于跟用户交互和显示各种数据. 但是有时我们的app可能需要一些内置view无法满足的功能. 本文将展示如何创建自己的view, 使其...
  • Android自定义View的官方套路

    万次阅读 多人点赞 2016-04-12 18:44:49
    概述Android已经为我们提供了大量的View供我们使用,但是可能有时候这些组件不能满足我们的需求,这时候就需要自定义控件了。自定义控件对于初学者总是感觉是一种复杂的技术。因为里面涉及到的知识点会比较多。但是...
  • java异常机制

    2019-01-17 13:10:34
    java异常机制摘要Java异常的分类和类结构图异常处理的基本语法异常的执行流程图finally代码块throw 异常抛出语句异常的注意事项声明自定义异常 摘要 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的...
  • Android 自定义View -- 简约的折线图

    千次阅读 多人点赞 2015-12-30 15:25:40
    接上篇 Android 圆形百分比(进度条) 自定义view 昨天分手了,不开心,来练练...这个时候,一些比较优秀的第三方图表库如:MPChart 就显得比较臃肿了。所以我们需要自定义一个折线图。 老规矩,先来看最终的实现效
  • 自定义View步骤

    千次阅读 2016-04-12 20:15:14
    Android已经为我们提供了大量的View供我们使用,但是可能有时候这些组件不能满足我们的需求,这时候就需要自定义控件了。自定义控件对于初学者总是感觉是一种复杂的技术。因为里面涉及到的知识点会比较多。但是任何...
  • Android自定义View和Canvas绘图解析

    千次阅读 2016-12-27 16:49:19
    自定义view的流程分为measure、 layout、draw三个主要步骤,今天我们通过源码来分下下measure的过程我们从顶级view开始,顶级view即DecorView, view的事件都是先经过这个DecorView, 接下来我们来看看这个DecorView...
  • 异常

    2020-09-08 23:10:49
    加入用户自定义处理信息 调用方法输出异常信息 e.printStackTrace(); 常见的异常类型 在try-catch块后加入finally块 是否发生异常都执行 不执行的唯一情况 存在return的try-catch-finally块 引发...
  • 文章目录本篇要点一、SpringBoot默认的异常处理机制二、错误页面的定制三、自定义异常数据四、自定义异常视图五、@ControllerAdvice注解处理异常源码下载参考阅读 本篇要点 介绍SpringBoot默认的异常处理机制。 ...
  • Jeesite单点登录集成Cas另加自定义登录验证

    万次阅读 热门讨论 2017-03-09 10:33:12
    Jeesite单点登录集成Cas另加自定义登录验证 JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的 开源 Java EE快速开发平台. Cas主要是用来解决多应用之间统一登陆认证,无需用户在...
  • 安卓自定义view的步骤

    2016-05-23 11:13:01
    Android已经为我们提供了大量的View供我们使用,但是可能有时候这些组件不能满足我们的需求,这时候就需要自定义控件了。自定义控件对于初学者总是感觉是一种复杂的技术。因为里面涉及到的知识点会比较多。但是任何...
  • Shiro 自定义realm授权与认证的实现

    千次阅读 2017-02-28 15:29:47
    ……List…… 1.项目需求 2.shiro核心组件 3.自定义realm认证 4.自定义realm授权 5.思考总结 ……1.... 企业项目中少不了权限管理,总的来说,权限管理就是用户认证与用户授权...shiro是一套优秀的权限管理框架。来了解
  • 异常的处理2.1 抛出异常throw2.2 Objects非空判断2.3 声明异常throws2.4 捕获异常try…catch2.4 finally 代码块2.5 异常注意事项3、自定义异常3.1 概述3.2 自定义异常练习 1、异常 1.1 异常概念 异常 :指的是...
  • 文章目录语法错误异常处理异常finally子句自定义异常 语法错误 在python中如果错误信息以"SynataxError"开头,说明python解释器认为这是一个语法错误,同时会提示你在哪个文件的哪一行开始出错。语法错误通常意味着...
  • 本文结合《Effective Java》第九章《异常》和自己的理解及实践,讲解了正确使用Java异常优秀指导原则,文章发布于专栏Effective Java,欢迎读者订阅。
  • java 实现自定义线程池

    千次阅读 2018-06-05 16:39:37
    java 实现自定义线程池 定义线程池接口 public interface ThreadPool&lt;Job extends Runnable&gt; { // 执行一个Job void execute(Job job); // 关闭线程池 void shutdown(); // 添加工作者线程 ...
  • Github总结优秀的第三方控件以及学习资源 分享出来 以供大家学习和进步 通过自己的学习、努力 让自己变得更有价值 加油!~

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,286
精华内容 13,314
关键字:

优秀的自定义异常