本节中
throw new DrunkException();抛出异常类,抛出的是类
throw newExc;抛出对象。
能抛出对象?
抛出对象时格式不一样,不用写new ?
throw 能抛出哪些?
抛出异常的方法有2种:
1)在方法体内部使用throw语句抛出异常对象,格式是:throw +有异常类所产生的对象
2)就是老师讲的:[修饰符] 返回值类型 方法名(参数列表)throws +异常列表。
这个例子中newExc是由RuntimeException创建的对象,所以用throw newExc;
public class test_1 {
public static void main(String[] args) {
test_1 result = new test_1();
result.deal2();
}
public class DIYException1 extends Exception {
public DIYException1() {
}
}
public class DIYException2 extends Exception {
public DIYException2() {
}
}
//自定义两种异常
public void test() throws DIYException1 {
throw new DIYException1();
}
//通过test(),抛出异常1
public void deal1() throws DIYException2 {
try {
test();
} catch (DIYException1 e) {
System.out.println("error1");
throw new DIYException2();
}
}
//检测到异常1抛出后,抛出异常2,并输出error1
public void deal2() {
try {
deal1();
} catch (DIYException2 e) {
System.out.println("error2");
}
}
//检测到异常2后,输出error2
}
throw关键字通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法声明中指明要跑出的异常;如果要捕捉throw抛出的异常,则必须使用try—catch语句。举例如下:
package imooc;
class MyException extends Exception { // 创建自定义异常类
String message; // 定义String类型变量
public MyException(String ErrorMessagr) { // 父类方法
message = ErrorMessagr;
}
public String getMessage() { // 覆盖getMessage()方法
return message;
}
}
public class ThrowTest { // 创建类
static int quotient(int x, int y) throws MyException {// 定义方法抛出异常
if (y < 0) { // 判断参数是否小于0
throw new MyException("除数不能是负数");// 异常信息
}
return x / y;// 返回值
}
public static void main(String args[]) { // 主方法
try { // try语句包含可能发生异常的语句
int result = quotient(3, -1);// 调用方法quotient()
} catch (MyException e) { // 处理自定义异常
System.out.println(e.getMessage()); // 输出异常信息
} catch (ArithmeticException e) {
// 处理ArithmeticException异常
System.out.println("除数不能为0");// 输出提示信息
} catch (Exception e) { // 处理其他异常
System.out.println("程序发生了其他的异常");
// 输出提示信息
}
}
}
抛出的都是异常类对象,
new DrunkException();这句,有new,这句话就是实例化过程,所以抛出的是对象
总之,throw抛出的是异常对象。不可能抛出一个类,类是抽象概念嘛~