/*
因为项目中会出现特有的问题,而这些问题并未被Java所描述并封装对象,所以对于这些特有的问题可以按照Java的
对问题封装的思想,将特有的问题进行自定义的异常封装。
*/
1.当在函数内已经抛出时,函数上就必须声明出来。
2.当函数调用了一个有异常声明的函数时,必须要有个动作:1.要么处理该异常2.要么把该异常抛出。
3.
自定义异常:必须是自定类继承Exception.
问题: 为什么一定要继承Exception???
继承Exception的原因:
异常体系有一个特点:因为异常类和异常对象都被抛出。
他们都具备可抛性,这个可抛性是Throwable这个体系中独有的特点。
只有这个体系中的类和对象才可以被throws和throw操作。
如何定义自己的异常类呢?
自定义的异常类,必须手动地建立异常对象,并把该异常对象抛出。
//手动地通过throw关键字抛出一个自定义异常对象。
4.
当在函数内部出现了throw抛出异常对象,那么就必须给对应的处理动作。
要么在内部try-catch处理
要么在函数声明上让调用者处理
一般情况下,函数内出现异常,那么在函数上需要声明
5.
当主函数调用了一个声明了异常的方法时,主函数有两种选择:
要么try-catch处理
要么抛出
*/
7.
如何定义异常信息呢?
//重写Exception的getMessage()方法?
: 因为父类中已经把异常信息的操作都完成了,所以
子类只要在构造时,将异常信息通过super语句传递给父类就可以了。
那么,就可以直接通过getMessage()方法获取自定义的异常信息。
/*
案例: 当除数为负数时会抛出一个自定义的异常。
*/
//定义一个异常类
class UserDefinedException extends Exception
{
//如何定义异常信息呢?
//重写Exception的getMessage()方法
private String msg;
UserDefinedException (String msg){
this.msg=msg;
}
public String getMessage()
{
return msg;
}
}
等价于:
class UserDefinedException extends Exception
{
//在自定义类中,定义自己的变量
private int value;
UserDefinedException (String msg){
super(msg);
}
//在自定义类中,定义自己的特有方法
public int getValue(){
return this.value;
}
}
//
class Demo {
int div (int a,int b){
if(b<0)
throw new UserDefinedException("出现了除数为负数的异常");//手动地通过throw关键字抛出一个自定义的异常对象。
return a/b;
}
}
public class ExceptionDemo3{
public static void main(String [] args){
Demo d =new Demo();
//由于在main方法中调用了带有异常声明的函数,所以必须在main方法中对该异常作出处理
try{
int x = d.div(4,-1);
System.out.println("x="+x);
}catch(FuShuException e){
//处理异常
System.out.println(e.toString());
//调用自定义异常类的特有方法
System.out.println("为负数的除数是"+e.getValue);
}
System.out.println("over");
}
}
|
|