• Java基础/Java异常


    Java异常

    1、异常的分类:

    ① 非运行时异常(Checked Exception)

    Java中凡是继承自Exception但不是继承自RuntimeException的类都是非运行时异常

    ② 运行时异常(Runtime Exception/Unchecked Exception)

    a) RuntimeException类直接继承自Exception类,称为运行时异常。Java中所有的运行时异常都直接或间接的继承自RuntimeException.

    Java中所有的异常类都直接或间接的继承自Exception。

    2、异常的处理:

    对应非运行时异常,必须对其进行处理。处理方式有两种:

    【1】使用try…catch…finally语句块进行捕获
    【2】在产生异常的方法所在的方法声明throws Exception (将异常抛给JVM处理)

             对于运行时异常,可以不对其进行处理,也可以对其进行处理。一般情况下都不对其进行处理。

    注:异常使用注意事项

    【1】当使用多个catch语句块来捕获异常时,需要将父类的catch语句块放到子类型的catch块之后,

             这样才能保证后续的catch可能被执行,否则子类型的catch将永远无法到达,Java编译器会报编译错误。

    【2】如果try语句块中存在return语句,那么首先会执行finally语句块中的代码,然后才返回。

    【3】如果try语句块中存在System.exit(0)语句,那么就不会执行finally语句块的代码了,因为System.exit(0)会终止当前运行的JVM。

             程序在JVM终止前结束执行。

    2、自定义异常:--目的设置自定义抛出异常信息

    实现自定义异常类的方法如下:

    【1】。类java.lang.Throwable是所有异常类的基类,它包括两个子类:Exception和Error,

                Exception类用于描述程序能够捕获的异常,如ClassNotFoundException。

                Error类用于指示合理的应用程序不应该试图捕获的严重问题,如虚拟机错误VirtualMachineError

    【2】。自定义异常类可以继承Throwable类或者Exception,而不要继承Error类。自定义异常类之间也可以有继承关系

    另:需要为自定义异常类设计构造方法,以方便构造自定义异常对象

    注意:自定义的异常必须是继承自RuntimeException的才可以抛出。其他Exception的不可以的

    简单实例:

    【1】编写一个自定义异常类

    public class MyException extends RuntimeException {
            private static final long serialVersionUID = 1L;
            /**
             * 错误编码
             */
            private String errorCode;
            /**
             * 消息是否为属性文件中的Key
             */
            private boolean propertiesKey = true;
    
            /**
             * 构造一个基本异常.
             */
            public MyException(String message)
            {
                super(message);
            }
            /**
             * 构造一个基本异常
             */
            public MyException(String errorCode, String message)
            {
                this(errorCode, message, true);
            }
    
            /**
             * 构造一个基本异常.
             */
            public MyException(String errorCode, String message, Throwable cause)
            {
                this(errorCode, message, cause, true);
            }
            /**
             * 构造一个基本异常.
             */
            public MyException(String errorCode, String message, boolean propertiesKey)
            {
                super(message);
                this.setErrorCode(errorCode);
                this.setPropertiesKey(propertiesKey);
            }
            /**
             * 构造一个基本异常.
             */
            public MyException(String errorCode, String message, Throwable cause, boolean propertiesKey)
            {
                super(message, cause);
                this.setErrorCode(errorCode);
                this.setPropertiesKey(propertiesKey);
            }
            /**
             * 构造一个基本异常.
             */
            public MyException(String message, Throwable cause)
            {
                super(message, cause);
            }
    
            public String getErrorCode()
            {
                return errorCode;
            }
    
            public void setErrorCode(String errorCode)
            {
                this.errorCode = errorCode;
            }
    
            public boolean isPropertiesKey()
            {
                return propertiesKey;
            }
    
            public void setPropertiesKey(boolean propertiesKey)
            {
                this.propertiesKey = propertiesKey;
            }
    }

    【2】编写一个测试类,测试自定义异常

    public class TestException {
       public static void main(String[] args) {
            String[] sexs = {"男性","女性","中性"};
            for(int i = 0; i < sexs.length; i++){
                if("中性".equals(sexs[i])){
                    throw new MyException("你是中性!");
                }else{
                    System.out.println(sexs[i]);
                }
            }
        }
    }

    【3】编写结果

    3、ERRO与Exception区别

    Error和Exception都是实现了Throwable接口的,二者的区别主要在于:程度的不同。

    【1】Error是系统机器的错误,比如虚拟机内存溢出等严重问题,通常出现系统异常的时候项目都已经要停止运行的了。

             一般不会对error进行捕捉和处理,因为这些问题不是代码可以修复的。

    【2】Exception一般是运行过程中出现的逻辑错误、误操作等轻度的问题,不会导致项目停止运行,只不过引发异常的操作不能正常完成而已。

            对于异常,我们一般进行捕捉处理,转化为runtime异常的子类进行抛出,在过滤器统一进行处理以提供良好的用户体验并维持项目继续运。

    5、项目应用

    参考博客:http://blog.csdn.net/u010479322/article/details/51746927

                      http://blog.csdn.net/zhouyong80/article/details/1907805

                      https://www.cnblogs.com/ygj0930/p/6403033.html

                      https://www.cnblogs.com/ygj0930/p/6403033.html

  • 相关阅读:
    Android ViewTreeObserver的常用技巧
    android 三种动画详解
    mysql binlog2sql闪回数据
    linux 系统时间与硬件时间与中国标准时间
    mysql 远程备份binlog日志
    关于ActivityThread类的深入学习
    android 全屏dialog dialogfragment
    mysql show slave 与 从库复制新的从库
    Android 软键盘的全面解析,让你不再怕控件被遮盖
    Android 隐藏输入法键盘
  • 原文地址:https://www.cnblogs.com/kaixinyufeng/p/8317441.html
Copyright © 2020-2023  润新知