黑马程序员_关于java异常机制的学习

 ----------------------- android培训、java培训、java学习型技术博客、期待与您交流! ---------------------

观看创智博客老师对异常的讲解,得出一些总结:

    关于异常信息的定义

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

 

 自定义异常需要注意的

          必须是自定义类继承exception

   继承Exception的原因

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

     throw和throws的区别

        throws在函数上,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!!");

  }

  }

 

----------------------- android培训、java培训、java学习型技术博客、期待与您交流! ---------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值