黑马程序员--------------异常

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

1,异常:就是程序在运行时出现了不正常的情况,由面对对象的思想,问题也是现实生活中的一个具体事物,所以可以通过java中类的形式进行描述,并封装成对象。对于异常可以分为两大类:Error(严重问题)和Exception(非严重问题)。对于严重的 问题,一般不编写针对性的代码进行处理。而对于非严重的问题,java通过Exception类进行描述,可以使用针对性的处理方式进行处理。对于Error和Exception都具有一些共性内容。比如,不正常情况的信息,引发的原因等。

2,异常体系中的所有类和对象都具备一个独有的特点:可抛性。如想要对异常进行自定义时,必须要继承异常体系,因为只有异常体系中的对象才具备可抛性,才可以被throws和throw关键字所操作。异常处理的格式:

   try{需要被检测的代码}  catch(异常类 变量名){异常处理代码} finally{一定会被执行的代码}

3,对于异常的处理:

        3.1,声明异常时,建议声明更为具体的异常,这样处理得会更具体。

        3.2,对方声明几个异常,就对应几个catch块,不要定义多余的catch块,如果多个catch块中的异常出现继承关系时,父类异常 的catch块放在最下面。

        3.3,当在函数内部出现了throw抛出异常对象时,那么必须要给出相应的处理动作。要么在内部进行try处理,要么在函数上声明让调用者处理。一般在函数内现出现了异常,函数上都需要声明(RuntimeException及其子类除外)。


4,throws和throw的区别:

      1,throws使用在函数上,throw使用在函数内。

      2,throws后跟的是异常类,可以跟多个,中间用逗号隔开。throw后跟的是异常对象。

     3,throw单独存在时,下面不要定义语句,因为当发生异常时,程序会直接跳到catch中。

5,如何自定义异常信息?

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

   class FuShuException extends Exception

{

     FuShuException(String masg)

         {super(masg);}

}

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

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

    6.2,如果父类方法中抛出了多个异常,子类在覆盖该方法时,只能抛出父类异常的子类。

    6.3,如果父类或者接口的方法中没有异常抛出,子类在覆盖方法时,也不可以抛出异常。如果子类方法发生了异常,就必须要在 内部进行try处理,绝对不能把异常抛出去。

7,异常的好处:

      7.1,将问题代码进行封装。

      7.2,将正常流程代码和问题处理代码相分离,方便于阅读。

8,异常处理的原则:

     8.1,处理方式有两种,try或者throws;

     8.2,调用到抛出异常的功能 时,抛出几个,就处理几个。一个try对应多个catch.

     8.3,如有多个catch,父类catch放到最下面(如Exception)。

     8.4,catch内要定义针对性的处理方式,当捕获到的异常本功能处理不了时,可以在catch中继续抛出。

           try

             {throw new AException();}

          catch(AException e)

             {throw new BException();}

  练习:写一段代码计算出圆和长方形的面积。

            思路:1,圆和长方形都有自己属性。如半径,长和宽等。

                       2,面积可以是定义成接口,因为当需要算面积时就可以实现这个接口,而并不是每个圆和长方形必须计算它们的面积

                       3,当调用者运行这个代码时可能会出现异常情况,如传入的数据有小于或等于零的情况,我们需要对其进行相对应的处理。

    interface sharp

     {void getArea();}

  class NovalueException extends RuntimeException

{

     NovalueException (String masg)

         {super(masg);}

}

class Rec  implements Sharp

{

   private int len,wid;

   Rec(int len,iint wid)

     {

        if(len<=0 || wid<=0)

               throw new NovalueException("出现了非法值,请重新输入");

     else{

           this.len=len;

          this.wid=wid;}

      }

  public void getArea()

{

   System.out.println("长方形的面积:"+len*wid);

}

}

圆的面积和长方形的面积代码的思想一样,所以没写,参考上面长方形代码就可以了。

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值