zoukankan      html  css  js  c++  java
  • JAVA 中的异常(5)- 自定义异常

    在开发中,为了适应业务的开发需求, 在 Java 中可以根据业务的异常情况自定义异常。

    1. 自定义异常

    所有的自定义异常都必须是 Throwable 的子类,在自定义继承时可以继承于 Exception 或者它的子类。

    2. 自定义异常的分类

    • 检查性异常类:自定义异常类继承于Exception。
    • 运行时异常类:自定义异常类继承于RuntimeException

    3. 自定义异常步骤:

    • 自定义类继承Exception或其子类。
    • 通过构造函数定义异常信息。

    4. Objects的非空判断

    Objects由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或 null-tolerant(容忍空指针的),那么在它的源码中,对对象为null的值进行了抛出异常操作。Objects通过调用requireNonNull(T obj)方法查看调用对象是否为null。

    public static <T> T requireNonNull(T obj) {
      if (obj == null)
        throw new NullPointerException();
      return obj;
    }
    

    从上面源码可以看出,如果传递对象为 null,requireNonNull 方法会抛出 NullPointerException 异常,否则返回该对象。

    5. 实例

    5.1 自定义检查性异常类(MyException)

    public class MyException extends Exception {
        
        public MyException() { } // 无参构造
        
        public MyException(String msg) { 
            super(msg); // msg : 异常提示信息
        }
        
        public MyException(Throwable throwable) { 
            super(throwable);// throwable 类型
        }
    }
    

    5.2 自定义运行时异常类(MyRuntimeException)

    public class MyRuntimeException extends RuntimeException {
        public MyRuntimeException() { } // 无参构造
        
        public MyRuntimeException(String msg) { 
            super(msg); // msg : 异常提示信息
        }
        
        public MyRuntimeException(Throwable throwable) { 
            super(throwable);// throwable 类型
        }
    }
    

    5.3 自定义异常的使用实例

    public class ExceptionDemo {
        public static void main(String[] args) throws Exception {
            int i = demo(3);
            System.out.println("i = " + i);
        }
        
        public static int demo(int index) throws  MyException{
            int[] arr = {1,2,3};
            if(index >= arr.length || index < 0)
                throw new MyRuntimeException("您传递的索引错误,数组索引在0-2之间");
            return arr[index];
        }
    }
    

    5.4 Objects的非空判断实例

    public static void main(String[] args) throws Exception {
        Integer i = 10;
        Integer i2 = Objects.requireNonNull(i);
        System.out.println(i2);
    }
    

    6.

    继承于现有的异常结构:RuntimeException 、Exception
    提供全局常量:serialVersionUID
    提供重载的构造器
    public class MyException extends Exception{

    static final long serialVersionUID = -7034897193246939L;
    
    public MyException(){
    	
    }
    
    public MyException(String msg){
    	super(msg);
    }
    

    }

    此时使用自己定义的异常类

    package com.atguigu.java2;

    public class StudentTest {

    public static void main(String[] args) {
    	try {
    		Student s = new Student();
    		s.regist(-1001);
    		System.out.println(s);
    	} catch (Exception e) {
    

    // e.printStackTrace();
    System.out.println(e.getMessage());
    }
    }

    }

    class Student{

    private int id;
    
    public void regist(int id) throws Exception {
    	if(id > 0){
    		this.id = id;
    	}else{
    		throw new MyException("不能输入负数");
    	}
    }
    
    @Override
    public String toString() {
    	return "Student [id=" + id + "]";
    }
    

    }


    作者:快乐随行

    https://www.cnblogs.com/jddreams/p/14281900.html

    著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明原文作者及出处。


    ---- 作者:快乐随行 著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明原文作者及出处。 ----
  • 相关阅读:
    测试如何发挥更大的价值?聊聊测试左移和右移
    Cocos Creator性能调优
    跨域问题产生的原因和解决方法
    tornado部署
    tonado
    MySQL binlog
    grpc
    nextjs中的懒加载
    前端低代码-少写代码实现灵活需求
    MySQL中的锁
  • 原文地址:https://www.cnblogs.com/jddreams/p/14282061.html
Copyright © 2011-2022 走看看