异常

什么是异常:

异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序

为什么使用异常:

代码冗余,在实际开发中不一定能够将每一个程序的漏铜都想到并使用if判断避免

异常处理:

Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws

try :执行可能产生 异常的代码

catch:捕获异常 ,在一段程序中catch可以有多个,来捕获异常类型,当出现了某种异常就会中断 异常代码后面的内容继而

​ 执行对应的catch中的内容

注意 在使用catch捕获异常的时候,需要将异常的范围从小到大(小范围的放上面,大范围的放下面)

finally:无论是否发生异常,代码总能执行,出发是遇到了exit()方法

当程序中有return的时候,是会先执行finally中的内容,然后执行return。

throws:声明方法可能要抛出的各种异常

throw:手动抛出异常

异常对象常用的方法:

方法名说 明
void printStackTrace() 输出异常的堆栈信息
String getMessage() 返回异常信息描述字符串,是printStackTrace()输出信息的一部分

常见的异常类型:

异 常 类 型说 明
Exception 异常层次结构的父类
ArithmeticException 算术错误情形,如以零作除数
ArrayIndexOutOfBoundsException 数组下标越界
NullPointerException 尝试访问 null 对象成员
ClassNotFoundException 不能加载所需的类
IllegalArgumentException 方法接收到非法参数
ClassCastException 对象强制类型转换出错
NumberFormatException 数字格式转换异常,如把"abc"转换成数字

多重catch块:

引发多种类型的异常:

排列catch 语句的顺序:先子类后父类

发生异常时按顺序逐个匹配

只执行第一个与异常类型匹配的catch语句

声明异常:

public class Test7 {
        //声明异常,多个异常用逗号隔开
    public static void divide() throws Exception {
          //可能出现异常的代码
    }
    public static void main(String[] args) {
        //处理异常
         try {
            divide();
         } catch (Exception e) {
            e.printStackTrace();
         }
    }
                //继续声明异常 
//    public static void main(String[] args) throws Exception {
//         divide();
//    }
}

抛出异常:

public class Person {
    private String name = "";   // 姓名
    private int age = 0;   // 年龄
    private String sex = "";  // 性别
    public void setSex(String sex) throws Exception {
        if ("".equals(sex) || "".equals(sex))
            this.sex = sex;
        else {                             
            throw new Exception(“性别必须是\"男\"或者\"女\"!");        //抛出异常
        }
    }

异常类型不能满足程序的需要时,可以自定义异常类

步骤

1.定义异常类

2.编写构造方法,继承父类的实现

3.实例化自定义异常对象

4.使用throw抛出


public class MyException extends RuntimeException {


/**
*
*/
private static final long serialVersionUID = 1L;



public MyException() {
super();
// TODO Auto-generated constructor stub
}


 


public MyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
// TODO Auto-generated constructor stub
}


 


public MyException(String message, Throwable cause) {
super(message, cause);
// TODO Auto-generated constructor stub
}


 


public MyException(Throwable cause) {
super(cause);
// TODO Auto-generated constructor stub
}


 


public MyException(String message){
super(message);
}


}



调用
public void setSex(String sex) {
/**
* 如果赋值的是男或者女则正常赋值否则给出异常提示
*/
if("男".equals(sex) || "女".equals(sex)){

this.sex = sex;
}else{
//抛出异常
try {
throw new MyException("性别赋值不正确~~~");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

 

 

posted @ 2020-05-25 11:03  南山i南  阅读(188)  评论(0)    收藏  举报