1:用户自定义异常类
虽然Java系统已经预定义好了很多异常类,但是有时会遇到预定义的异常类不能描述出现的错误。在这种情况下,程序员可以通过扩展Exception类及其子类来定义自己的异常类。
用户自定义异常类MyException,用于描述数据取值范围错误信息。用户自己的异常类必须继承现有的异常类。
class MyException extends Exception {
static final long serialVersionUID = 13465653435L;
private int idnumber;
public MyException(String message, int id) {
super(message);
this.idnumber = id;
}
public int getId() {
return idnumber;
}
}
如何自定义异常类
-
继承于现有的异常结构:RuntimeException、 Exception;
-
提供全局常量(序列号,自己独有的):serialVersionUID
-
提供重载的构造器
2:练习
- 编写应用程序EcmDef.java,接收命令行的两个参数,要求不能输入负数,计算
两数相除。
对
数 据 类 型 不 一 致 (NumberFormatException) 、
缺 少 命 令 行 参 数(ArrayIndexOutOfBoundsException
除0(ArithmeticException)
输入负数(EcDef 自定义的异常)
进行异常处理。- 提示:
(1)在主类(EcmDef)中定义异常方法(ecm)完成两数相除功能。
(2)在main()方法中使用异常处理语句进行异常处理。
(3)在程序中,自定义对应输入负数的异常类(EcDef)。
(4)运行时接受参数 java EcmDef 20 10 //args[0]=“20” args[1]=“10”
(5)Interger类的static方法parseInt(String s)将s转换成对应的int值。 如:int a=Interger.parseInt(“314”); //a=314;
自定义异常类(EcDef)
//自定义异常类
public class EcDef extends Exception {
static final long serialVersionUID = -33875164229948L;//序列号,可任意改,EcDef独有即可
public EcDef() {
}
public EcDef(String msg) {
super(msg);
}
}
主类(EcmDef)
public class EcmDef {
public static void main(String[] args) {
//用命令行参数
try{
int i = Integer.parseInt(args[0]);//用命令行参数
int j = Integer.parseInt(args[1]);//用命令行参数
int result = ecm(i,j);
System.out.println(result);
//自动生成异常对象
}catch(NumberFormatException e){
System.out.println("数据类型不一致");
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("缺少命令行参数");
}catch(ArithmeticException e){
System.out.println("除0");
//自定义的异常对象
}catch(EcDef e){
System.out.println(e.getMessage());//获取分子或分母为负数!
}
}
public static int ecm(int i,int j) throws EcDef{
if(i < 0 || j < 0){
throw new EcDef("分子或分母为负数了!");
}
return i / j;
}
}