首先看一下throws和throw的区别:
throws是用来声明一个方法可能抛出的所有异常信息
throw则是指抛出的一个具体的异常类型。
通常在一个方法(类)的声明处通过throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过throw声明一个具体的异常信息。
throws通常不用显示的捕获异常,可由系统自动将所有捕获的异常信息抛给上级方法;
throw则需要用户自己捕获相关的异常,而后在对其进行相关包装,最后在将包装后的异常信息抛出。
使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。用户自定义异常类,只需继承Exception类即可。
在程序中使用自定义异常类,大体可分为以下几个步骤。
(1)创建自定义异常类。
(2)在方法中通过throw关键字抛出异常对象。
(3)如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
(4)在出现异常方法的调用者中捕获并处理异常
例子程序:
package com.zcy.exception;
import java.util.*;
public class NewClass {
//用throws声明这个方法可能抛出的所有异常信息
static int avg(int number1, int number2) throws MyException {
if (number1 < 0 || number2 < 0) {
//用throw抛出一个具体的异常类型
throw new MyException("不可以使用负数");
}
if (number1 > 100 || number2 > 100) {
throw new MyException("数值太大了");
}
return (number1 + number2) / 2;
}public static void main(String[] args) {
System.out.println("求2个数的平均数!" + "请输入两个数,要求是都小于100的数:");
Scanner in = new Scanner(System.in);
int number1 = in.nextInt();
int number2 = in.nextInt();
try {
int result = avg(number1, number2);
System.out.println(result);
} catch (MyException e) {
System.out.println(e);
}
System.out.println("是否继续执行。。。。");
/*输出结果:
求2个数的平均数!请输入两个数,要求是都小于100的数:
200000
1
com.zcy.exception.MyException: 数值太大了
是否继续执行。。。。*/
}
/*public static void main(String[] args) throws MyException {
System.out.println("求2个数的平均数!" + "请输入两个数,要求是都小于100的数:");
Scanner in = new Scanner(System.in);
int number1 = in.nextInt();
int number2 = in.nextInt();
int result = avg(number1, number2);
System.out.println(result);
System.out.println("是否继续执行。。。。");
}
输入结果:
求2个数的平均数!请输入两个数,要求是都小于100的数:
200000
1
Exception in thread "main" com.zcy.exception.MyException: 数值太大了
at com.zcy.exception.NewClass.avg(NewClass.java:13)
at com.zcy.exception.NewClass.main(NewClass.java:36)*/
}//自定义一个异常类
class MyException extends Exception {
MyException(String ErrorMessage) {
super(ErrorMessage);
}
}
可以看出,当用try..catch捕获后,程序是还是可以继续往下执行的,而如果不适用的话,继续就会中断,抛出异常信息