黑马程序员_异常

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

异常:就是不正常,是指程序在运行时出现的不正常情况。其实就是程序中出现的问题。这个问题按照面向对象思想进行描述,并封装成了对象。因为问题的产生有产生的原因、有问题的名称、有问题的描述等多个属性信息存在。当出现多属性信息最方便的方式就是将这些信息进行封装。异常就是java按照面向对象的思想将问题进行对象封装。这样就方便于操作问题以及处理问题。

 

出现的问题有很多种,比如角标越界,空指针等都是。就对这些问题进行分类。而且这些问题都有共性内容比如:每一个问题都有名称,同时还有问题描述的信息,问题出现的位置,所以可以不断的向上抽取。形成了异常体系。

 

异常的体系  Throwable

Error

通常指JVM出现重大问题如:运行的类不存在或者内存溢出等。

不需要编写针对代码对其处理,程序无法处理。

Exception

在运行时运行出现的一些情况,可以通过try,catch,finally处理

 

异常处理两种方式:

1、捕获异常:try catch           直接处理可能出现的异常!

2、声明异常:throws               声明告诉调用者可能的异常,暴露问题,调用者自己处理!

[java]  view plain copy
  1. class Demo{  
  2.                int dvs(int a ,intb){  
  3.               return a/b;}  
  4. }  
  5. class ExceptionDemo {  
  6.        public static void main(String[] args) {  
  7.               /*最开始的语句 
  8.               Demo d =newDemo(); 
  9.               intx=d.dvs(4,0); 
  10.               System.out.println("x="+x);*/  
  11.               Demo d= new Demo();  
  12.               try{  
  13.               int x=d.dvs(4,0);  
  14.               System.out.println("x="+x);  
  15.                       
  16.               }  
  17.               catch (Exception A)  
  18.               {  
  19.                      System.out.println("除数不为0");  
  20.                      System.out.println(A.getMessage());//  / by zero;  
  21.                      System.out.println(A.toString());//异常名称:异常信息。  
  22.                      A.printStackTrace();//异常名称,异常信息。异常出现的位置。  
  23.                                          //其实JVM异常处理机制默认就是printStackTrace方法  
  24.                                          //打印异常的堆栈的跟踪信息。  
  25.               }  

自定义异常 

1当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。 要么在内部try catch处理。要么在函数上声明让调用者处理。简明一句话:一般情况下,函数内出现异常,函数上需要声明。

2 必须是自定义类继承Exception。或者RuntimeException,一是为了让该自定义类具备可抛性,二是让该类具备操作异常的共性方法。

 

当要定义自定义异常的信息时,可以使用父类已经定义好的功能。

              classMyException excends Exception

              {

                     MyException(String message)

                     {

                            super(message);

                     }

              }

继承Exception原因:

异常体系有一个特点:因为异常类和异常对象需要被抛出。

他么都具备可抛性。这个可抛性是Throwable这个体系中独有特点。

只有这个体系中的类和对象才可以被throw和throws操作。


throws和throw的区别


(1)throws使用在函数上,throw使用在函数内。
(2)throws后面跟的是异常类,可以跟多个,用逗号隔开。throw后面跟的是异常对象。  
注意:throw单独执行对象完毕,后面不要再加语句。因为执行不到。就像return后面不加语句一样。

RuntimeExceptiony异常


 
1   Exception中有一个特殊的子类异常RuntimeException运行时异常。


如果在函数内容抛出该异常,函数上可以不用声明。编译一样通过。


如果在函数上声明该异常,调用者可以不用进行处理,编译一样通过。


 


2    之所以不用在函数声明,是因为不需要让调用者处理。


当该异常发生,希望程序停止,因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正。


3     自定义异常时:如果该异常的发生,无法在继续进行运算,


就让自定义异常继承RuntimeException。


4      对于异常分两种:


(1)编译时被检测的异常。


(2)编译时不被检测的异常(运行时异常,RuntimeException以及其子类)


// 下面为另外一个RuntimeException例子


[java] view plaincopy
class FuShuException extends RuntimeException{  
              FuShuException(String message){  
              super(message);  
       }  
}  
class Demo{   
        int Div(int a,int b){              
               if(b<0)  
                      throw new FuShuException("出现了除数为负数");  
               if(b==0)  
                      throw new ArithmeticException("被零整除啦");  
               return a/b;  
       }  
}  
class  ExceptionDemo5{  
       public static void main(String[] args) {  
              Demo d = new Demo();         
                     int x = d.Div(4,-1);  
                     System.out.println(x);  
       }  
}  
   

Finally最终都会执行的语句


假设:


       class NoException


       {


      


      } 


public void method()throws NoEception


{


       连接数据库;


       数据操作://shrow new SQLException();


       关闭数据库://该动作,无论数据操作是否成功,一定要关闭资源。


}


try


{


连接数据库;


       数据操作:


}


catch(SQlEception a)


{


       会对数据库进行一次处理;


throw new NoException();


//抛出对外暴露可以识别的另外一个错误.


//比方说外部的销售科员要拿货这里的catch是仓


//库员处理的内容,他要处理货物的事情,因为销//售员只要知道有没有货,其他不是他的工作范


//围,那么catch仓库员就只抛出一个问题:就是


//告知销售员没货的问题就可以了。这就叫问题的封装                            


}


finally


{


关闭数据库


}


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


一种情况会执行不到就是在catch语句中定义了


System.exit(0); //属于系统退出。执行不到finally咯

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值