异常
什么是异常:
异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序
代码冗余,在实际开发中不一定能够将每一个程序的漏铜都想到并使用if判断避免
异常处理:
Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws
catch:捕获异常 ,在一段程序中catch可以有多个,来捕获异常类型,当出现了某种异常就会中断 异常代码后面的内容继而
执行对应的catch中的内容
当程序中有return的时候,是会先执行finally中的内容,然后执行return。
throws:声明方法可能要抛出的各种异常
throw:手动抛出异常
异常对象常用的方法:
| 说 明 | |
|---|---|
| void printStackTrace() | 输出异常的堆栈信息 |
| String getMessage() | 返回异常信息描述字符串,是printStackTrace()输出信息的一部分 |
常见的异常类型:
| 说 明 | |
|---|---|
| Exception | 异常层次结构的父类 |
| ArithmeticException | 算术错误情形,如以零作除数 |
| ArrayIndexOutOfBoundsException | 数组下标越界 |
| NullPointerException | 尝试访问 null 对象成员 |
| ClassNotFoundException | 不能加载所需的类 |
| IllegalArgumentException | 方法接收到非法参数 |
| ClassCastException | 对象强制类型转换出错 |
| NumberFormatException | 数字格式转换异常,如把"abc"转换成数字 |
引发多种类型的异常:
排列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(“性别必须是\"男\"或者\"女\"!"); //抛出异常 } }
异常类型不能满足程序的需要时,可以自定义异常类
步骤
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();
}
}
}

浙公网安备 33010602011771号