`
tummyling
  • 浏览: 3171 次
社区版块
存档分类
最新评论

Java异常By荼荼小蘼

阅读更多

本文参考Link--浅谈Java异常

 

何谓Java异常,阻止当前方法或作用域继续执行的问题。

 

Java的异常体系:Throwable是Java语言中所有错误或异常的超类(包含一切可抛的东西)。他有两个子类,Error和Exception。

 

Error:用于指示合理的程序不应该试图捕获的严重问题。比如说VirtualMachineError,当JVM崩溃或用尽了他继续操作所需的资源,抛出该错误。

 

Exception:分为两大类--

Runtime Exception(也叫Checked Exception)

Unchecked Exception(非Runtime Exception)

 

异常处理方法

处理方式1:将异常捕获try...catch

处理方式2:将异常继续向外抛出

 

异常的使用

   Case 1:

try
    {
         // 可能发生异常的代码
        // 如果发生了异常,那么异常之后的代码都不会被执行
    }
    catch (Exception e)
    {
        // 异常处理代码
    }
    finally
    {
        // 不管有没有发生异常,finally语句块都会被执行
    }

 

  Case 2: 重新抛出异常

      原封不动的把这个异常抛给上一级,抛给调用这个方法的人,让他伤脑筋去吧。

 

  Case 3:异常链的使用及丢失

     为了避免异常链丢失,可在抛出异常前,调用initCause()初始化改异常的原因,这样在调用e.printStackTrace()时,会将上一层的异常也打印出来。

        如: e.initCause(a);

 

  Case 4: 清理工作

      如果一些消耗资源的操作,如IO、JDBC,用完之后没有及时正确的关闭,那后果会很严重,意味着内存的泄露。

public void readFile() {
        BufferedReader reader = null;
        try {
            try {
                reader = new BufferedReader(new InputStreamReader(
                        new FileInputStream("file")));
                // do some other work
 
                // close reader
            } finally {
                reader.close();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 

  Case 5: 异常的误用

      有些人喜欢直接用一个Exception来捕捉所有的异常,这是其实是最傻最二的方法了,根本无法分清是由什么引起的异常。

      异常时程序处理意外情况的机制,当程序发生意外时,我们需要尽可能多的得到意外的信息,包括发生的位置,描述,原因等等。这些都是我们解决问题的线索。如果我们自己写代码,应尽可能多的对这个异常进行描述,比如说为什么会出现这个异常,什么情况下发生这个异常。如果传入方法的参数不正确,告知什么样的参数是合法的参数,或者给出一个Sample。

      还有一点,应将try block写的简短,不要将所有的东西都扔在这里。尽可能分析出是哪几行代码可能出现异常,只对可能出现异常的代码进行catch。尽量为每一个异常都写一个try...catch,避免异常丢失。因为一个try后面的多个catch中,最多只会有一个catch块被执行。

 

Case 6:try块中有return语句时, 仍然会首先执行finally块中的语句,然后方法返回。

              如果try块中存在System.exit(0)语句,那么就不会执行finally块中的代码,因为System.exit(0)会终止当前运行的JVM,程序会在JVM终止前结束执行。

1
3
分享到:
评论
2 楼 nichlas_yu 2015-01-26  
使用的时候copy,学习了。
1 楼 bitray 2015-01-26  
多调用try catch对性能有影响。而且很多情况下是非受检异常的抛出。这种情况你没办法catch

相关推荐

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

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

    Java 面经手册·小傅哥.pdf

    这是一本以面试题为入口讲解 Java 核心内容的技术书籍,书中内容极力的向你证实代码是对数学逻辑的具体实现。当你仔细阅读书籍时,会发现Java中有大量的数学知识,包括:扰动函数、负载因子、拉链寻址、开放寻址、...

    7个Java小游戏源代码

    7个Java小游戏源代码 解压密码是:yykings

    Java小游戏之数字彩虹雨

    【Java小游戏之数字彩虹雨】是一款基于Java编程语言开发的小型互动程序,灵感来源于电影《黑客帝国》中的经典视觉效果——“数字雨”。这个小游戏旨在为初学者提供一个实践Java编程、图形用户界面(GUI)设计以及动画...

    java错误处理:java.lang.OutOfMemoryError: Java heap space

    其中,“java.lang.OutOfMemoryError: Java heap space”是一种常见的异常情况,它表明Java虚拟机(JVM)的堆内存空间已耗尽。 #### 标题和描述中的知识点详解 **标题:“java错误处理:java.lang.OutOfMemoryError:...

    java增删改查小项目

    这个“java增删改查小项目”旨在教授如何使用Java进行基本的数据库操作,包括添加(Insert)、删除(Delete)、修改(Update)和查询(Select)数据。下面我们将深入探讨相关的Java和MySQL知识点。 1. **Java数据库...

    java小蜜蜂游戏

    【Java小蜜蜂游戏】是一款基于Java编程语言开发的桌面游戏,其主要特点是采用了图形用户界面(GUI)来呈现游戏画面,让玩家能够通过直观的视觉交互进行操作。这款游戏的实现充分体现了Java在创建桌面应用程序方面的...

    java源码包---java 源码 大量 实例

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    Java 中文入门学习手册合集[chm版]

    第八章 Java的"异常" 第九章 Java输入输出操作 java新手教程.chm JAVA_精通swing程序设计.chm JAVA_类库中文版Java API_Sun公司官方出版.chm JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    Java开发技术大全(500个源代码).

    firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 accumulationByDoWhile.java 用do~while语句写的累加程序 ...

    java文件夹按时间、大小等排序

    在Java编程中,对文件夹中的文件进行排序是一项常见的任务,尤其在处理大量数据或进行自动化操作时。这里我们将深入探讨如何使用Java实现文件按时间、大小等属性进行排序的功能。 首先,我们要引入`java.io.File`类...

    java 150个小实例源码

    这个"java 150个小实例源码"集合为初学者提供了一个绝佳的学习资源,通过实践来掌握Java的基础与进阶知识。以下是根据这些实例可能涵盖的一些关键知识点的详细解释: 1. **基础语法**:实例可能包含变量声明、数据...

    疯狂Java实战演义【书+源码】(疯狂Java讲义课后习题项目)

    Java的异常体系包括检查型异常和运行时异常,学习如何正确地捕获和处理异常,可以预防程序在运行时出错。源码中会有各种异常处理的示例,帮助读者掌握这一关键技能。 再者,Java集合框架是处理数据结构和算法的重要...

    Java2Pas Java代码转pas代码

    Java2Pas是一个实用工具,主要用于将Java编程语言编写的源代码转换为Pascal语言的等效代码。这个工具对于那些需要在两种语言之间迁移代码或者理解不同编程语言语法的开发者来说非常有价值。Java和Pascal虽然都是面向...

    Java小游戏之愤怒的小鸟

    《Java小游戏之愤怒的小鸟》是一款基于Java编程语言开发的休闲娱乐游戏,旨在提供一个学习和交流编程技术的平台。这款游戏的实现充分展示了Java在图形用户界面(GUI)设计、事件处理、对象动画以及游戏逻辑等方面的...

    java程序自动重新启动

    在Java编程中,有时我们需要设计一个程序来实现自动重启的功能,比如在系统出现异常或者更新后需要自动恢复服务。在给定的标题"java程序自动重新启动"中,我们可以理解这是一个实现了自动重启逻辑的Java程序。描述...

    java小游戏(适合初学者)

    Java小游戏是许多初学者入门编程时常常接触的项目,它能帮助学习者在实践中理解Java语言的基本概念和机制。这个“java小游戏”标题所指的应该是一个简单的Java编程项目,适合那些刚开始接触编程或者Java的人。游戏...

    Java学生成绩管理系统小程序源代码

    根据提供的文件信息,我们可以分析...综上所述,该Java学生成绩管理系统小程序不仅覆盖了Java基础语法、面向对象编程思想等知识点,还涉及到了文件操作、数据结构应用、异常处理等多个方面,是一份较为全面的学习资料。

    java转js工具

    - 关键点包括处理Java的类和对象系统、异常处理、包和导入、以及Java标准库的映射等。 3. **工具特点** - 源程序转换:这类工具的目标是尽可能保持源代码的逻辑和结构,以便开发者能理解并维护转换后的JavaScript...

    java7 32位版

    Java 7 32位版是Java开发工具集(Java Development Kit, JDK)的一个特定版本,专为32位操作系统设计。在计算机编程领域,Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(后被Oracle公司收购)开发并...

Global site tag (gtag.js) - Google Analytics