zoukankan      html  css  js  c++  java
  • 简单异常

    异常的概念:

          程序在运行时,发生了不可预测的事件,它阻止了程序按照我们程序员的预期

    正常执行!

    异常处理机制

        能让程序在异常发生时,按照代码预先设定的异常处理逻辑,针对性地处理异常,让程序恢复正常并继续执行。

         

    所有异常和错误的父类--Throwable

      Throwable类是Java异常类型的顶层父类,一个对象只有是 Throwable 类的(直接或者间接)实例,他才是一个异常对象,才能被异常处理机制识别。JDK中内建了一些常用的异常类,我们也可以自定义异常。

    根据编译器对异常的处理要求,异常分为两类:

    运行时异常RuntimeException:在程序运行期间产生的异常!

    在编译期间是发现不了的,只有在程序运行时会出现错误

    受查异常  checked  Exception:在程序编译期间产生的异常!  

    在编译期间就开始出现的错误

    异常处理方式分为两种:(5个关键字)

    1.使用try..catch..finally

    2.使用throw抛出异常和throws声明异常

    try的使用

    1.try块中放可能发生异常的代码

    2.try不能单独使用,必须和catch或者finally中的其中一个联合使用;

    3.如果执行完try并且不发生异常,则接着去执行finally代码块和finally后面的代码;

    4.如果没有finally代码块,则直接执行catch之后的代码;

    5.如果发生异常,则尝试去匹配对应异常的catch代码块。

     catch的使用

     1.每一个catch块用于捕获并处理一个特定的异常,或者这异常类型的子类

     2.catch后面的括号定义了异常类型和异常参数。

     3..如果异常与之匹配且是最先匹配到的,则虚拟机将使用这个catch块来处理异常。

     4.可以书写多个catch代码块!顺序必须是按照异常类型从小到大!

     5..如果当前try块中发生的异常在后续的所有catch中都没捕获到,则先去执行finally

     7.Java7版本及以上可以将多个异常声明在一个catch

     finally的使用

     1.无论异常是否发生,finally代码块都会执行;

     2.如果try代码块中出现return,先执行finally代码块之后return

     3.finally不会执行的:遇到System.exit(0),不会执行finally代码块

     throwthrows的使用

     throw的使用

    语法:

       throw  new  异常类型([异常提示语句]);

     1.异常类型可以是Exception或者其子类;

    2.一条throw语句只能抛出一个异常;

    3.throw语句只能出现在方法体中

    4.针对于thorw抛出的异常,有两种解决方式

     throws的使用

    语法:

             方法名称  throws  异常类型1,异常类型2

        使用throws声明异常,把异常告诉调用者

    1.thows声明在方法名称之后;

    2.throws可以声明多个异常类型,每个类型之间使用 '逗号' 隔开;

    3.throws声明表示当前方法可以不处理异常,而是由方法的调用者处理;

    4.如果在主函数中使用throws声明异常,则由JVM处理异常!

    异常链的使用

     将捕获的异常包装进一个新异常,然后将新异常抛出。原异常被保存为新异常的一个属性(Cause),形成了异常链。 

     为什么要使用异常链

     当发生异常时,程序员具有完整的异常堆栈跟踪,这对调试非常有用。

    示列

    异常链和自定义异常

    首先创建一个包并在里面创建一mian方法来运行

    和建立几个类。

    这是其中的User的实体类

    package exception;
    public class User {
        private String username;
        private String pwd;
        private String age;
        public String getAge() {
            return age;
        }
        public void setAge(String age) {
            this.age = age;
        }
        public String getPwd() {
            return pwd;
        }
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
    }

    这是其中的UserException类

    在这里要继承一个RuntimeException  

    package exception;
    public class UserException extends RuntimeException {
        //用于显示异常信息
        public UserException(String message) {
            super(message);
        }
        public UserException() {
    
        }
        //用于保存根异常信息
        public UserException(String message, Throwable cause) {
            super(message, cause);
        }
    }

    这是其中的UserNameExceprion 类

    在这里要继承一个UserException类

    package exception;
    import exception.UserException;
    public class UserNameExceprion extends UserException {
        //用于显示异常信息
        public UserNameExceprion(String message) {
            super(message);
        }
        public UserNameExceprion() {
    
        }
        //用于保存根异常信息
        public UserNameExceprion(String message, Throwable cause) {
            super(message, cause);
        }
    }

    这是其中的PasswordException 类

    在这里要继承一个UserException类

    package exception;
    public class PasswordException extends  UserException{
        //显示异常信息
        public PasswordException(String message) {
            super(message);
        }
        public PasswordException() {
    
        }
        //用于保存根异常信息
        public PasswordException(String message, Throwable cause) {
            super(message, cause);
        }

    这是其中的Userage 类

    在这里要继承一个UserException类

    package exception;
    public class Userage extends UserException {
            //用户显示异常信息
            public Userage(String message) {
                super(message);
            }
            public Userage() {
    
            }
            //用于保存根异常信息
            public Userage(String message, Throwable cause) {
                super(message, cause);
            }
    }

    这是其中的Text类

    此类用于实验

    package exception;
    public class Text {
        public static void main(String[] args) {
     try {
    //调用用户异常方法来实现异常链
                userName();
            }catch (UserNameExceprion e){
                e.printStackTrace();
            }
        }
    //用户异常
        private static void userName() throws UserNameExceprion
        {
            try {
                userpwd();
            }catch (PasswordException e){
                throw new UserNameExceprion("用户名异常",e);
            }
        }
    //密码异常
       private static void userpwd() throws PasswordException
        {
            try {
                userage();
            }catch (Userage e){
                throw new PasswordException("密码异常",e);
            }
        }
    //年龄异常
        private static void userage()throws Userage
        {
            throw new Userage("年龄异常");
        }
    }

    运行效果

    在这里出现了Caused  by就表示异常链

  • 相关阅读:
    提高你的Java代码质量吧:使用构造函数协助描述枚举项
    Python文件或目录操作的常用函数
    汉语-词语:胸怀
    汉语-词语:胸襟
    汉语-词语:谋略
    汉语-词语:气量
    植物-常见树木:刺槐
    植物-常见树木:楝
    HDU 2255 奔小康赚大钱 KM算法题解
    Dozer--第三方复制工具,哎哟,还不错!
  • 原文地址:https://www.cnblogs.com/matianpeng/p/9445198.html
Copyright © 2011-2022 走看看