一、throw-throws 抛出异常
首先,我们需要知道平时使用try-catch捕获异常对象是从哪里来的。其实是,调用别的方法,这个方法内部使用throw关键字来抛出异常对象的。
1.1throw
使用throw关键字抛出一个(具体的)异常对象
import java.util.Scanner;
public class Test {
private int value;
public Test(int value) {
this.value = value;
}
//使用throws关键字声明异常
public int divide(int num) throws ArithmeticException{
if(num == 0){
//抛出一个算术异常
throw new ArithmeticException("The divisor cannot be zero....");
}
return this.value / num;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
try{
System.out.print("请输入除数:");
Test test = new Test(sc.nextInt());
System.out.print("请输入被除数:");
System.out.println("结果:"+test.divide(sc.nextInt()));
}catch(ArithmeticException e){
//打印异常描述信息
System.out.println(e.getMessage());
}
}
}
1.2 throws
使用throws是用来声明声明异常的
- 如果抛出的是编译时异常,必须在方法标签上,使用throws声明抛出什么类型异常
- 如果抛出的是运行时异常,可以在方法标签上声明或者不声明(推荐声明以下)
- 如果一个方法内部调用其他方法,其他方法抛出一个编译/运行时异常,该方法不想处理,可以使用 throw 异常类,继续把异常往上抛
- throws后面可以接多个异常类,多个异常类使用逗号分隔
- 如果异常类型,有父子关系,只需要写父类异常类型
二、自定义异常
在实际开发中现有的异常类是不够的,往往需要自己编写异常类
步骤:
- 编写一个类,继承Exception 或者 RuntimeException
- 根据父类构造方法生成子类构造方法 (继承父类的全部构造方法)
- 应用
package myException;
/**
* 自定义异常
*/
public class SexNotManException extends Exception{
public SexNotManException() {
}
public SexNotManException(String message) {
super(message);
}
public SexNotManException(String message, Throwable cause) {
super(message, cause);
}
public SexNotManException(Throwable cause) {
super(cause);
}
public SexNotManException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
使用throw new 异常类()
public void fun3() throws SexNotManException{
int i = 1;
if(i == 0){
throw new SexNotManException("性别不能为男");
}
}