一、要达到的效果
如果出现错误而是某些操作没有完成,程序应该:
(1)返回到一种安全状态,并能够让用户执行一些其他的命令。
(2)允许用户保存所有操作的结果,并以适当的方式终止程序。
 
异常处理的任务就是将控制权从错误产生的地方转移到能够处理这种情况的错误处理器
 
二、异常分类:
1、Throwable
       -
       ---------Error
       -     -
       -     ------- XXXX
       -      -
       -      ----- XXXXX
       ---Exception   
       -      -                 
       -      -
       -      -----IOException
       -      -
       -      -
       -      ----RunTime Exception
       -
       -
Error错误:                       描述了Java运行时系统的错误和资源的耗尽错误。程序不应该抛出这种类型的对象。
Runtime Exception错误:如果出现这种错误就证明是你问题,应该在编程中加以检查避免。
IOException错误:           程序本身没有问题,但由于像I/O错误这类问题导致的异常属于此类异常。
 
派生于RuntimeException的异常包括:
(1)错误类型转换
(2)数组越界访问
(3)访问控指针
不是派生于RuntimeException的异常包括:
(1)试图在文件尾部后面能读取数据
(2)试图打开一个不存在的文件
(3)试图根据给定的字符串查找Class对象,而这个字符串表示的类并不存在。
 
2、已检查异常 与 未检查异常
Java语言规范将派生于Error和RuntimeException的异常称为 不被检查异常(要运行之后才知道错误), 其他异常称为 被检查异常(编译时期就能够检查到错误)。
 
不被检查异常/未检查异常 包括:
(1)空指针引用
(2)数组访问越界
(3)错误转换类型等。
 
被检查异常/已检查异常(Java的编译器对代码的一种检测) 包括:
(1)IOException类及其子类

三、声明检查时异常

public FileInputStream(String name) throws FileNotFoundException

这样编译器就会从其首部就可以知道这个方法将会抛出什么异常。

什么时候应该抛出异常?下面四种情况:

(1)调用一个抛出 已检查的异常 的方法,如FileInputStream构造器(可控可处理)

(2)程序运行时发现的错误,并且利用throw抛出一个已检查的异常(可控可处理)

(3)程序出现错误,例如a[-1]=0会抛出一个ArrayIndexOutOfBoundsException 这样的未检查异常(应该避免)

