`
tianmo2008
  • 浏览: 66871 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java的异常一

    博客分类:
  • java
阅读更多
写java代码,异常用的很多,但以前没有系统的去研究过,今天正好面试被一道异常题搞倒了,回家就把异常看了下,补补基础。
java中的异常类特别多,但我们关心只是以下类图中的部分。
java异常类的体系层次结构


从上图可以看出,所有的java异常都是从Throwable类派生而来的,主要分成两个分支,Error和Exception。
而Error体系描述的是java运行系统中的内部错误,出现这种异常,程序员基本是无能为力的,Error体系并不是我们需要太多研究的对象。剩下的就是Exception体系。

从类图中看,Exception体系也被分成两个主要分支,分别是IOException体系和RunTimeException体系。
RunTimeException体系异常指的是人为的编写出不合理的代码而导致的,
这些不合理的代码包括一下情况:
1:错误的类型转换。
2:数组越界访问。
3:访问空指针。
当出现以上情况的异常是,都说明是人为的代码问题,既然是人为的异常,自然要人为去避免。例如,
if(item < array.length)
{
  System.out.println(t[item]);
}

我们事先判断要访问的元素是否超出了数组的长度,这样就能避免因为访问越界的数组而发生ArrayIndexOutOfBoundsException异常。
以上的Error体系和RunTimeException体系在java异常中都被称为未检查异常。除了这两个体系异常,其他异常都称为已检查异常

抛出异常
::当java中一个方法遇到自己无法处理的情况时,就应该抛出异常。

以下是java抛出一个异常的方法
public void fun_test()throws IOException
{
 //....
 throw new IOException();
}

通过先在方法名后面用throws来声明要抛出的异常,然后再在方法体内用
通过new IOException()创建异常对象,并用throw把他抛出。当有多个异常时,就用“,”分割开:
public void fun_test()throws IOException,AlreadyBoundException
{
 //....
 throw new IOException();

 //....
 throw new AlreadyBoundException();

}


对于已经捕获的异常,如果捕获处理后还需要往上抛出的话,也可以用throw关键字把他再出抛出,如
public void fun_test()throws IOException{
  try{
    //... 
  }catch(IOException e)
  {
    //..
    throw e
  }
}

上面代码中虽然对IOException异常进行了捕获,处理后在catch块里继续把它往外抛.

捕获异常
java是通过try/catch或try/atch/finally代码快来捕获异常的。
具体如下:
try{
  //....
}catch(Exception e)
{
  //....
}


try{
  //.......
}catch(Exception e)
{
  //.....
}finally{
  //......
}


try代码块里面抛出了异常,而这个异常又是catch里指定的异常类型,则程序会停止执行try块中剩下的代码,并跳出try代码块。转而执行catch块里面的代码,
如果try里没有出现异常,则程序会直接忽略catch代码块,如果try的任何代码出现异常,而这个异常又没有在catch里指定,则方法会立即退出。
注意::如果调用的方法声明了会抛出异常,必须对它的异常进行处理,要么通过try/catch捕获它并处理,要么声明会抛出该异常,把异常继续往上抛。
同样,如果所负责的业务逻辑没法对一个异常进行处理,最好就是把它往上抛,抛到有合适的地方再进行处理。

try/atch/finally
try/atch/finally代码快是先执行try块,如果try块没有异常,就接着执行finally块,如果try出现异常,则停止并跳出try块,转而执行catch里的代码,再接着执行finally块里的代码。
所以,不管try里有没有出现异常,finally块里的代码是一定会被执行的。但有点要注意
看下面代码:
public class ExceptionTest {
   /**
   * @param args
   */
   public static void main(String[] args) {
       // TODO Auto-generated method stub
       System.out.println(ExceptionTest.Exc());
   }
	
   public static String Exc()
   {
       try{
       int i = 20/0;
   }catch(Exception e)
   {
       System.out.println("出异常了");
       return "返回catch";//在catch块里我们把函数return
   }finally{
       System.out.println("finally执行了");
   }
     return "正常返回";
   }
}


打印的结果是:
出异常了
finally执行了
返回catch


结果很明显,虽然在catch有return语句,并且catch块是比finally先执行的,但程序是先执行finally里的代码,再执行catch里的return 语句返回的。
(今天面试遇到这题,我误以为是先catch里的语句,因为catch有return所以直接返回,不会执行finally了,怪自己基础不扎实)。
(先写到这,找时间继续)




  • 大小: 20.7 KB
分享到:
评论

相关推荐

    java异常1.pdf

    java异常1.pdf

    java异常1[借鉴].pdf

    java异常1[借鉴].pdf

    Java异常是Java提供的一种识别及响应错误的一致性机制,Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序

    Java异常架构与异常关键字 Java异常简介 Java异常架构 1. Throwable 2. Error(错误) 3. Exception(异常) 运行时异常 编译时异常 4. 受检异常与非受检异常 受检异常 非受检异常 Java异常关键字 Java异常处理 声明...

    Java异常处理终结篇——如何进行Java异常处理设计 - 望远的个人页面 - 开源中国社区1

    摘要使用Java异常的人很多,但能合理使用的却不多,Java异常处理设计是一个冷门的话题,但好的异常设计会让程序有质的变化,所以本文从各个方面分析便总结了,在J

    java全局异常统一处理

    在Java异常处理机制中,当一个方法抛出异常时,该异常将被传递到调用该方法的方法中,直到找到能够处理该异常的代码为止。在这个过程中,Java使用了try-catch语句块来捕获和处理异常。通过在一个或多个catch语句块中...

    实验五 Java异常处理实验.docx

    实验五 Java异常处理实验.docx

    JAVA异常的概念

    一份好的PPT有关于JAVA,第一章异常的概念,让你浅知异常的基本概念和解决方法

    Java异常处理.xmind

    个人关于java异常处理的思维导图总结。0积分下载。如果认为有帮助,请关注点赞,日后还有更多免费资源。敬请关注。

    java异常处理.xmind

    java异常处理思维导图,自己根据尚硅谷的视频总结的思维导图,主要针对容易遗忘的知识点,方便自己记忆

    applenele#blog#java异常1

    checked exception(检查异常),也称非运行时异常(运行时异常以外的异常就是非运行时异常),java编译器强制程序员必须进行捕获处理,比如常见的I

    Java创建用户异常类

    从java异常类的结构层次可以看出,java类型的公共父类为Throwable.在程序运行中可能出现俩种问题:一种是由硬件系统或JVM导致的故障,java定义该故障为Error,这类问题是用户程序不能够处理的;另外一种问题是程序...

    利用java filter 实现业务异常拦截源码

    利用java filter 实现业务异常拦截 跳转到错误信息提示页面 我们在做项目中肯定都会遇到自定义业务异常 ,然后将业务异常信息跳转的统一的信息提示页面的情况,比如我们在struts的时候我们会用到struts的异常处理...

    Java 异常1

    1、运行时异常 RuntimeException类及其子类都被称为运行时异常,这种异常的特点是Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,

    Java异常处理入门.pptx.pptx

    Java异常的概念 Java异常是程序在运行过程中发生的问题,它们会打断程序的正常流程,需要程序员进行处理。 Java异常的类型 Java异常主要分为两大类:受检异常和非受检异常。受检异常需要在代码中显式处理,而非受检...

    深入探索 高效的Java异常处理框架

    什么时间使用runtimeException,什么时间使用Exception,大家有没有被困扰到?经整理,JAVA异常处理框架,以及如何构造自己的异常体系,讲得比较详细,值得一看。

    Java自定义异常类_1.txt

    Java自定义异常类_1.txtJava自定义异常类_1.txt

    Java异常处理细节分析

    Java的异常处理机制是其一大特色。本文对异常处理机制做了简要介绍,重点分析了try-catch-finally语句执行流程,举例说明了“突然中止”对异常处理过程的影响。

    java异常管理

    java开发中会遇到很多异常,本代码选择的是我们常常出现的对异常进行的封装,便于在一个模块下对异常进行管理

    JAVA异常入门(思维导图)

    1.异常的概念2.异常的分类3.捕获并处理异常(try……catch/finally)try……catch块 try……多catch块 try……catch/finally块 4.抛出异常throws5.自定义异常 自定义异常的来由 操作步骤 实例 5.小结 throw与throws的...

    Java 异常处理面试集锦及答案20道

    本文提供了二十道常见的面试题,涵盖了Java异常处理的基本知识、异常类型、异常处理机制、关键字、异常链等方面。这些问题旨在考察候选人对Java异常处理的理解和应用能力。通过阅读本文,您将能够深入了解Java异常...

Global site tag (gtag.js) - Google Analytics