- 浏览: 714269 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (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 10889关于获取数据源的语法,大体有(javax.sql.D ... -
java.naming.factory.url.pkgs 的用途
2012-06-28 09:48 1788原文地址:http://blog.csdn.net/l ... -
解析 HTTP
2010-11-14 18:09 48303、HTTP 请求 客户端通过发送 HTTP 请求向服务器 ... -
Tomcat server.xml 文件
2010-11-07 17:21 1264Tomcat 服务器有一系列可配置的组件构成,这些组件 ... -
Tomcat的体系结构
2010-11-04 21:13 1504Tomcat的体系结构 Tomcat服务器是由一系列可配 ... -
第十四课时: 输入/输出1
2010-10-30 20:48 1352Java 的 IO 支持通过 java.io 包 ... -
第十七课时: 网络编程
2010-10-18 22:00 1182一. 网络编程的基础知 ... -
第十六课时: 多线程
2010-10-07 14:24 1007一. 继承 Thread 类创建线程 通过继承 Thread ... -
第十四课时:输入/输出2
2010-09-05 15:54 1283... -
第十三课时:Annotation 注释
2010-08-29 15:55 1171从 JDK 5.0 开始,Java 增加了对元数据 ( ... -
第十二课时:JDBC 编程 (2)
2010-08-28 13:13 895示例: import java.sql.*; impor ... -
第十二课时:JDBC 编程 (1)
2010-08-08 15:52 2144一、SQL 语句基础 SQL 的全称是 Structured ... -
第十课时:与运行环境交互
2010-07-24 06:03 804一、与用户交互 1、使用 Scanner 获取键盘输入 获 ... -
第九课时:泛型
2010-07-11 17:00 1422一、定义泛型接口、类 JDK 1.5 改写了 ... -
第六课时:面向对象(5)—— 2010年05月22日
2010-07-04 13:45 1009一、内部类 在某些情况下,我们把一个类放在另一个类的 ... -
第三课时:面向对象(2)
2010-05-02 23:20 1455一、成员变量与局部变量 二、类的继 ... -
第二课时:数组、面向对象(1)
2010-05-02 23:19 985一、数组 1、 ... -
第四课时:面向对象(3)
2010-05-02 23:17 924一、基本数据类型的包装类 1、 基本数据类型和包装 ... -
第一课时提纲:Java 基础(GC)
2010-03-22 23:22 1212一、Java 命名规范 1、对常量的命名规范: ...
相关推荐
内容概要:本文详细介绍了基于MATLAB GUI界面和卷积神经网络(CNN)的模糊车牌识别系统。该系统旨在解决现实中车牌因模糊不清导致识别困难的问题。文中阐述了整个流程的关键步骤,包括图像的模糊还原、灰度化、阈值化、边缘检测、孔洞填充、形态学操作、滤波操作、车牌定位、字符分割以及最终的字符识别。通过使用维纳滤波或最小二乘法约束滤波进行模糊还原,再利用CNN的强大特征提取能力完成字符分类。此外,还特别强调了MATLAB GUI界面的设计,使得用户能直观便捷地操作整个系统。 适合人群:对图像处理和深度学习感兴趣的科研人员、高校学生及从事相关领域的工程师。 使用场景及目标:适用于交通管理、智能停车场等领域,用于提升车牌识别的准确性和效率,特别是在面对模糊车牌时的表现。 其他说明:文中提供了部分关键代码片段作为参考,并对实验结果进行了详细的分析,展示了系统在不同环境下的表现情况及其潜在的应用前景。
嵌入式八股文面试题库资料知识宝典-计算机专业试题.zip
嵌入式八股文面试题库资料知识宝典-C and C++ normal interview_3.zip
内容概要:本文深入探讨了一款额定功率为4kW的开关磁阻电机,详细介绍了其性能参数如额定功率、转速、效率、输出转矩和脉动率等。同时,文章还展示了利用RMxprt、Maxwell 2D和3D模型对该电机进行仿真的方法和技术,通过外电路分析进一步研究其电气性能和动态响应特性。最后,文章提供了基于RMxprt模型的MATLAB仿真代码示例,帮助读者理解电机的工作原理及其性能特点。 适合人群:从事电机设计、工业自动化领域的工程师和技术人员,尤其是对开关磁阻电机感兴趣的科研工作者。 使用场景及目标:适用于希望深入了解开关磁阻电机特性和建模技术的研究人员,在新产品开发或现有产品改进时作为参考资料。 其他说明:文中提供的代码示例仅用于演示目的,实际操作时需根据所用软件的具体情况进行适当修改。
少儿编程scratch项目源代码文件案例素材-剑客冲刺.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
内容概要:本文详细介绍了基于PID控制器的四象限直流电机速度驱动控制系统仿真模型及其永磁直流电机(PMDC)转速控制模型。首先阐述了PID控制器的工作原理,即通过对系统误差的比例、积分和微分运算来调整电机的驱动信号,从而实现转速的精确控制。接着讨论了如何利用PID控制器使有刷PMDC电机在四个象限中精确跟踪参考速度,并展示了仿真模型在应对快速负载扰动时的有效性和稳定性。最后,提供了Simulink仿真模型和详细的Word模型说明文档,帮助读者理解和调整PID控制器参数,以达到最佳控制效果。 适合人群:从事电力电子与电机控制领域的研究人员和技术人员,尤其是对四象限直流电机速度驱动控制系统感兴趣的读者。 使用场景及目标:适用于需要深入了解和掌握四象限直流电机速度驱动控制系统设计与实现的研究人员和技术人员。目标是在实际项目中能够运用PID控制器实现电机转速的精确控制,并提高系统的稳定性和抗干扰能力。 其他说明:文中引用了多篇相关领域的权威文献,确保了理论依据的可靠性和实用性。此外,提供的Simulink模型和Word文档有助于读者更好地理解和实践所介绍的内容。
嵌入式八股文面试题库资料知识宝典-2013年海康威视校园招聘嵌入式开发笔试题.zip
少儿编程scratch项目源代码文件案例素材-驾驶通关.zip
小区开放对周边道路通行能力影响的研究.pdf
内容概要:本文探讨了冷链物流车辆路径优化问题,特别是如何通过NSGA-2遗传算法和软硬时间窗策略来实现高效、环保和高客户满意度的路径规划。文中介绍了冷链物流的特点及其重要性,提出了软时间窗概念,允许一定的配送时间弹性,同时考虑碳排放成本,以达到绿色物流的目的。此外,还讨论了如何将客户满意度作为路径优化的重要评价标准之一。最后,通过一段简化的Python代码展示了遗传算法的应用。 适合人群:从事物流管理、冷链物流运营的专业人士,以及对遗传算法和路径优化感兴趣的科研人员和技术开发者。 使用场景及目标:适用于冷链物流企业,旨在优化配送路线,降低运营成本,减少碳排放,提升客户满意度。目标是帮助企业实现绿色、高效的物流配送系统。 其他说明:文中提供的代码仅为示意,实际应用需根据具体情况调整参数设置和模型构建。
少儿编程scratch项目源代码文件案例素材-恐怖矿井.zip
内容概要:本文详细介绍了基于STM32F030的无刷电机控制方案,重点在于高压FOC(磁场定向控制)技术和滑膜无感FOC的应用。该方案实现了过载、过欠压、堵转等多种保护机制,并提供了完整的源码、原理图和PCB设计。文中展示了关键代码片段,如滑膜观测器和电流环处理,以及保护机制的具体实现方法。此外,还提到了方案的移植要点和实际测试效果,确保系统的稳定性和高效性。 适合人群:嵌入式系统开发者、电机控制系统工程师、硬件工程师。 使用场景及目标:适用于需要高性能无刷电机控制的应用场景,如工业自动化设备、无人机、电动工具等。目标是提供一种成熟的、经过验证的无刷电机控制方案,帮助开发者快速实现并优化电机控制性能。 其他说明:提供的资料包括详细的原理图、PCB设计文件、源码及测试视频,方便开发者进行学习和应用。
基于有限体积法Godunov格式的管道泄漏检测模型研究.pdf
嵌入式八股文面试题库资料知识宝典-CC++笔试题-深圳有为(2019.2.28)1.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 V1.5.zip
Android系统开发_Linux内核配置_USB-HID设备模拟_通过root权限将Android设备转换为全功能USB键盘的项目实现_该项目需要内核支持configFS文件系统
C# WPF - LiveCharts Project
少儿编程scratch项目源代码文件案例素材-恐怖叉子 动画.zip
嵌入式八股文面试题库资料知识宝典-嵌⼊式⼯程师⾯试⾼频问题.zip