本章内容
什么是自定义异常类
自定义异常类特点
自定义异常类处理要求
什么是自定义异常类
程序中JDK提供的任何标准异常类都无法充分描述清除的问题的类,需要创建自己的异常类。这个异常类就叫做自定义异常类
自定义异常类的特点
-
只需从Exception类或者其它的子类派生一个子类即可---继承
-
如果继承Exception类,为受检查异常,必须进行处理
-
继承RuntimeException类,可以不进行异常处理
-
-
习惯上,自定义异常类应该包含两个构造器:
-
默认的构造器
-
带有详细信息的构造器
-
自定义异常类:---继承了Exception类
package com.exception;
/**
* 测试自定义异常类,一个不合法年龄异常类
* @author Lucifer
*/
public class Test04 {
public static void main(String[] args) {
/*创建对象,调用写好的方法*/
Person p = new Person();
p.setAge(-10);
}
}
/*定义一个person类*/
class Person{
/*定义一个私有的属性*/
private int age;
/*JavaBean方法*/
public void setAge(int age){
/*加一个判断和异常处理*/
if (age<0 || age>150){
try {
throw new IllegalAgeException("年龄不合法");
}catch (IllegalAgeException e){
e.printStackTrace();
}
/*
创建对象,输出语句
这里输出的语句是异常提示不是System的打印语句
这是一个自定义异常类
此处只是为了测试而测试
如果继承的是Exception类,那么必须try---catch
这是两种不同的方式
*/
}
this.age = age;
}
/*JavaBean方法*/
public int getAge(){
return age;
}
}
/*定义年龄自定义异常类*/
class IllegalAgeException extends Exception{
/*按照规则里面要有两个构造器*/
//默认的构造器
public IllegalAgeException(){
}
//带有形参和信息的构造器
public IllegalAgeException(String msg){
//可以调用父类构造器的方法
super(msg);
}
/*
如果继承的是Exception那么就不是编译器进行异常处理
而是人为进行处理。
在编写代码时必须try---catch
或者throws抛出给上一层
*/
}
继承RuntimeException类:
package com.exception;
/**
* 测试自定义异常类,一个不合法年龄异常类
* @author Lucifer
*/
public class Test04 {
public static void main(String[] args) {
/*创建对象,调用写好的方法*/
Person p = new Person();
p.setAge(-10);
}
}
/*定义一个person类*/
class Person{
/*定义一个私有的属性*/
private int age;
/*JavaBean方法*/
public void setAge(int age){
/*加一个判断和异常处理*/
if (age<0 || age>150){
throw new IllegalAgeException("年龄不合
}
/*
创建对象,输出语句
这里输出的语句是异常提示不是System的打印语句
这是一个自定义异常类
此处只是为了测试而测试
如果继承的是Exception类,那么必须try---catch
这是两种不同的方式
*/
}
this.age = age;
}
/*JavaBean方法*/
public int getAge(){
return age;
}
}
/*定义年龄自定义异常类*/
class IllegalAgeException extends RuntimeException{
/*按照规则里面要有两个构造器*/
//默认的构造器
public IllegalAgeException(){
}
//带有形参和信息的构造器
public IllegalAgeException(String msg){
//可以调用父类构造器的方法
super(msg);
}
/*
如果继承的是Exception那么就不是编译器进行异常处理
而是人为进行处理。
在编写代码时必须try---catch
或者throws抛出给上一层
*/
}
使用异常机制的建议
-
避免使用异常处理代替错误处理,这样会降低程序的清晰性,并且效率低下
-
处理异常不可以代替简单测试---只在异常情况下使用异常机制
-
不要进行小粒度的异常处理---应该将整个任务包装在一个try语句块中---不要写很多try语句,同一功能进行 放在一个try下
-
异常往往在高层处理---由调用者处理,最后由最高层处理