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

Java学习笔记(异常处理)

阅读更多

1) 异常处理机制
在程序运行过程中,如果某条语句执行出现意外(比如,零除错误,IO错误等),那么Java的虚拟机就会停下,不会继续执行后续的语句,而是由里到外(因为一个方法内部,异常捕获是可以嵌套的),沿被调用关系寻找异常处理模块,如果:
A) 最终找到异常处理模块,则转而执行异常处理模块中的语句,异常处理语句执行完成后,则继续执行异常处理模块的后续语句(可能是finally模块),如下:

public class ExceptionTest {

	public static void main(String[] args) throws Exception {
		try {
			CallSomeMethods.DoA1();
		} catch (ExceptionA e) {
			// TODO Auto-generated catch block
			HandlingSomething.PrintMsg(e.getMessage());//A2-7
		}
		System.out.println("执行完毕!");//A1-7,A2-8
	}
}
class ExceptionA extends Exception
{
	public  ExceptionA() {
		super("ExceptionA");
	}
	public  ExceptionA(String Msg) {
		super(Msg);
	}
}
class ExceptionA1 extends ExceptionA
{
	public  ExceptionA1() {
		super("ExceptionA1");
	}
}
class ExceptionA2 extends ExceptionA
{
	public  ExceptionA2() {
		super("ExceptionA2");
	}
}
class CallSomeMethods{

	public static void DoA1() throws Exception {
		// 1 异常处理代码模块开始
		try {

			// 2异常捕获代码块开始
			try {
				//要测试哪个异常,请把产生该异常的语句放在前面
				HandlingSomething.DoA3(); //A3-1
				HandlingSomething.DoA2(); //A2-1
				HandlingSomething.DoA1(); //A1-1
			} catch (ExceptionA1 e) {
				HandlingSomething.PrintMsg(e.getMessage());//A1-2
			} catch (ExceptionA e) {
				// 这里从新抛出只是为了演示finally块一定会被执行.
				// 继续抛出
				HandlingSomething.PrintMsg("继续跑出2");//A2-2
				throw new ExceptionA(e.getMessage()+":继续跑出2");//A2-3
			} finally {
				HandlingSomething.PrintMsg("这里总会执行1");//A1-3,A2-4,A3-2
			}
			// 2异常捕获代码块结束
			// 2异常后续语句,如果前面的异常被处理而又没有抛出新的异常就会被执行。
			System.out.println("这是异常捕获处理模块2的后续语句"); //A1-4
		} catch (ExceptionA e) {
			// 继续抛出
			HandlingSomething.PrintMsg("继续跑出1");//A2-5
			throw new ExceptionA(e.getMessage()+":继续跑出1");//A2-6
		}
		finally
		{
			HandlingSomething.PrintMsg("这里总会执行2");//A1-5,A2-7,A3-3
		}
		// 1 异常处理代码模块结束
		// 1异常后续语句,如果前面的异常被处理而又没有抛出新的异常就会被执行。
		HandlingSomething.PrintMsg("这是异常捕获处理模块1的后续语句");//A1-6
	}
}
class HandlingSomething
{
	//这里为了演示,所以只简单的抛出异常
	public static void DoA1() throws ExceptionA1
	{
	    throw new ExceptionA1();
	}
	//这里为了演示,所以只简单的抛出异常
	public static void DoA2() throws ExceptionA2
	{
	    throw new ExceptionA2();
	}
	public static void DoA3() throws Exception
	{
		
		throw new Exception("这个异常不处理!");
	}
	synchronized public static void  PrintMsg(String Msg) {
		SimpleDateFormat theA =new SimpleDateFormat("yyyyMMddHHmmss");
		System.out.println(Msg+":"+ theA.format(new java.util.Date()));
	}
}


B)如果找不打异常处理块,最后会由Java虚拟机进行处理,是否会结束程序,要看具体的程序和具体的异常,上述测试DoA3时是会结束程序的。
Java和C#的异常处理机制也是典型的责任链模式。
2) 捕获方式
用try块将可能产生异常的代码包含起来,接着就是异常匹配处理块,异常匹配处理块可以有多个,注意:
异常匹配是按顺序进行的,找到匹配的异常处理块后,后面的匹配就会放弃匹配,因此在书写匹配块时,在异常类继承体系中,层次越低的放在前面,
层次越高的在后面。因为异常匹配不是精确匹配优先,而是匹配顺序优先,匹配只要满足“是”关系就可以了,也就是如果一个异常类是A,那么A及A的
所有子异常类都能在异常类A匹配的地方得到匹配。

3) 比较:
与C#相比,Java的异常处理机制更加严谨一些,它要求你对可能的异常A要么处理,要么显示的向调用者声明你没有处理异常A,否则Java的编译器就会报编译错误。
当然事情都是两面性的,在编译期就保证异常得到正确的处理当然是好事,但这种机制也会带来一些问题,一是如果调用关系复杂,异常比较多,代码看起来就不那么纯粹,
会稍显凌乱;二是对程序员的要求会比较高,特别是在写牵扯到事务的底层代码时,程序员必须非常谨慎的对待异常的处理,不能屏蔽上层调用的事务机制。除非必要,对于涉及到事务机制的代码中的异常应该尽量抛给调用者去处理。


