打赏

简单异常

异常的概念:

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

正常执行!

 

异常处理机制

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

     

所有异常和错误的父类--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就表示异常链

 

posted @ 2018-08-08 19:34  雾里看云°  阅读(196)  评论(0编辑  收藏  举报