(4)Java虚拟机和运行时库出现内部错误(未检查异常,属于Error异常)(预料不到
如果出现前两种情况时,必须告诉调用这个方法的程序员有可能抛出异常。

【编者感悟】为什么要这样设计?如果检查时异常对(3)情况负责,那么将会出现一堆不对程序负责的代码,而靠异常检测对程序的运行风险承担责任,这显然不是Java异常设计的初衷。不对(4)情况声明是因为这种错误出现的概率低,第二出现后你也降低不了它带来的损失,只能停止程序执行。

声明多个已检查的异常可以如下,记得逗号隔开:

class MyAnimation

{

public Image loadingImage(String s) throws FileNotFoundException, EOFException

}

四、抛出异常

String readData(Scanner in) throws EOFException

{

...

while(...)

{

if(!in.hasNext())

{

if(n < len)

throw new EOFException();

}

}

}

五、捕获异常

public void read(String file)

{

    try{

InputStream in = new FileInputStream(file);

int b;

while((b = in.read()) != -1)

[

//PROCESS INPUT

}

}catch(IOException exception){

exception.printStackTrace();

}

}

编辑整理:Claruarius,转载请注明出处。

Java异常(1)的更多相关文章

  1. 浅谈java异常[Exception]

    学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java! 一. 异常的定义 在<java编程思想 ...

  2. 基础知识《十》java 异常捕捉 ( try catch finally ) 你真的掌握了吗?

    本文转载自  java 异常捕捉 ( try catch finally ) 你真的掌握了吗? 前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理 ...

  3. Java异常体系及分类

    上图是基本的java异常体系结构. 主要分为2大类:Error和Exception 1.Error:描述了Java运行系统中的内部错误以及资源耗尽的情形.应用程序不应该抛出这种类型的对象,一般是由虚拟 ...

  4. Java异常之自定义异常

    哎呀,妈呀,又出异常了!俗话说:"代码虐我千百遍,我待代码如初恋". 小Alan最近一直在忙着工作,已经很久没有写写东西来加深自己的理解了,今天来跟大家聊聊Java异常.Java异 ...

  5. 第11章 Java异常与异常处理

    1.Java异常简介 1.什么是异常异常出现的时候代码会无法正常运行下去,会产生各种问题2.捕捉异常的作用提早发现异常,方便查找问题,并给出解决方法3.Java中的异常1.Java中所有不正常的类都是 ...

  6. java 异常

    1.java异常 2.自定义抛出 3.运行时异常,程序有问题,让使用者可以改' ' 4.return  和  throw的区别 return 符合函数要求的值    throw  有问题的时候用它结束 ...

  7. 3.Java异常进阶

    3.JAVA异常进阶 1.Run函数中抛出的异常 1.run函数不会抛出异常 2.run函数的异常会交给UncaughtExceptionhandler处理 3.默认的UncaughtExceptio ...

  8. 2.Java异常学习

    1.Java异常的概念 异常的例子 1.除法就是一个需要捕获异常的例子,除数又可能是0 异常处理的基本流程如下 一旦发生异常,就使得程序不按照原来的流程继续的运行下去 a.程序抛出异常 try{ th ...

  9. java异常架构图 和几个面试题

    1.java异常架构图 粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被 ...

  10. 黑马----JAVA异常

    黑马程序员:Java培训.Android培训.iOS培训..Net培训 黑马程序员--JAVA异常 一.JAVA异常有三种语句块:try语句块.catch语句块.finally语句块. 1.try语句 ...

随机推荐

  1. 【UML】——为什么要使用UML

    以前一提到UML,就想到了复杂的流程图.很敬佩哪些想想就能画出整个系统的UML图的人,因为他们头脑中有整个软件架构的蓝图,这样在编写实现的时候,就会知道哪个地方改怎么做,哪个地方如何扩展. 而想成为架 ...

  2. 剑指OFFER之合并有序链表(九度OJ1519)

    题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则.(hint: 请务必使用链表.) 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测 ...

  3. BZOJ 4291: [PA2015]Kieszonkowe 水题

    4291: [PA2015]Kieszonkowe Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnli ...

  4. UVA 12627 - Erratic Expansion

    一个红球能够分裂为3个红球和一个蓝球. 一个蓝球能够分裂为4个蓝球. 分裂过程下图所看到的: 设当前状态为k1.下一状态为k2. k1的第x行红球个数 * 2 ⇒ k2第2*x行的红球个数. k1的第 ...

  5. [置顶] 【玩转cocos2d-x之七】场景类CCScene和布景类CCLayer

    原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12708811 场景类CCScene和布景类CCLayer都是作为一个容器来使 ...

  6. 自学JavaScript笔记

    最近看了一段时间的<JavaScipt高级编程设计>由于记性不是很好,经常性的看了又忘记:想一些文字整理在自己的博客上,方便没事都可以拿出来看一下: 第一章 JavaScript概述   ...

  7. ajax_for example

    asp.net mvc 使用Ajax调用Action 返回数据.   使用asp.net mvc 调用Action方法很简单. 一.无参数方法. 1.首先,引入jquery-1.5.1.min.js ...

  8. CCCatmullRomTo&CCCatmullRomBy

    注: 云形线(Catmull-Rom curve曲线) 云线(Spline或B-spline)在数学上有很多种类,常用的三阶云线有Hermite, Bezier, Uniform B-spline, ...

  9. C# 之 SqlConnection 类

    一.常用属性 [1]ConnectionString  获取或设置用于打开 SQL Server 数据库的字符串. (重写 DbConnection.ConnectionString.) [2]Con ...

  10. IIS7下w3wp.exe进程CPU100%问题解决办法

      IIS下经常会出现w3wp.exe进程的CPU使用率达到100%的情况,在IIS7出现之前,要想确定问题所在,可以通过WinDbg来调试分析,但整个过程对技术水平要求非常高,可以参考http:// ...