- 浏览: 704906 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (272)
- Struts1.x (7)
- 事务 (2)
- Hibernate (11)
- 数据库 (14)
- JavaScript&Ajax (43)
- JSP&Servlet (2)
- Flex (1)
- 其它 (9)
- Java (22)
- 框架集成 (1)
- WebService (3)
- Tomcat (3)
- 加密和安全登录 (13)
- 基于原型的JavaScript (0)
- JavaDoc和Java编码规范 (3)
- CAS (1)
- 加密 (1)
- Axis2 (10)
- Ext2.x (3)
- SSH整合 (2)
- Ext (0)
- 正则表达式 (1)
- 设计模式 (4)
- 对象序列化技术 (3)
- CVS (2)
- Struts2 (6)
- Spring 2.x (7)
- Spring Security (2)
- Java 课程 (20)
- 程序员之死 (1)
- 软件测试 (6)
- UML (5)
- NetBeans (1)
- cxf (1)
- JMS (13)
- 设计 (5)
- ibatis2.x (3)
- Oracle (1)
- WebSphere (7)
- 概要设计 (1)
- DB2 (10)
- PowerDesigner (0)
- 软件工程 (5)
- rose (1)
- EA (1)
- LDAP (7)
- Portal&Portlet (3)
- MQ (10)
- ESB (4)
- EJB (2)
- JBoss (2)
最新评论
-
typeRos:
只有配置文件,没有代码么大神
Spring实现IBMMQ的JMS消息发布/订阅模式 -
panamera:
如果ActiveMQ服务器没有启动,这个时候消息生产者使用Jm ...
Spring JMSTemplate 与 JMS 原生API比较 -
lian819:
顶1楼, 引用文件, 配置属性, 太方便了
EXTJS 同步和异步请求 -
wilhard:
说得清楚明白
<%@ include file=""%>与<jsp:include page=""/>区别 -
刘琛颖:
总结的很好。受益了
javascript 父窗口(父页面)— 子窗口 (子页面)互相调用的方法
一、异常处理机制
1、使用 try...catch 捕获异常
try
{
// 业务实现代码
...
}
catch(Exception e)
{
// 异常处理程序
}
如果执行 try 块里的业务逻辑代码时出现异常,系统会自动生成一个一场对象,该异常对象被提交给 Java 运行时环境,这个过程被称为抛出 (throw) 异常。
当 Java 运行时环境收到异常对象时,会寻找能处理该异常的 catch 块,如果找到合适的 catch 块并把该异常对象交给该 catch 块处理,那个过程被称为捕获 (catch) 异常;如果 Java 运行时环境找不到捕获异常的 catch 块,则运行时环境终止,Java 程序也将退出。
2、异常类的继承体系
try
{
// 业务实现代码 // 如果这里出现异常,系统生成异常对象 ex
...
}
catch(ExceptionClass1 e1) // ex instanceof ExceptionClass1 == true , 程序进入该 catch 块,并且不会向下执行
{
// 异常处理程序
}
catch(ExceptionClass2 e2) // ex instanceof ExceptionClass2 == true
{
// 异常处理程序
}
……
Java 将所有非正常情况分为两种:异常(Exception)和错误(Error),它们都是继承 Throwable 父类。
Error 错误,一般是指虚拟机相关的问题,如系统崩溃、虚拟机处错误、动态连接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断。通常应用程序无法处理这些错误,因此应用程序不应该试图使用 catch 块来捕获 Error 对象。在定义该方法时,也无须在其 throws 子句中声明该方法可能抛出 Error 及其任何子类。
异常捕获的原则:先处理小异常,再处理大异常。
3、访问异常信息
所有异常对象都包含了如下几个常用方法:
- getMessage()
- printStackTrace()
- printStackTrace(PrintStream s)
- getStackTrace
4、使用 finally 回收资源
有时程序在 try 块里打开了一些物理资源(例如数据库连接、网络连接和磁盘文件等),这些物理资源都被必须显式回收。
finally 块总会被执行。
try
{
// 业务实现代码 // 如果这里出现异常,系统生成异常对象 ex
...
}
catch(ExceptionClass1 e1) // ex instanceof ExceptionClass1 == true , 程序进入该 catch 块,并且不会向下执行
{
// 异常处理程序
}
catch(ExceptionClass2 e2) // ex instanceof ExceptionClass2 == true
{
// 异常处理程序
}
……
finally
{
// 资源回收块
……
}
finally 块是一定会被执行的程序。
示例:
public static void main(String[] args)
{
FileInputStream fis = null;
try
{
fis = new FileInputStream("a.txt");
}
catch (IOException ioe)
{
System.out.println(ioe.getMessage());
//return语句强制方法返回
//return ;
//使用exit来退出虚拟机
System.exit(1);
}
finally
{
//关闭磁盘文件,回收资源
if (fis != null)
{
try
{
fis.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
System.out.println("程序已经执行了finally里的资源回收!");
}
}
上面程序中的 try 块后面加了 finally 块,用于回收在 try 块中打开的物理资源。注意程序的 catch 块中 ① 处有一条 return 语句,该语句强制方法返回。通常情况下,方法执行到 return 语句的地方,程序将立即结束该方法,但现在不会,虽然 return 也强制方法立即结束,但一定会先执行 finally 块里的代码。
如果注释掉 ① 处的 return 语句,取消 ② 处的注释,即在异常处理的 catch 块中使用 System.exit(1) 来退出虚拟机,则 finally 块中的代码不会被执行。
除非在 try 块、catch 块中调用了退出虚拟机的方法,否则不管在 try 块、catch 块中执行怎样的代码,出现怎样的情况,异常处理的 finally 块总会被执行。
一般不要在 finally 块中使用如:return 或 throw 等导致方法终止的语句,一旦在 finally 块中使用了 return 或 throw 语句,将会导致 try 块、catch 块中的 return、throw 语句失效。示例:
public static void main(String[] args) throws Exception
{
boolean a = test();
System.out.println(a);
}
public static boolean test()
{
try
{
return true;
}
finally
{
return false;
}
}
程序最后运行的结果是 false
5、异常处理的嵌套
在 try 块、catch 块或者 finally 块中再次包含了一个完整的异常处理流程的情形被称为异常处理的嵌套。
二、Checked 异常和 Runtime 异常体系
Java 的异常被分为两大类:Checked 异常和 Runtime 异常(运行时异常)。所有 RuntimeExceptiom 类及其子类的实例被称为 Runtime 异常;不是 RuntimeException 类及其子类的异常实例则被称为 Checked 异常。
只有 Java 语言提供了 Checked 异常,其它语言都没有提供 Checked 异常。Java 认为 Checked 异常都是可以被处理(修复)的异常,所以 Java 程序必须显式处理 Checked 异常。如果程序没有处理 Checked 异常,该程序在编译时就会发生错误,无法编译通过。
Checked 异常体现了 Java 的设计哲学:没有完善错误处理的代码根本就不会被执行。
对于 Checked 异常处理方式有两种:
- 当前方法明确知道如何处理该异常,程序应该使用 try……catch 块来捕获该异常,然后在对应的 catch 块中修补该异常。
- 当前方法不知道如何处理这种异常,应该在定义该方法时声明抛出该异常
Runtime 异常则更为灵活,Runtime 异常无须显式声明抛出,如果程序需要捕捉 Runtime 异常,也可以使用 try……catch 块来捕获 Runtime 异常。
1、使用 throws 声明抛出异常
使用 throws 声明抛出异常的思路是:当前方法不知道应该如何处理这种类型的异常,该异常应该由上一级调用者处理,如果 main 方法也不知道应该如何处理这种异常,也可以使用 throws 声明抛出异常,将该异常交给 JVM 处理。JVM 对异常的处理是:打印异常跟踪栈信息,并终止程序运行。
一旦方法使用了 throws 语句声明抛出该异常,程序就无需再使用 try……catch 块来捕获该异常。
public static void main(String[] args) throws IOException
{
FileInputStream fis = new FileInputStream("a.txt");
}
如果某段代码中调用了一个带 throws 声明的方法,这表明该方法希望它的调用者来处理该异常。也就是说,代码要么放在 try 块中显式捕获该异常,要么这段代码处于另一个带 throws 声明抛出的方法中。
示例:
public static void main(String[] args)
{
try
{
method1();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
public static void method1() throws FileNotFoundException
{
method2();
}
public static void method2() throws FileNotFoundException
{
FileInputStream fis = new FileInputStream("a.txt");
}
使用 throws 声明抛出异常时有下列限制:
- 如果某段代码调用了一个带 throws 声明的方法,被调用者的异常类型必须和调用者的 catch 块或者 throws 声明抛出的异常类型相同,或者是调用者异常的子类。
- 当方法重写时,子类方法中声明抛出的异常应该是父类方法声明抛出异常类型的子类。
- 子类方法(被调用者)中不允许比父类方法(调用者)声明抛出的异常更多
示例:调用者声明抛出的异常是被调用者声明抛出异常的子类,不符合要求
子类方法声明抛出了比父类方法更大的异常:
子类方法(被调用者)中不允许比父类方法(调用者)声明抛出的异常更多,不符合要求
三、使用 throw 抛出异常
1、抛出异常
当程序出现错误时,系统会自动抛出异常;除此之外,Java 也允许程序自行抛出异常,使用 throw 语句完成自行抛出异常。
异常是一个相对的概念,例如:除数为 0,这样的异常大家都知道。但有些异常是业务相关的,例如,统计大学生年龄的时候,如果年龄小于1岁,或者大于100岁,这样都是显然不符合现实世界逻辑的,但计算机并不能理解这样的现实逻辑,这样就要我们定义一个自定义异常,并将该异常通过 throw 语句抛出。throw 抛出异常的语法格式是:
throw ExceptionInstance;
如果 throw 语句抛出的异常是 Checked 异常,则该 throw 语句要么处于 try 块里,显式捕获该异常,要么放在一个带 throws 声明抛出的方法中,即把该异常交给该方法的调用者处理;如果 throw 语句抛出的是 Runtime 异常,则该语句无须放在 try 块里,也无须放在带 throws 声明抛出的方法中;程序既可以显式使用 try……catch 来捕获,并处理该异常,也可以完全不理会该异常,把该异常交给方法的调用者来处理。
示例:
public static void main(String[] args)
{
try
{
//调用带throws声明的方法,必须显式捕获该异常
//否则,必须在main方法中再次声明抛出
throwChecked(-3);
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
//调用抛出Runtime异常的方法既可以显式捕获该异常,
//也可不理会该异常
throwRuntime(3);
}
public static void throwChecked(int a)throws Exception
{
if (a > 0)
{
//自行抛出Exception异常
//该代码必须处于try块里,或处于带throws声明的方法中
throw new Exception("a的值大于0,不符合要求");
}
}
public static void throwRuntime(int a)
{
if (a > 0)
{
//自行抛出RuntimeException异常,既可以显式捕获该异常
//也可完全不理会该异常,把该异常交给该方法调用者处理
throw new RuntimeException("a的值大于0,不符合要求");
}
}
2、自定义异常类
用户自定义异常都应该继承 Exception 基类,如果希望自定义 Runtime 异常,则应该继承 RuntimeException 基类。定义异常类时通常需要提供两种构造器:一个是无参的构造器;另一个是带一个字符串参数的构造器,这个字符串将作为该异常对象的详细说明(也就是一场对象 getMessage 方法的返回值)。
3、catch 和 throw 同时使用
try
{
...
}
catch(Exception e)
{
throw new MyException("自定义错误信息。");
}
4、异常链
四、Java 的异常跟踪栈
五、异常处理规则
1、不要过度使用异常
2、不要使用过于庞大的 try 块
3、避免使用 Catch All 语句
4、不要忽略捕获到的异常
========================================================================
作业:
一、
1、定义一个 People 类,有name字段,age字段,要求0 < age < 150
2、定义一个 Student 类, 有 name 字段,age 字段,要求 0 < age < 22
3、自定义一个异常类ageException,继承自 Exception,当people或者student的age不符合要求时,要抛出这个异常类。(throw)
4、定义一个异常类AgeRuntimeException,继承自 RuntimeException,当people或者student的age不符合要求时,要抛出这个异常类。(throw)
实例化People和student,分别赋age字段值 33,44。然后打印异常信息。
二、
使用 FileInputStream 打开一个文件,并打印文件内容,使用 try、catch、finally,使用finally来关闭文件流。
发表评论
-
java:comp/env 解释
2012-07-13 13:40 10827关于获取数据源的语法,大体有(javax.sql.D ... -
java.naming.factory.url.pkgs 的用途
2012-06-28 09:48 1755原文地址:http://blog.csdn.net/l ... -
解析 HTTP
2010-11-14 18:09 48043、HTTP 请求 客户端通过发送 HTTP 请求向服务器 ... -
Tomcat server.xml 文件
2010-11-07 17:21 1223Tomcat 服务器有一系列可配置的组件构成,这些组件 ... -
Tomcat的体系结构
2010-11-04 21:13 1481Tomcat的体系结构 Tomcat服务器是由一系列可配 ... -
第十四课时: 输入/输出1
2010-10-30 20:48 1315Java 的 IO 支持通过 java.io 包 ... -
第十七课时: 网络编程
2010-10-18 22:00 1151一. 网络编程的基础知 ... -
第十六课时: 多线程
2010-10-07 14:24 980一. 继承 Thread 类创建线程 通过继承 Thread ... -
第十四课时:输入/输出2
2010-09-05 15:54 1250... -
第十三课时:Annotation 注释
2010-08-29 15:55 1130从 JDK 5.0 开始,Java 增加了对元数据 ( ... -
第十二课时:JDBC 编程 (2)
2010-08-28 13:13 875示例: import java.sql.*; impor ... -
第十二课时:JDBC 编程 (1)
2010-08-08 15:52 2099一、SQL 语句基础 SQL 的全称是 Structured ... -
第十课时:与运行环境交互
2010-07-24 06:03 777一、与用户交互 1、使用 Scanner 获取键盘输入 获 ... -
第九课时:泛型
2010-07-11 17:00 1385一、定义泛型接口、类 JDK 1.5 改写了 ... -
第六课时:面向对象(5)—— 2010年05月22日
2010-07-04 13:45 988一、内部类 在某些情况下,我们把一个类放在另一个类的 ... -
第三课时:面向对象(2)
2010-05-02 23:20 1417一、成员变量与局部变量 二、类的继 ... -
第二课时:数组、面向对象(1)
2010-05-02 23:19 957一、数组 1、 ... -
第四课时:面向对象(3)
2010-05-02 23:17 902一、基本数据类型的包装类 1、 基本数据类型和包装 ... -
第一课时提纲:Java 基础(GC)
2010-03-22 23:22 1189一、Java 命名规范 1、对常量的命名规范: ...
相关推荐
### 第七章:异常处理 - **7.1 异常处理机制**:理解try-catch块的工作原理,throw和throw by value/copy的区别。 - **7.2 自定义异常**:创建和使用自定义异常类,理解异常安全性。 ### 第八章:高级C++特性 - **...
10. **异常安全**:在处理动态内存时,确保在发生异常时能正确地清理资源是至关重要的。C++提供了一些异常安全的构造,如资源获取即初始化(RAII)原则和异常规格(nothrow)。 理解并熟练掌握这些概念和技巧对于...
正确的书本长度是通过去除异常值并取平均值得到的,即26.02cm。 3. **单位换算**:60毫米等于6厘米,50米等于0.05千米,245分钟等于0.75小时,0.25小时等于900秒,这些都是基本的长度和时间单位之间的转换。 4. **...
* 第十一章:多线程及多进程编程 * 第十二章:网络编程 * 第十三章:数据库编程 * 第十四章:NumPy 模块 * 第十五章:pandas 模块 使用教材及主要参考书目: * 选用教材:自编 * 主要参考书目:SHAW Z A. 《笨办法...
5. **异常处理**: 第7章介绍Java的异常处理机制,包括try-catch-finally结构和throw关键字。课后习题会演示如何编写健壮的代码,以妥善处理运行时可能出现的问题。 6. **输入/输出流**: 第8章通常涵盖I/O流,包括...
11. **member** - 成员,分子,指团体的一部分。 12. **crazy** - 不理智的,疯狂的,形容行为或想法异常。 词组包括: 13. **take out the rubbish** - 倒垃圾,日常生活中的基本任务。 14. **wash the dishes** -...
这篇文档是针对七年级生物课程的一个学案,主要讲解了人体废物的排出,特别是尿液的形成和排出过程。以下是详细的知识点解析: 1. **尿液的形成**: - 人体每天产生的原尿大约为180升,但最终排出的尿液只有约1.5...
### 48课时 Java 考试题知识点详解 #### 一、填空题解析 1. **定义类与继承接口的关键字** - 定义类时使用的关键字是`class`。 - 继承类时使用的关键字是`extends`。 - 实现接口时使用的关键字是`implements`。...
4. 第一道防线:第一道防线包括皮肤、黏膜、呼吸道纤毛等,它们防止病原体进入体内。例如,胃液和唾液中的杀菌物质属于第一道防线的一部分。 5. 免疫活性物质:淋巴因子是一种免疫活性物质,由免疫细胞产生,参与...
综上所述,本课时训练主要涵盖了人体营养、能量来源、消化系统的工作原理、营养物质的消化与吸收、维生素的作用以及均衡饮食的重要性等多个生物学核心概念。这些知识点对于中考生物复习至关重要,考生需要深入理解和...
【免疫调节】是生物学中一个重要的概念,主要涉及人体如何防御外来病原体以及识别和清除体内异常细胞。在高三生物复习中,免疫调节是必修3中的关键内容,这通常包括免疫系统的组成、功能以及异常时导致的疾病。 1. ...
1. 生物学中考复习:本资料针对2020年中考生物复习,专注于第六单元“生命活动的调节和生态系统的稳定”,帮助学生进行课时训练,特别是人体生命活动的调节部分。 2. 人体感知系统:题目涉及嗅觉、视觉和平衡觉的...
10. **反射弧的结构与功能**:第十一题详细描述了反射弧的组成部分,并通过膝跳反射实例解释了神经冲动的传导路径。 11. **大脑的功能分区**:第十五题提到大脑皮质中的语言中枢,这是人类区别于其他动物的独特功能...
本篇内容主要关注初中八年级数学中第二十章《数据的分析》的20.1节,特别是20.1.1小节关于平均数的知识点。 1. **算术平均数**:这是最基础的平均数计算方法,即将所有数值相加然后除以数值的个数。例如,对于数据5...
神经元是神经系统的基本单位,有特殊的结构用于接收、处理和传递信息。 7. 内分泌系统:内分泌系统通过分泌激素来调节人体的生理功能。胰岛素是一种重要的激素,能调节血糖水平,胰岛素分泌不足可能导致糖尿病。 8...
11. 四倍体和单倍体育种:通过秋水仙素处理,可以得到多种基因型和表现型的后代,最终获得的不一定是纯合子,但第二次秋水仙素处理的植株通常是可育的。 12. 染色体组的特性:染色体组携带着生物的基本遗传信息,每...
5. **肾单位与尿液形成**:肾单位包括肾小球、肾小囊和肾小管,原尿在肾小管经过重吸收,部分物质如葡萄糖会被重新吸收回血液,若尿液中葡萄糖含量异常,可能表明肾小管出现问题。 6. **原尿与尿液的区别**:健康人...
但平均数容易受到极端值的影响,当数据中存在较大的异常值时,平均数可能不能准确反映数据的中心趋势。 4. **数据的代表**:平均数、中位数和众数都是数据的代表,但它们在描述数据特性时各有侧重。平均数考虑了...
12. 药物对细胞分裂的影响:药物处理后,细胞中DNA含量的增加受到抑制,表明药物可能通过抑制DNA复制或影响分裂前期的进程来抑制细胞分裂。 13. 细胞有丝分裂观察:观察根尖有丝分裂应选择分生区(a区)的细胞,...