/*
因为项目中会出现特有的问题,
而这些问题并未被java所描述并封装对象,
所以对于这些特有的问题可以按照java的对问题封装的思想,
将特有的问题们进行自定义的异常封装,
自定义异常,
需求:在本程序中,对于除数是负数(-1),也是为是错误的,是无法进行运算的,
那么就需要对这个问题进行自定义的描述,
当在函数内部出现了throw抛出异常对象,那么就必须要给出对应的处理动作,
要么在内部try catch处理,
要么在函数上声明让调用者处理,
一般情况,在函数内出现异常,函数上需要声明,
发现发音的结果中只有异常的名称,而没有异常的信息,
因为自定义异常并未定义信息,
如何定义异常信息呢?
因为父类中已经把异常信息的操作都做完了,
所以子类只要在构造时,将异常信息传递给父类通过super语句,
那么就可以直接通过getMessage方法获取自定义的异常信息了,
自定义异常,
必须是自定义类继承Exception,
继承Exception的原因:
异常体系有一个特点,因为异常类和异常对象都需要抛出
他们都具备可抛性,这个可抛性是Throwable这个体系中的独有特点,
只有这个体系中的类和对象才可以被throws和throw操作
throws和throw的区别:
throws使用在函数上,
throw使用在函数内
throws后面跟的是异常类,可以跟多个,用逗号隔开,
throw后跟的是异常对象,
*/
//自定义异常
class FuShuException extends Exception//复写getMessage来定义异常信息
{
private int value;
//private String msg;
FuShuException(String msg,int value)
{
//this.msg = msg;
super(msg);//直接继承父类就行
this.value = value;
}
public int getValue()
{
return value;
}
/*public String getMessage()
{
return msg;
}
*/
}
class Demo2
{ //函数外
int div(int a,int b)throws FuShuException
{
if(b<0)
throw new FuShuException("出现了除数是负数的情况 / by FuShu",b);//手动通过throw关键字抛出一个自定义异常对象
//使用在函数内
return a/b;//数学异常
}
}
public class ExceptionDemo2
{
public static void main(String[] args) //throws Exception一般不要抛(推卸责任)
{
Demo2 d = new Demo2();
try
{
int x = d.div(4, -1);
System.out.println("x="+x);
}
catch (FuShuException e)
{
System.out.println(e.toString());
//System.out.println("除数出现负数了");
System.out.println("错误的负数是:"+e.getValue());
}
System.out.println("Over!");
}
}
/*
class Throwable//父类
{
private String message;
Throwable(String message)
{
this.message = message;
}
public String getMessage()
{
return message;
}
}
class Exception extends Throwable
{
Exception(String message)
{
super(message);
}
}
*/