11、异常 Exception
异常 Exception
什么是异常?
异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。
程序错误分为三种:1.编译错误;2.运行时错误;3.逻辑错误。
(1)编译错误是因为程序没有遵循语法规则,编译程序能够自己发现并且提示我们错误的原因和位置,这个也是大家在刚接触编程语言最常遇到的问题。
(2)运行时错误是因为程序在执行时,运行环境发现了不能执行的操作。
(3)逻辑错误是因为程序没有按照预期的逻辑顺序执行。异常也就是指程序运行时发生错误,而异常处理就是对这些错误进行处理和控制。
所有的异常都有一个父类,那就是Exception,Exception是所有异常的父类。
五个关键字
try: 可能产生异常的代码
catch: 捕获异常,和处理异常
finally: 无论有没有异常,都会执行,一般把关闭资源放在这,遇到System.exit(0);会直接退出虚拟机,不会执行。。。finallly里面的代码。遇到return 会先执行finally里面的代码,在执行return返回结果
throws:声明的异常给调用者去处理,自己不处理
throw:制造异常,当Exception exp = new Exception();,exp只是一个引用,当throw exp 后就变成异常了
public class Test{
main{
try{//可能产生异常的代码
int n = 10/0;
}catch(ArithMatchMath e ){//匹配异常信息
e.printStrack();
}finally{//都会执行这里
sout("关闭资源");
}
}
public static void test() throws Exception{
Exception exp = new Exception();
throw exp;//产生异常
}
}
| 异 常 类 型 | 说 明 |
|---|---|
| Exception | 异常层次结构的父类 |
| ArithmeticException | 算术错误情形,如以零作除数 |
| ArrayIndexOutOfBoundsException | 数组下标越界 |
| NullPointerException | 尝试访问 null 对象成员 |
| ClassNotFoundException | 不能加载所需的类 |
| IllegalArgumentException | 方法接收到非法参数 |
| ClassCastException | 对象强制类型转换出错 |
| NumberFormatException | 数字格式转换异常,如把"abc"转换成数字 |
多个catch
try{
sout();
}catch(异常类型1){
//解决方式1
}catch(异常类型2){
//解决方式2
}catch(Exception e){//无法预知的异常,防止程序崩溃
//解决方式e
}
自定义异常
需要继承Exception 类,可以重写getMessage()来些自己的异常信息
package demo;
public class UserException extends Exception{
public UserException() {
super();
// TODO Auto-generated constructor stub
}
public UserException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
@Override
public String getMessage() {
return super.getMessage();
}
}
/*******************************/
package demo;
public class User {
private String name;
private int age;
private String sex;
public User(String name, int age, String sex) {
super();
this.name = name;
this.age = age;
this.sex = sex;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) throws UserException {
if(age>0&&age<=100) {
this.age = age;
}else {
UserException ue = new UserException("年龄要在1~100之间");
throw ue;
}
}
public String getSex() {
return sex;
}
public void setSex(String sex) throws UserException {
if("男".equals(sex)||"女".equals(sex)) {
this.sex = sex;
}else {
UserException ue = new UserException("性别必须是男或者女");
throw ue;
}
}
}
/*******************************/
package demo;
public class Test {
public static void main(String[] args) {
User user = new User();
try {
user.setAge(100);
user.setSex("aa");
} catch (UserException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
System.out.println(e.getMessage());
}
}
}

浙公网安备 33010602011771号