黑马程序员 异常


---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------



1、——异    常:就是程序在运行时出现不正常情况。


异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述。并封装成对象。


                     其实就是java对不正常情况进行描述后的对象体现。


对于问题的划分:两种:一种是严重的问题,一种非严重的问题。


 


对于严重的,java通过Error类进行描述。


       对于Error一般不编写针对性的代码对其进行处理。


 


对与非严重的,java通过Exception类进行描述。


       对于Exception可以使用针对性的处理方式进行处理。


 


2、——异常处理:


java 提供了特有的语句进行处理。


try


{


       需要被检测的代码;


}


catch(异常类 变量)


{


       处理异常的代码;//(处理方式)


}


finally


{


       一定会执行的语句;


}


 


****************


第一个格式:


try


{


}


catch ()


{


}


 


第二个格式:


try


{    


}


catch ()


{


}


finally


{


}


第三个格式:


try


{    


}


finally


{


}


//记住一点:catch是用于处理异常。如果没有catch就代表异常没有被处理过,如果该异常是检测时异常。那么必须声明。



3、——对捕获到的异常对象进行常见(方法):


String  getMessage ( ) :获取 “异常信息”。 //(注意是否带返回值?)


String  toString ( )    :获取 “异常名称 : 异常信息”


void  printStackTrace () :获取”异常名称,异常信息,异常出现的位置”


 


其实jvm默认的异常处理机制,就是在调用printStackTrace方法//打印异常的堆栈的跟踪信息.;




4——异常声明:【throws】     “ 抛 ”


  // throws : “抛”的意思,定义的类可能有异常抛给后面的程序员处理


 


class Demo 


{


int div(int a,int b) throws Exception//通过throws的关键字声明该功能有可能会出现问题。


{


       return a/b;


}


}          


//如果后面的程序员解决不了此异常,可以再抛给JVM处理,通过在main行后再次做异常声明,(  如:public static void main­(String[] args) throws Exception {}   )


 


【多异常】


int div(int a,int b)throws 1Exception,2Exception


对多异常的处理:


1,声明异常时,建议声明更为具体的异常。这样处理的可以更具体。


2,对方声明几个异常,就对应有几个catch块。不要定义多余的catch块。


如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。


     ArithmeticException:算数异常; ArrayIndexOutOfBoundsException:角标越界异常


   (ArithmeticException,ArrayIndexOutOfBoundsException二者是Exception的子类)


 


(建立在进行catch处理时,catch中一定要定义具体处理方式。不要简单定义一句 e.printStackTrace(), 也不要简单的就书写一条输出语句。)


 


 


【自定义异常】  ——需继承下


因为项目中会出现特有的问题,


而这些问题并未被java所描述并封装对象。


所以对于这些特有的问题可以按照java的对问题封装的思想。


将特有的问题。进行自定义的异常封装。


 


1、需求:在本程序中,对于除数是-1,也视为是错误的是无法进行运算的。


那么就需要对这个问题进行自定义的异常描述。


 


2、当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。


要么在内部try catch处理。


要么在函数上声明让调用者处理。(再次声明“抛出”)


 


一般情况在,函数内出现异常,函数上需要异常声明。


 



区别:throws 与 throw


throws : 使用在函数上;后面跟的是异常类、可以跟多个、用逗号隔开。


throw :使用在函数内;后面跟的是异常对象。


 


【 RuntimeException 】 ——特殊的Exception子类异常


子父类关系:(Exception>>RuntimeException>>ArithmeticException)


特点:RuntimeException下的所有子类都不用异常声明


RuntimeException: 运行时异常。


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


如果在函数上声明了该异常。调用者可以不用进行处理(抛或try catch)。编译一样通过;


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


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


class Div


{


       public static int div (int a, int b )


       {


              if (b==0)


              throw new ArithmeticException("被零出啦!!!");  //特点在此,函数上可以不用异常声明


              int x = a/b;


              return x;


       }


}


class RuntimeException


{


       public static void main (String[] args )


       {


              int x = Div.div(4,0);


              System.out.println(x);


       }


}


【】


自定义异常时:如果该异常的发生,无法在继续进行运算,就让自定义异常继承RuntimeException。


 


【】


对于异常分两种:1,编译时被检测的异常。


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


(如果程序出现异常时不能处理就继承RuntimeException,如能处理要么抛要么 try)


 


【 finally 】 


       finally代码块:定义一定执行的代码。 (通常用于关闭资源)关闭数据库操作


代码示例:


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


public void method( ) throws NoException


{


       try


       {


              连接数据库;


              数据操作;  //throw new SQLException(); 如果数据库操作异常


       }


       catch (SQLException e)


       {


              会对数据库进行异常处理;


              throw new NoException() ; //处理完告诉调用者,如提示调用失败


       }


       finally


       {


              关闭数据库;  


       }


}


 


 


【】


注意:


1,finally中定义的通常是 关闭资源代码。因为资源必须释放。


2,finally只有一种情况不会执行。当执行到System.exit(0);—系统里面有静态exit退出方法


 


【】异常在 子父类 覆盖中的体现:


|--A异常


   |--B异常


|--C异常


 


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


2,如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。


3,如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。


       如果子类方法发生了异常。就必须要进行try处理。绝对不能抛。


class AException extends Exception  //A异常


{}


class BException extends Aexception  //B异常,A的子类异常


{}


class CException        //C异常        


{}


class Fu


{


       void show ( ) throws AException


       {}


}


class Zi extends Fu


{


       void show( ) throws BException //或者抛 AException ,就是不能抛CException;


或者子类什么都不抛


       {}


}

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值