黑马程序员——异常

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

 

异常,就是程序在运行时出现不正常情况,它是java对不正常情况进行描述后的对象体现。

除了异常外,还有另一种情况会导致程序中断,就是错误。

在java中出现问题有两种情况:第一种是严重的问题——Error错误: 这是合理的程序中,不应该处理的问题,一般不编写针对性的代码进行补救和处理。第二种是非严重的问题——Exception异常:这是合理的程序中,应该处理的问题,可以通过针对性的处理方式进行处理。其实无论Error或者Exception都具有一些共性内容,所以将这些共性内容抽取出来定义了一个类Throwable,它是Error,Exception的父类,是Java 语言中所有错误或异常的超类。

异常都是运行时才会发生的,是程序业务的问题,不是语法问题,语法问题在编译时期就会报编译错误。

异常可以进行捕获,从而进行异常的处理,异常被处理掉后,程序可以正常执行。

异常处理的方式:

1.主动处理——使用try—catch代码块

try{

需要被检测的代码;

}catch(异常类 变量){

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

}finally{

一定会执行的语句;

}

在Exception异常类中,提供了几个方法可以将异常信息输出。如getMessage()方法是将异常信息封装成字符串;toString()方法封装的是异常名称和异常信息;printStackTrace()方法直接将异常名称、异常信息和异常位置打印出来,这种方法就是java虚拟机默认的异常处理机制,打印异常的堆栈跟踪信息。

对于上述的处理方法,如果try代码块中存在多种异常,首先声明异常时建议声明更为具体的异常,这样对于后续的处理可以更具体;然后根据这些声明出来的异常对应写catch代码块,在进行异常捕获时,如果多个catch块中的异常出现继承关系,要记得先捕获小异常,再捕获大异常。这样做的原因是,如果出现了小异常而先是检测到大异常,那么小异常也会以大异常的处理方式进行处理,那么小异常的捕获代码块永远无法被使用。

2.消极处理

在java中,如果该异常你不想或者没法解决,可以直接使用throws关键字将异常抛出,具体位置可以是异常出现的类或者方法。如:classDemo throws Exception,public void test() throwsException{}。Throws后面跟的异常类也可以不只一个,但是多个异常时要用逗号隔开。同时throws也是作为一个声明,提醒后续的程序编写在使用时要处理这些异常。

虽然在Exception中定义了很多种异常,但是在一个项目中总会出现一些特有的问题,而这些问题并未被java所描述被封装成对象,所以对于这些特有的问题我们可以进行自定义的异常封装,形成自定义异常。

要定义一个类具有异常的特征,那么首先这个类要继承Exception。只有继承Exception,这个类才能具备可抛性,才能被throws和throw(用于手动抛出异常)操作。然后,对于这个异常类,需要自定义异常信息,由于父类中已经把异常信息的操作都完成了,所以子类只要重载构造方法,一个无参构造方法,一个接受String对象的构造方法。在各个构造方法内部用super语句调用父类对应的构造方法。

例如:

class FuShuException extendsException{

    private intvalue;

   FuShuException(){

       super();

    }

   FuShuException(Stringmsg){

       super(msg);

  }

}

对于自定义的异常,要在程序中使用throw语句定义何时抛出异常。

class Demo{

    int div(int a,int b)throws FuShuException{

       if(b<0)

           throw new FuShuException("出现了除数是负数的情况");

           //手动通过throw关键字抛出一个自定义异常对象。

        return a/b;

     }

}

最后,对于抛出的异常,可以进行try处理,也可以抛出让后续程序处理,这里先抛出。

 

在Exception中,存在一个特殊的子类异常RuntimeException(运行时异常)。如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过;如果在函数上声明了该异常,调用者可以不用处理,编译一样通过。之所以不用进行处理,是因为当该异常发货是呢过,就是希望程序停止。因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正。

自定义异常如果希望该异常以发生,程序就无法再继续进行运算,就让自定义异常继承RuntimeException。

补充:

异常分为:

运行时异常:一般是指程序员疏忽而导致的异常,这些异常是可以避免的。它包括RuntimeException以及它的子类。这类异常在编写代码时可以不用捕获。

检查异常:和程序外在因数有关的操作是,可能会发生的异常。比如,在编写代码访问某个文件时,按照java访问文件的语法编写代码,但是文件存在与否就会有两种结果。检查异常就会强制要求我们进行异常的捕获。

 

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

 详细请查看:http://edu.csdn.net

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值