黑马程序员--自定义异常

2020-09-16 15:18发布

------------------- android培训java培训、期待与您交流!-----------------

 

 

/*
因为项目中会出现特有的问题,
而这些问题并未被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);
 }
 
}
*/

标签: