黑马程序员---java基础知识(五):异常及处理

时间:2021-07-31 12:55:57

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

五、异常及处理

关于异常信息的定义

       因为父类中已经把异常信息操作完成了,所以子类只需要在构造时将异常信息传递给父类,通过super语句。那么就可以直接通getmessage方法获取过自定义的异常。

 

 自定义异常需要注意的

   必须是自定义类继承exception

   继承Exception的原因:

        因为异常类和异常对象都需要被抛出,他们都具有可抛性,这个可抛性是Throwable这个体系独有特性。这有这个体系中的类和对象可以被throw和throws操作。

     throw和throws的区别:

      hrows在函数上,throw使用在函数内,throws后面跟的异常类,可以跟多个,用逗号隔开,throw后面跟的是异常对象。

      Exception中有一个特殊的异常类    RuntimeException运行异常,如果在函数内抛出该异常,函数可以不用声明,编译一样通过,如果在函数上声明了该异常类,调用者可以不用处理,编译一样通过,所以不用在函数中声明,是因为不需要让调用者处理,当该异常发生时,希望程序停止,因为只运行时出现了无法继承运算的请况,希望停止程序后对代码进行修正。

  对于异常分2种:

      1  编译时被检测出来的异常。

      2  编译时不检测异常,在运行时有异常一般是  RuntimeException和期子类。

 

  finally代码块:定义一定执行的代码,通常用于关闭资源。

     记住一点:catch是用于处理异常的,如果没有catch,就代表异常没有被处理,如果该异常是检测内异常,该异常必须先声明。

     异常在子类覆盖中的体现:

     1  子类在覆盖父类时如果父类的方法抛出异常,那么子类的覆盖方法只能抛出父类异常,或者该异常的子类。

     2  如果父类方法抛出多个异常,那么子类在抛出方法时,只能抛出父类的异常子类。

     3  如果父类或者借口的方法中没有异常抛出,那么子类在覆盖方法时也不可以抛出异常,如果子类方法发生了异常,就必须进行try处理,绝对不能抛出。

  下面是几个异常的例子:

 //除零异常,不做处理

  class test{

  int devide(int x,int y)

  {return x/y;}

  }

  class TestException{

  public static void main(String arg[])

  {

  new test().devide(3,0);

  System.out.println("the end!!");

  }

  }

  //除零异常,进行捕获

  class test{

  int devide(int x,int y)

  {return x/y;}

  }

  class CatchException{

  public static void main(String arg[])

  {

  try{

  new test().devide(3,0);

  }

  catch(ArithmeticException l)//exception类 声名 对象l

  {//catch中可以执行其他语句输出

  // l.printStackTrace() ;//printStackTrace

  // public void printStackTrace(PrintWriter s)

  // 将此 throwable 及其追踪输出到指定的 PrintWriter。

  //参数:

  //s - 用于输出的 PrintWriter

  //System.out.println(l.getMessage());//getMessage

  // public String getMessage()

  //返回此 throwable 的详细消息字符串。

  //返回:

  //此 Throwable 实例(可以为 null)的详细消息字符串。

  System.out.println("出错拉!!类型是:ArithmeticException");

  }

  System.out.println("the end!!");

  }

  }

  //除零异常,抛出异常

  class test {

  int devide(int x,int y)throws Exception//方法抛出异常!1抛给主调方法

  {return x/y;}

  }

  class TestException {

  public static void main(String arg[])throws Exception//主调方法不愿处理,又抛给了处理机!!

  //如想处理的话,

  //请参照CatchException中主函数的异常捕获!!

  {

  new test().devide(3,0);

  System.out.println("the end!!");

  }

  }