分享到:
评论

相关推荐

    Java学习笔记7.0

    《Java JDK6学习笔记》是作者良葛格本人近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型...

    瑜琅java学习笔记

    1 java起源 2 java语言概述 3 简单(基本)数据类型 4 运算符:java...8 继承:继承是面向对象编程技术的一块基石,因为它允许创建分等级层次的类 9 包和接口 10异常处理 11多线程编程 12输入/输出、小应用程序and others

    java学习笔记 初学者必读

    8.3. 处理异常 8-38 8.4. 捕捉多个异常 8-38 8.5. finally 声明 8-38 8.6. 异常调用栈 8-39 8.7. 异常层次 8-39 8.8. 一些未检查的异常 8-39 8.9. 写你自己的异常 8-39 8.10. 抛出你自己的异常 8-40 9. 八•图形用户...

    Java学习笔记(必看经典)

    本书是作者近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型、J2SE中标准的API等均进行了...

    观看韩顺平学习整理java的笔记到异常

    帮助大家复习java基础知识其中有 hashCode 2 toString 2 finalize 2 用已学知识做出简单的房屋出租系统 3 类方法使用注意事项和细节讨论 4 main()方法 4 代码块 4 代码块使用注意事项和细节 5 ...异常处理 2

    Java学习笔记之异常处理

    主要为大家详细介绍了Java学习笔记之异常处理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Java异常处理,非常适合Java爱好者

    有关Java异常情况处理的学习笔记,非常适合Java爱好者

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    chapter8 异常处理 231 8.1 语法与继承架构 232 8.1.1 使用try、catch 232 8.1.2 异常继承架构 235 8.1.3 要抓还是要抛 238 8.1.4 认识堆栈追踪 241 8.1.5 关于assert 245 8.2 异常与资源管理 247 ...

    Java/JavaEE 学习笔记

    Core Java学习笔记...........31 第一章 JAVA前言..31 第二章 标识符,关键字,类型........35 第三章 表达式与流控制....................41 第四章 数组.............50 第五章 对象和类(OO思想).........53 第...

    Java学习笔记(必看经典).doc

    里面包含基础知识,如修饰符,常用的关键字等,内部类,面向对象思想,异常处理相关知识点,常用集合知识点等等。

    Java 学习笔记极其详细版(包括一些个人色彩不仅仅是纯笔记)

    本Jva(Java)学习笔记是一份深入且详尽的教程,不仅包括Java的基础知识,还融入了作者的个人见解和实际编程经验。内容涵盖: Java基础:数据类型、控制流、异常处理。 面向对象编程:类与对象、继承、多态、封装。...

    java学习笔记.7z

    之前学习时写的java基础笔记,希望能够帮助到初学者。内容包含:概述、java的基本语法、面向对象、高级类特性、异常处理等...

    Java学习笔记

    java学习的笔记,回顾一些基本的要领,知识点,很有帮助 比如: Day Eight 异常: 异常的分类 Java会将所有的异常封装成对象,其根本父类为Throwable。 Throwable有两个子类:Error 和Exception。 Error:一个...

    JAVA语言学习笔记4-9

    JAVA语言学习笔记4-9 主要讲JAVA的OOP(面向对象) 封装 继承 多态 以及JAVA中的异常处理机制等

    Java JDK 5.0学习笔记(第二部分)

    本书是作者良葛格本人近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型、J2SE中标准的API...

    java 学习教学大纲笔记

    java 学习教学大纲笔记1.熟练掌握Java语言开发...7.熟练掌握Java语言中的异常处理机制 8.熟练掌握集合的使用 9.熟练掌握IO流的使用 10.了解范型的使用 11.了解反射机制 12.了解多线程的开发 合成一天 13.了解网络编程

    Java基础笔记.md

    适合Java初学者的学习笔记,涵盖了从软件安装,环境配置,到编码学习的基本内容,十分的详细。讲解了java的基础知识,适合初学者和小白使用。包含jdk的安装(建议安装版本1.8),java语言概念、基本数据类型、条件...

    JAVA(J2SEJ2EE)学习笔记pdf

    本人两个月来的学习笔记,经过老师的课件和总结精心整理而成。   内容包括:j2se语法、循环控制、OOP设计、方法设计、重写、重载、抽象类/方法、接口、异常处理、多线程、swing。以及部分oracle内容。   本笔记是...

    良葛格Java JDK 5.0学习笔记

    本书是作者良葛格本人近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型、J2SE中标准的API...

    java内部学习笔记.docx

    5.1 Java异常处理机制 49 5.2 File文件类 51 5.3 RandomAccessFile类 53 5.4基本流:FIS和FOS 55 5.5缓冲字节高级流:BIS和BOS 56 5.6基本数据类型高级流:DIS和DOS 56 5.7字符高级流:ISR和OSW 57 5.8缓冲字符高级...

Global site tag (gtag.js) - Google Analytics