手动抛出异常
关于异常对象的产生:
- 系统自动生成的异常对象
- 手动的生成一个异常对象,并且抛出(throw)
throw手动抛出异常
eg:
class Student{
private int id;
public void regist(int id){
if(id>0){
this.id=id;
}else{
/*
我们以前使用的方式:
System.out.println("你输入的数据不合法")
*/
//现在我们可以选择手动抛出一个异常对象
throw new RuntimeException("您输入的数据不合法");//这里抛出对象的形参是 //String message
/*
这里我们是手动抛出了一个运行时异常,可以不处理
*/
}
}
}
- 在上面这个例子中我们抛出了一个运行时的异常(RuntimeException),由于抛出的是一个运行时的异常,也就可以不在这里做异常处理,
- 而如果我们是抛出了一个编译时期的异常的话,我们就要立马去处理这个抛出的异常,也就是要去抛出或者是通过try----catch-----finally的方式去处理这个异常,或者是通过throws+异常类型的方式去处理这个异常,才能保证我们编译的通过,如果是使用了throws+异常类型的方式去处理这个异常的话其实也就是将编译时期的异常拖到了运行时期再让他显现出来,但是最终我们还是要通过改代码来解决了这个异常,或者就直接通过try-----catch------finally的方式直接将这个异常真正的处理掉,
throw和throws的一个区分
throw是手动抛出异常,也就是创建了一个异常对象,throw是写在方法体中的
throws是抛出异常,向调用这个抛出异常的方法的地方去抛,在方法的声明后面加
eg:
public void feedAnimal()throws ClassCastException{//这里就抛出了一个类型转化异常
...
}
在catch中解决异常的方法我们讲了两个:
- getMessage();
- getprintStackTrace();
- 以上两种方法都要我们通过异常类对象去调用
- 这两种方法我们推荐使用getPrintTrace();
手动抛出异常时我们创建异常对象要向这个异常类的构造方法中传递实参,这里我们传递的这个实参最终会传给异常类中的message属性
就是 throw new Runtime Exception(“发生了运行时异常”);
这个时候就是将字符串"发生了运行时异常"当做实参传递给了这个异常对象的message属性中,这时候我们再通过异常对象调用getMessage()方法输出的就是"发生了运行时异常"