黑马程序员------java的异常处理

来源:互联网 发布:淘宝拍卖会 编辑:程序博客网 时间:2024/05/22 03:43

android培训、java培训 

1,异常:异常就是程序在运行时出现的不正常情况。
2,异常的由来:问题也是现实生活中的一个具体事物,也可以通过java类的形式进行描述,并封装成对象。
      其实异常就是java对不正常情况进行对象封装后的一种体现。
3,异常可分为两种:一种是严重的问题Error,Exception。
    Throwable:
           Error:一般不编写针对性的代码进行处理。
           Exception:一般编写代码进行处理。
           异常的处理:try{
                   要被检测的语句。
                      }
                      catch(异常类型 e){
                        处理方式。
                      }
                      finally{
                        一定会执行的语句。
                      }
           常见处理方式:e.getMessage();
                  e.toString();
                  e.printStackTrace(); //打印异常名称,异常信息,异常的出现位置。
                             //jvm的默认处理方式就是调用printStackTrace()方法。
           第二种处理方式是:在功能上通过throws声明此功能可能会出现问题。调用者可以自己处理try{}catch(){},
                            也可以在调用者的方法上同样抛出用throws。
           对多异常的处理:应当声明更具体的异常。
                   对方声明了几个异常就应有几个catch块与之相对应。
                   父类的异常处理应该放在子类的下面。
4,自定义异常:1,在项目中会出现一些问题,这些问题并没有被java描述并封装成对象,所以就需要按照java中定义异常的思想
         将特有的问题进行自定义异常封装。
      2,自定义异常需要继承Exception或其子类,在使用时需要手动使用throw抛出该异常。
      3,当函数内部出现throw抛出异常时,要么在内部try catch处理,要么在函数上通过throws声明交给调用者处理。
         一般情况下当函数内部抛出异常时,函数上一定要声明这些异常。                  
           4,因为父类已经把异常信息的操作都完成了,所以在自定义异常中子类只需把异常信息通过super传递给父类。
           5,因为只有Throwable体系中的成员才具有可抛性,所以自定义异常需要是此体系中的子类,只有成为该体系的一员,
              才能被throw和throws操作。
           6,throws定义在函数上,throw定义在函数内。
           7,自定义异常不能抛出比其父类更多的异常。
             
           自定义一个异常类实例如下:

class FushuException extends Exception{           private double num;           FushuException(){           super();           }           FushuException(String message,int num){           super(message);           this.num = num;           }           public double getNum(){           return num;           }           }           class FushuDemo{           public double div(int a,int b)throw FushuException{           if(!b>0){           throw new FushuException("商不能为负数,出现负数的数字是:",b);           }           return a/b;           }           }           class FushuExceptionDemo{           public static void main(String[] args){           FuduDemo fd = new FushuDemo();           try{           double d = fd.div(5,-5);           System.out.println("结果为:"+d);           }           catch(FushuException e){           e.printStackTrace();           }           }           }

5,RuntimeException:运行时异常,是Exception的子类,如果函数内容抛出该异常,函数上可以不用声明,编译可以通过,
            如果函数上声明了该异常,调用者可以不用处理,编译可以通过。
            此异常不需要调用者处理,当该异常发生时,说明出现了不希望程序继续进行的情况,希望程序停止。
     实例如下: 

class FushuException extends RuntimeException{private double num;FushuException(String message){super(messgae);}}  class Demo{public double div(int a,int b){    //运行时异常不必在函数上声明。if(b<=0)throw new FushuException("b值不能为负数或0!");return a/b;} } class RuntimeDemo{Demo d = new Demo();//运行时异常可以不用处理。double dou = d.div(5,-2);System.out.println("结果是:"+dou);}  

6,异常的再次抛出
   当本级中捕获的异常传递给下一级异常接收者,下一级异常接受者无法理解时,需要转换成一个下一级能够理解的异常在抛出此异常,
   异常的抛出需要保证异常链不断。

原创粉丝点击