黑马程序员_面向对象(3)_(异常)

来源:互联网 发布:淘宝开旗舰店费用 编辑:程序博客网 时间:2024/06/05 15:42

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

 

异常:就是程序在运行时出现的不正常情况
 异常由来:问题也是现实生活中的一个具体事物,也可以通过java的类的形式
 进行描述,并封装为对象。其实就是java对不正常情况进行描述后的对象体现。
 
对于问题的划分:两种:一种是严重的问题,一种是非严重问题。对于严重的,java通过Error类进行描述。
 对于Error一般不编写针对性代码对其进行处理。对于非严重的,java通过Exception类进行描述。
 对于Exception可以使用针对性的处理方式进行处理。因为项目中会出现特有的问题:
 而这些问题并未被java所描述并封装成对象, 所以对于这些特有的问题可以按照java的对问题封装的思想。
 将特有的问题,进行自定义的异常封装。
 

自定义异常。(必须是继承Exception类)
 需求:在本程序中,除数是负数也无法进行运算,那么久需要对这个问题进行自定义的
 描述。
 
自己定义的异常java虚拟机不认识,只能手动抛出。当在函数内部出现了throw抛出异常对象,那么必须要给对应的处理动作
 要么在内部try catch处理。要么在函数上声明让调用者处理。
 
 继承Exception的原因:
 异常体系有一个特点,因为异常类以及异常对象都会被抛出,他们都具备可抛性
 这个可抛性是Throwable这个体系独有的特点,只有这个体系中的类和对象才可以被throws
 和throw操作。

class FushuException extends Exception{private String msg;FushuException(String msg){this.msg=msg;}public String getMessage(){return msg;}//因为父类把这些都做完了,子类只要传入一个String类型的异常信息就可以了//FushuException(String msg){//super(msg)}}class Demo01{int div(int a,int b)throws FushuException{if(b<0)throw new FushuException("出现了除数是负数的情况了");//手动通过关键字throw抛出异常。return a/b;}}public class ExceptionDemo01 {public static void main(String[] args)  {Demo01 d=new Demo01();try{int x=d.div(4,-1);System.out.println("x="+x);}catch(FushuException e){System.out.println(e.toString());System.out.println("除数出现负数");}}}


 异常体系:
    Throwable
     |--Error
     |--Exception
      |--RuntimeException
  异常体系中的特点:异常体系中的所有类以及建立的对象都具备可抛。
       也就是说可以被throw和throws关键字所操作
       只有异常体系具备这个特点
  
  
  -----------------------------
  throw和throws的用法
  throw定义在函数内,用于抛出异常对象。
  throws定义在函数上,用于抛出异常类,可以抛出多个,用逗号隔开。
  
  
  当函数内容有throw抛出异常对象,并未进行try处理,必须要在函数上声明,都在编译失败。
  注意:RuntimeException 除外。也就是说,函数内如果抛出了该异常,函数上可以不申明。
  
  如果函数声明了异常,调用者需要进行处理,处理方法可以throws可以try
  异常有两种:
    编译时受检测异常
     该异常在编译时,如果没有处理(没有抛也没有try)编译失败
     该异常被表示,代表着可以被处理。
    运行时异常(编译时不检测)
     在编译时,不需要处理,编译器不检查。
     该异常的发生,建议不处理,让程序停止,需要对代码进行修正。
     
  注意:
  1.finally中定义的通常是 关闭资源的代码,因为资源必须释放。
  2.finally只有一种情况下不会执行,当执行到System.exit(0);finally不会执行。
  
  
  异常的好处:
    1.将问题进行封装。
    2.将正常流程代码和问题处理代码相分离,方便与阅读。
  异常的处理原则:
   1.处理方式有两种:try 或者 throws.
   2.调用到抛出异常的功能时,抛出几个,,就处理几个。
    一个try对应多个catch
   3.多个catch时,父类的catchh往下放。
   4.catch内,需要针对性的处理方式。不要简单的定义printStackTrack,输出语句,也不要不写。。
   当捕获到的异常,本功能处理不了时,可以继续在catch中抛出。

class NoValueException extends RuntimeException{NoValueException(String msg){super(msg);}}interface Sha{void getArea();}class Rec implements Sha{private int len,wid;Rec(int len ,int wid)throws NoValueException{if(len<=0||wid<=0)throw new NoValueException("出现负数了");this.len=len;this.wid=wid;}public void getArea(){System.out.println(len*wid);}}class Cic extends RuntimeException{private int radius;public static final double PI=3.14;Cic(int radius){this.radius=radius;}public void getArea(){if(radius<=0)throw new RuntimeException("出现负数了!");System.out.println(radius*radius*PI);}}public class ExceptionDemo02 {public static void main(String[] args) {try{//上面如果是RuntimeException则不用进行try catch处理。Rec r=new Rec(-3,4);r.getArea();}catch(Exception e){System.out.println(e.toString());}finally{System.out.println("over1");}System.out.println("over2");}}


 

0 0
原创粉丝点击