一起Talk Android吧(第十四回:Java中的异常)

144 阅读3分钟

各位看官们,大家好,上一回中咱们说的是Java面向对象综合练习的例子,这一回咱们说的例子是Java中的异常。闲话休提, 言归正转。让我们一起Talk Android吧!

看官们,介绍完面向对象的知识后,我们的代码也变的复杂起来,这时难免会产生一些错误。错误分为两种:

  • 一种是编译时的错误;
    
  • 一种是运行时的错误;
    

编译时的错误属于语法错误,这种类型的错误依据编译时产生的错误提示就能解决。运行时的错误需要跟踪并且分析代码才能解决,这种错误解决起来要复杂一些,不过Java提供了异常机制,专门用来协助解决这种运行时的错误。

我们还是通过伪代码来演示异常的处理形式:

try
{
    //可能发生异常的语句
}catch(异常类 异常对象)
{
     //异常处理语句
 } //... 可以有多个catch语句
 finally
 {
     // do something
 }

上面的伪代码中Catch语句块可以有多个,final语句块是异常的统一出口,不管是否存在异常都会被执行,它只能有一个,或者省略不写。异常类可以是自己定义的异常类,或者是Exception类.我们分析一下异常捕获与执行过程: 在try块中捕获异常,在catch中与捕获的异常进行匹配,这里的匹配主要是异常类对象的匹配。如果匹配成功则执行异常处理语句,否则继续匹配其它catch语句;如果没有匹配的catch语句,那么中断程序。

异常匹配成功后是如何处理异常的呢?通常是打印异常发生时的函数调用栈,具体操作为e.printStackTrace(); 这里的e是Exception类或者其子类的对象。通过打印的函数调用栈,我们可以快速定位异常发生的位置,进而找出发生异常的原因。

我们在实际的编程工作中,可以定义自己的异常,具体做法是继承Exception类。比如:

class MyException extends Exception
{
    //do something
};

不过这种情况不是很多,常用的是捕获并且处理程序中的异常。那么在什么时候需要处理异常呢?这就需要我们来判断,比如除法运算中的除0操作会引起异常,这时候就需要我们捕获并且处理异常。我们需要把除法操作到放到try语句块中,并且在catch语句块中捕获并且处理异常。除此之外,Java还提供了throws关键字,它用来修饰函数,如果某个函数使用了该关键字,那么我们在调用该函数时,必须捕获并且处理异常,不然会有语法错误。其伪代码如下:

void func() throws
{ 
    //do somethin 
}; 

try
{ 
    func(); 
}catch(Exception e)
{
    e.printStackTrace();
}

关于异常的代码,我们先不举例说明,在以后的章回中,我们会经常看到异常的身影。实际的练习的机会非常多,因此我们在本章回只说理论上的内容,具体的代码在以后的章回中大家将会看到。

各位看官,关于Java中异常的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!