当前位置:文档之家› Java语言提供两种异常处理机制

Java语言提供两种异常处理机制

Java语言提供两种异常处理机制
Java语言提供两种异常处理机制

得到一个异常对象是,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种类型异常的方法后,运行时系统把当前异常交给这个方法处理;如果找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。捕获异常是通过try-catch-finally语句实现的。语法为:try{ ... }catch(ExceptionName1 e){ ... }catch(ExceptionName2 e){ ... } ... }finally{ ... } 2)声明抛弃异常:当Java 程序运行时系统得到一个异常对象时,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃异常。声明抛弃异常是在一个方法声明中的throws子句中指明的。如:public int read() throws IOException{ ... } 其中throws IOException就是声明抛弃异常,throws后可以跟多个异常类型。

1. https://www.doczj.com/doc/105296221.html,ng.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了。数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话)

2. https://www.doczj.com/doc/105296221.html,ng.classnotfoundexception 这个异常是很多原本在jb等开发环境中开发的程序员,把jb下的程序包放在wtk下编译经常出现的问题,异常的解释是"指定的类不存在",这里主要考虑一下类的名称和路径是否正确即可,如果是在jb下做的程序包,一般都是默认加上package的,所以转到wtk下后要注意把package的路径加上。

3. https://www.doczj.com/doc/105296221.html,ng.arithmeticexception 这个异常的

好好检查一下自己程序中涉及到数学运算的地方,公式是不是有不妥了。 4.

是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常。 5. https://www.doczj.com/doc/105296221.html,ng.illegalargumentexception 这个异常的解释是"方法的参数错误",很多j2me的类库中的方法在一些情况下都会引发这样的错误,比如音量调节方法中的音量参数如果写成负数就会出现这个异常,再比如g.setcolor(int red,int green,int blue)这个方法中的三个值,如果有超过255的也会出现这个异常,因此一旦发现这个异常,我们要做的,就是赶紧去检查一下方法调用中的参数传递是不是出现了错误。 6. https://www.doczj.com/doc/105296221.html,ng.illegalaccessexception 这个异常的解释是"没有访问权限",当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了package的情况下要注意这个异常。其他还有很多异常,我就不一一列举了,我要说明的是,一个合格的程序员,需要对程序中常见的问题有相当的了解和相应的解决办法,否则仅仅停留在写程序而不会改程序的话,会极大影响到自己的开发的。关于异常的全部说明,在api里都可以查阅。算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界异常:ArrayIndexOutOfBoundsException 违背安全原则异常:SecturityException 文件已结束异常:EOFException 文件未找到异常:FileNotFoundException 字符串转换为数字异常:NumberFormatException 操作数据库异常:SQLException 输入输出异常:IOException 方法未找到异常:NoSuchMethodException https://www.doczj.com/doc/105296221.html,ng.AbstractMethodError 抽象方法错误。当应用试图调用抽象方法时抛出。https://www.doczj.com/doc/105296221.html,ng.AssertionError 断言错。用来指示一个断言失败的情况。https://www.doczj.com/doc/105296221.html,ng.ClassCircularityError 类循环依赖错误。在初始化一个类时,

个文件中读取Java类,而检测到该文件的内容不符合类的有效格式时抛出。https://www.doczj.com/doc/105296221.html,ng.Error 错误。是所有错误的基类,用于标识严重的程序运行问题。这些问题通常描述一些不应被应用程序捕获的反常情况。https://www.doczj.com/doc/105296221.html,ng.ExceptionInInitializerError 初始化程序错误。当执行一个类的静态初始化程序的过程中,发生了异

常时抛出。静态初始化程序是指直接包含于类中的static语句段。https://www.doczj.com/doc/105296221.html,ng.IllegalAccessError 违法访问错误。当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。https://www.doczj.com/doc/105296221.html,ng.IncompatibleClassChangeError 不兼容的类变化错误。当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出该异常。一般在修改了应用中的某些类的声明定义而没有对整个应用重新编译而直接运行的情况下,容易引发该错误。https://www.doczj.com/doc/105296221.html,ng.InstantiationError 实例化错误。当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常. https://www.doczj.com/doc/105296221.html,ng.InternalError 内部错误。用于指示Java虚拟机发生了内部错误。https://www.doczj.com/doc/105296221.html,ng.LinkageError 链接错误。该错误及其所有子类指示某个类依赖于另外一些类,在该类编译之后,被依赖的类改变了其类定义而没有重新编译所有的类,进而引发错误的情况。https://www.doczj.com/doc/105296221.html,ng.NoClassDefFoundError 未找到类定义错误。当Java虚拟机或者类装载器试图实例化某个类,而找不到该类的定义时抛出该错误。https://www.doczj.com/doc/105296221.html,ng.NoSuchFieldError 域不存在错误。当应用试图访问或者修改某类的某个域,而该类的定义中没有该域的定义时抛出该错误。https://www.doczj.com/doc/105296221.html,ng.NoSuchMethodError 方法不存在错误。当应用试图调用某类的某个方法,而该类的定义中没有该方法的定义时抛出该错误。https://www.doczj.com/doc/105296221.html,ng.OutOfMemoryError 内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错

该错误。https://www.doczj.com/doc/105296221.html,ng.ThreadDeath 线程结束。当调用Thread类的stop方法时抛出该错误,用于指示线程结束。https://www.doczj.com/doc/105296221.html,ng.UnknownError 未知错误。用于指示Java虚拟机发生了未知严重错误的情况。https://www.doczj.com/doc/105296221.html,ng.UnsatisfiedLinkError 未满足的链接错误。当Java虚拟机未找到某个类的声明为native方法的本机语言定义时抛出。https://www.doczj.com/doc/105296221.html,ng.UnsupportedClassVersionError 不支持的类版本错误。当Java虚拟机试图从读取某个类文件,但是发现该文件的主、次版本号不被当前Java虚拟机支持的时候,抛出该错误。https://www.doczj.com/doc/105296221.html,ng.VerifyError 验证错误。当验证器检测到某个类文件中存在内部不兼容或者安全问题时抛出该错误。https://www.doczj.com/doc/105296221.html,ng.VirtualMachineError 虚拟机错误。用于指示虚拟机被破坏或者继续执行操作所需的资源不足的情况。https://www.doczj.com/doc/105296221.html,ng.ArithmeticException 算术条件异常。譬如:整数除零等。https://www.doczj.com/doc/105296221.html,ng.ArrayIndexOutOfBoundsException 数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。https://www.doczj.com/doc/105296221.html,ng.ArrayStoreException 数组存储异常。当向数组中存放非数组声明类型对象时抛出。https://www.doczj.com/doc/105296221.html,ng.ClassCastException 类造型异常。假设有类A和B(A不是B的父类或子类),O是A的实例,那

https://www.doczj.com/doc/105296221.html,ng.ClassNotFoundException 找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。https://www.doczj.com/doc/105296221.html,ng.CloneNotSupportedException 不支持克隆异常。当没有实现Cloneable接口或者不支持克隆方法时,调用其clone()方法则抛出该异常。

个枚举对象,但该枚举对象并不包含常量时,抛出该异常。https://www.doczj.com/doc/105296221.html,ng.Exception 根异常。用以描述应用程序希望捕获的情况。https://www.doczj.com/doc/105296221.html,ng.IllegalAccessException 违法的访问异常。当应用试图通过反射方式创建某个类的实例、访问该类属性、调用该类方法,而当时又无法访问类的、属性的、方法的或构造方法的定义时抛出该异常。https://www.doczj.com/doc/105296221.html,ng.IllegalMonitorStateException 违法的监控状态异常。当某个线程试图等待一个自己并不拥有的对象(O)的监控器或者通知其他线程等待该对象(O)的监控器时,抛出该异常。https://www.doczj.com/doc/105296221.html,ng.IllegalStateException 违法的状态异常。当在Java环境和应用尚未处于某个方法的合法调用状态,而调用了该方法时,抛出该异常。https://www.doczj.com/doc/105296221.html,ng.IllegalThreadStateException 违法的线程状态异常。当县城尚未处于某个方法的合法调用状态,而调用了该方法时,抛出异常。https://www.doczj.com/doc/105296221.html,ng.IndexOutOfBoundsException 索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常。https://www.doczj.com/doc/105296221.html,ng.InstantiationException 实例化异常。当试图通过newInstance()方法创建某个类的实例,而该类是一个抽象类或接口时,抛出该异常。https://www.doczj.com/doc/105296221.html,ng.InterruptedException 被中止异常。当某个线程处于长时间的等待、休眠或其他暂停状态,而此时其他的线程通过Thread的interrupt方法终止该线程时抛出该异常。https://www.doczj.com/doc/105296221.html,ng.NegativeArraySizeException 数组大小为负值异常。当使用负数大小值创建数组时抛出该异常。https://www.doczj.com/doc/105296221.html,ng.NoSuchFieldException 属性不存在异常。当访问某个类的不存在的属性时抛出该异常。

https://www.doczj.com/doc/105296221.html,ng.NoSuchMethodException 方法不存在异常。当访问某个类的不存在的方法时抛出该异常。https://www.doczj.com/doc/105296221.html,ng.NullPointerException 空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null 等等。https://www.doczj.com/doc/105296221.html,ng.NumberFormatException 数字格式异常。当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常。https://www.doczj.com/doc/105296221.html,ng.RuntimeException 运行时异常。是所有Java虚拟机正常操作期间可以被抛出的异常的父类。https://www.doczj.com/doc/105296221.html,ng.SecurityException 安全异常。由安全管理器抛出,用于指示违反安全情况的异常。https://www.doczj.com/doc/105296221.html,ng.StringIndexOutOfBoundsException 字符串索引越界异常。当使用索引值访问某个字符串中的字符,而该索引值小于0或大于等于序列大小时,抛出该异常。https://www.doczj.com/doc/105296221.html,ng.TypeNotPresentException 类型不存在异常。当应用试图

异常

javax.servlet.jsp.JspException: Cannot retrieve mapping for action /Login (/Login是你的action 名字)

可能原因

action没有再struts-config.xml 中定义,或没有找到匹配的action,例如在JSP文件中使用

Login.do处理,如果出现上述异常,请查看struts-config.xml中的定义部分,有时可能是打错了字符或者是某些不符合规则,可以使用struts

console工具来检查。

-----------------------------------------------------------------------------------------------------------------

异常

org.apache.jasper.JasperException: Cannot retrieve definition for form bean null

可能原因

这个异常是因为Struts根据struts-config.xml中的mapping没有找到action期望的form bean。大部分的情况可能是因为在form-bean中设置的

name属性和action中设置的name属性不匹配所致。换句话说,action和form都应该各自有一个name属性,并且要精确匹配,包括大小写。这个

错误当没有name属性和action关联时也会发生,如果没有在action中指定name属性,那么就没有name属性和action相关联。当然当action制作

某些控制时,譬如根据参数值跳转到相应的jsp页面,而不是处理表单数据,这是就不用name 属性,这也是action的使用方法之一。

-----------------------------------------------------------------------------------------------------------------

异常

No action instance for path /xxxx could be created

可能原因

特别提示:因为有很多中情况会导致这个错误的发生,所以推荐大家调高你的web服务器的日志/调试级别,这样可以从更多的信息中看到潜在

的、在试图创建action类时发生的错误,这个action类你已经在struts-config.xml中设置了关联(即添加了标签)。

在struts-config.xml中通过action标签的class属性指定的action类不能被找到有很多种原因,例如:

定位编译后的.class文件失败。Failure to place compiled .class file for the action in the classpath (在web开发中,class的的位置

在r WEB-INF/classes,所以你的action class必须要在这个目录下。例如你的action类位于WEB-INF/classes/action/Login.class,那么在

struts-config.xml中设置action的属性type时就是action.Login).

拼写错误,这个也时有发生,并且不易找到,特别注意第一个字母的大小写和包的名称。-----------------------------------------------------------------------------------------------------------------

异常

javax.servlet.jsp.JspException: No getter method for property username of bean org.apache.struts.taglib.html.BEAN

可能原因

没有位form bean中的某个变量定义getter 方法

这个错误主要发生在表单提交的FormBean中,用struts标记时,在FormBean中必须有一个getUsername()

方法。注意字母“U”。

-----------------------------------------------------------------------------------------------------------------

异常

https://www.doczj.com/doc/105296221.html,ng.NoClassDefFoundError: org/apache/struts/action/ActionForm

可能原因

这个错误主要发生在在classpath中找不到相应的Java .class文件。如果这个错误发生在web 应用程序的运行时,主要是因为指定的class文件

不在web server的classpath中(/WEB-INF/classes 和/WEB-INF/lib)。

在上面的错误中,原因是找不到ActionForm类。

-----------------------------------------------------------------------------------------------------------------

异常

javax.servlet.jsp.JspException: Exception creating bean of class org.apache.struts.action.ActionForm: {1}

可能原因

Instantiating Struts-provided ActionForm class directly instead of instantiating a class derived off ActionForm. This might

occur implicitly if you specify that a form-bean is this Struts ActionForm class rather than specifying a child of this class

for the form-bean.

Not associating an ActionForm-descended class with an action can also lead to this error.

-----------------------------------------------------------------------------------------------------------------

异常

javax.servlet.jsp.JspException: Cannot find ActionMappings or ActionFormBeans collection

可能原因

不是标识Struts actionServlet的标记就是映射.do扩展名的标记或者两者都没有在web.xml中声明。

在struts-config.xml中的打字或者拼写错误也可导致这个异常的发生。例如缺少一个标记的关闭符号/>。最好使用struts console工具检查一

下。

另外,load-on-startup必须在web.xml中声明,这要么是一个空标记,要么指定一个数值,这个数值用来表servlet运行的优先级,数值越大优

先级越低。

还有一个和使用load-on-startup有关的是使用Struts预编译JSP文件时也可能导致这个异常。-----------------------------------------------------------------------------------------------------------------

异常

https://www.doczj.com/doc/105296221.html,ng.NullPointerException at org.apache.struts.util.RequestUtils.forwardURL(RequestUtils.java:1223)

可能原因

在struts-config.xml中的forward元素缺少path属性。例如应该是如下形式:

-----------------------------------------------------------------------------------------------------------------

异常

javax.servlet.jsp.JspException: Cannot find bean org.apache.struts.taglib.html.BEAN in any scope

Probable Causes

试图在Struts的form标记外使用form的子元素。这常常发生在你在后面使用Struts的html标记。

另外要注意可能你不经意使用的无主体的标记,如,这样web 服务器解析时就当作一个无主体的标记,随后使用的所有

标记都被认为是在这个标记之外的,如又使用了

还有就是在使用taglib引入HTML标记库时,你使用的prefix的值不是html。

-----------------------------------------------------------------------------------------------------------------

异常

javax.servlet.jsp.JspException: Missing message for key xx.xx.xx

Probable Causes

这个key的值对没有在资源文件ApplicationResources.properties中定义。如果你使用eclipse 时经常碰到这样的情况,当项目重新编译时,

eclipse会自动将classes目录下的资源文件删除。

资源文件ApplicationResources.properties 不在classpath中应将资源文件放到WEB-INF/classes 目录下,当然要在struts-config.xml中

定义)

-----------------------------------------------------------------------------------------------------------------

异常

Cannot find message resources under key org.apache.struts.action.MESSAGE

可能原因

很显然,这个错误是发生在使用资源文件时,而Struts没有找到资源文件。

Implicitly trying to use message resources that are not available (such as using empty html:options tag instead of specifying

the options in its body -- this assumes options are specified in ApplicationResources.properties file)

XML parser issues -- too many, too few, incorrect/incompatible versions

-----------------------------------------------------------------------------------------------------------------

异常

Strange and seemingly random characters in HTML and on screen, but not in original JSP or servlet.

可能原因

混和使用Struts的html:form标记和标准的HTML标记不正确。

使用的编码样式在本页中不支持。

-----------------------------------------------------------------------------------------------------------------

异常

"Document contained no data" in Netscape

No data rendered (completely empty) page in Microsoft Internet Explorer

可能原因

使用一个Action的派生类而没有实现perform()方法或execute()方法。在Struts1.0中实现的是perform()方法,在Struts1.1中实现的是

execute()方法,但Struts1.1向后兼容perform()方法。

但你使用Struts1.1创建一个Action的派生类,并且实现了execute()方法,而你在Struts1.0中运行的话,就会得到"Document contained no

data" error message in Netscape or a completely empty (no HTML whatsoever) page rendered in Microsoft Internet Explorer.”的

错误信息。

---------------------------------------------------------------------------------------------------------------------------

异常

ServletException: BeanUtils.populate

解决方案

在用Struts上传文件时,遇到了javax.servlet.ServletException: BeanUtils.populate异常。

我的ActionServlet并没有用到BeanUtils这些工具类。后来仔细检查代码发现是在jsp文件里的form忘了加enctype="multipart/form-

data" 了。所以写程序遇到错误或异常应该从多方面考虑问题存在的可能性,想到系统提示信息以外的东西。

---------------------------------------------------------------------------------------------------------------------------- 1. 定义Action后, 如果指定了name, 那么必须要定义一个与它同名的FormBean才能进行form映射.

2. 如果定义Action后, 提交页面时出现"No input attribute for mapping path..." 错误, 则需要在其input属性中定义转向的页面.

3. 如果插入新的数据时出现"Batch update row count wrong:..." 错误, 则说明XXX.hbm.xml 中指定的key的类型为原始类型(int, long),

因为这种类型会自动分配值, 而这个值往往会让系统认为已经存在该记录, 正确的方法是使用https://www.doczj.com/doc/105296221.html,ng.Integer或https://www.doczj.com/doc/105296221.html,ng.Long对象.

4. 如果插入数据时出现"argument type mismatch" 错误, 可能是你使用了Date等特殊对象, 因为struts不能自动从String型转换成Date型,

所以, 你需要在Action中手动把String型转换成Date型.

5. Hibernate中, Query的iterator()比list()方法快很多.

6. 如果出现"equal symbol expected" 错误, 说明你的strtus标签中包含另一个标签或者变量, 例如:

或者

"/>

这样的情况...

---------------------------------------------------------------------------------------------------------------------------

错误:

Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update

原因与解决:

因为Hibernate Tools(或者Eclipse本身的Database Explorer)生成*.hbn.xml工具中包含有catalog="***"(*表示数据库名称)这样的

属性,将该属性删除就可以了

---------------------------------------------------------------------------------------------------------------------------

错误:

org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations)

原因与解决:

方法1 删除Set方的cascade

方法2 解决关联关系后,再删除

方法3 在many-to-one方增加cascade 但值不能是none

最后一招:

检查一下hashCode equals是否使用了id作为唯一标示的选项了;我用uuid.hex时是没有问题的;但是用了native,就不行了,怎么办?删除啊

----------------------------------------------------------------------------------------------------------------------------

问题:

今天用Tomcat 5.5.12,发现原来很好用的系统不能用了,反复测试发现页面中不能包含taglib,否则会出现以下提示:

HTTP Status 500 -type Exception report

Message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: /index.jsp(1,1) Unable to read TLD "META-INF/tlds/struts-bean.tld" from JAR file

"file:*****/WEB-INF/lib/struts.jar":

原因:

更新了工程用的lib文件夹下的jar,发布时也发布了servlet.jar和jsp-api.jar。

解决:

把jsp-api.jar删除就解决这个问题了。

-----------------------------------------------------------------------------------------------------------------------------

错误:https://www.doczj.com/doc/105296221.html,ng.NullPointerException

原因:发现dao 实例、manage 实例等需要注入的东西没有被注入(俗称空指针异常)解决:这个时候,你应该查看日志文件;默认是应用服务器的log 文件,比如Tomcat 就是[Tomcat 安装目录]/logs ;你会发现提示你:

可能是:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sf' defined in ServletContext

resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is org.hibernate.HibernateException: could not configure from URL: file:src/hibernate.cfg.xml org.hibernate.HibernateException: could not configure from URL: file:src/hibernate.cfg.xml ……………………….

Caused by: java.io.FileNotFoundException: src\hibernate.cfg.xml

可能是:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in

ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is

org.hibernate.MappingException: Resource: com/mcc/coupon/model/UserRole.hbm.xml not found

org.hibernate.MappingException: Resource: com/mcc/coupon/model/UserRole.hbm.xml not found

然后你就知道原因是因为配置文件的解析出了错误,这个通过Web 页面是看不出来的。

更多的是持久化影射文件出的错误;导致了没有被解析;当然你需要的功能就无法使用了。

----------------------------------------------------------------------------------------------------------------------------

错误:

StandardWrapperValve[action]: Servlet.service() for servlet action threw exception

javax.servlet.jsp.JspException: Cannot retrieve mapping for action /settlementTypeManage

或者:

type Status report

message Servlet action is not available

description The requested resource (Servlet action is not available) is not available.

原因:同上

----------------------------------------------------------------------------------------------------------------------------

错误

StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception

https://www.doczj.com/doc/105296221.html,ng.ClassNotFoundException: org.apache.struts.taglib.bean.CookieTei

界面错误具体描述:

org.apache.jasper.JasperException: Failed to load or instantiate TagExtraInfo class: org.apache.struts.taglib.bean.CookieTei

原因与解决:

<方案一>你的“html:”开头的标签没有放在一个

<方案二>重新启动你的应用服务器,自动就没有这个问题了

Java语言提供两种异常处理机制

得到一个异常对象是,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种类型异常的方法后,运行时系统把当前异常交给这个方法处理;如果找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。捕获异常是通过try-catch-finally语句实现的。语法为:try{ ... }catch(ExceptionName1 e){ ... }catch(ExceptionName2 e){ ... } ... }finally{ ... } 2)声明抛弃异常:当Java 程序运行时系统得到一个异常对象时,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃异常。声明抛弃异常是在一个方法声明中的throws子句中指明的。如:public int read() throws IOException{ ... } 其中throws IOException就是声明抛弃异常,throws后可以跟多个异常类型。 1. https://www.doczj.com/doc/105296221.html,ng.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了。数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话) 2. https://www.doczj.com/doc/105296221.html,ng.classnotfoundexception 这个异常是很多原本在jb等开发环境中开发的程序员,把jb下的程序包放在wtk下编译经常出现的问题,异常的解释是"指定的类不存在",这里主要考虑一下类的名称和路径是否正确即可,如果是在jb下做的程序包,一般都是默认加上package的,所以转到wtk下后要注意把package的路径加上。 3. https://www.doczj.com/doc/105296221.html,ng.arithmeticexception 这个异常的 好好检查一下自己程序中涉及到数学运算的地方,公式是不是有不妥了。 4. 是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常。 5. https://www.doczj.com/doc/105296221.html,ng.illegalargumentexception 这个异常的解释是"方法的参数错误",很多j2me的类库中的方法在一些情况下都会引发这样的错误,比如音量调节方法中的音量参数如果写成负数就会出现这个异常,再比如g.setcolor(int red,int green,int blue)这个方法中的三个值,如果有超过255的也会出现这个异常,因此一旦发现这个异常,我们要做的,就是赶紧去检查一下方法调用中的参数传递是不是出现了错误。 6. https://www.doczj.com/doc/105296221.html,ng.illegalaccessexception 这个异常的解释是"没有访问权限",当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了package的情况下要注意这个异常。其他还有很多异常,我就不一一列举了,我要说明的是,一个合格的程序员,需要对程序中常见的问题有相当的了解和相应的解决办法,否则仅仅停留在写程序而不会改程序的话,会极大影响到自己的开发的。关于异常的全部说明,在api里都可以查阅。算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界异常:ArrayIndexOutOfBoundsException 违背安全原则异常:SecturityException 文件已结束异常:EOFException 文件未找到异常:FileNotFoundException 字符串转换为数字异常:NumberFormatException 操作数据库异常:SQLException 输入输出异常:IOException 方法未找到异常:NoSuchMethodException https://www.doczj.com/doc/105296221.html,ng.AbstractMethodError 抽象方法错误。当应用试图调用抽象方法时抛出。https://www.doczj.com/doc/105296221.html,ng.AssertionError 断言错。用来指示一个断言失败的情况。https://www.doczj.com/doc/105296221.html,ng.ClassCircularityError 类循环依赖错误。在初始化一个类时, 个文件中读取Java类,而检测到该文件的内容不符合类的有效格式时抛出。https://www.doczj.com/doc/105296221.html,ng.Error 错误。是所有错误的基类,用于标识严重的程序运行问题。这些问题通常描述一些不应被应用程序捕获的反常情况。https://www.doczj.com/doc/105296221.html,ng.ExceptionInInitializerError 初始化程序错误。当执行一个类的静态初始化程序的过程中,发生了异

java异常处理例题代码

App9_1.java:输出一个数组的所有元素,捕获数组下标越界异常和除娄为0异常。public class App9_1{ public static void main(String args[]){ int i; int[] a={1,2,3,4}; for(i=0;i<5;i++) System.out.println(" a["+i+"]="+a[i]); System.out.println("5/0"+(5/0)); } } App9_2.java:使用try-catch-finall语句对程序中的异常进行捕获与处理。 public class App9_2{ public static void main(String args[]){ int i; int a[]={1,2,3,4}; for (i=0;i<5;i++){ try{ System.out.print("a["+i+"]/"+i+"="+(a[i]/i)); } catch(ArrayIndexOutOfBoundsException e){ System.out.print("捕获到了数组下标越界异常"); } catch(ArithmeticException e){ System.out.print("异常类名称是:"+e); //显示异常信息 } catch(Exception e){ System.out.println("捕获"+e.getMessage()+"异常!"); //显示异常信息 } finally{ System.out.println(" finally i="+i); } } System.out.println("继续!!"); } } App9_3.java:使用throw语句在方法中抛出异常。 public class App9_3{ public static void main(String args[]){ int a=5,b=0; try{ if (b==0) throw new ArithmeticException(); //抛出异常,不是必须的 else System.out.println(a+"/"+b+"="+a/b); //若不抛出异常,则运行此行

java异常处理试题及答案

异常处理练习题 一、选择题 1.java中用来抛出异常的关键字是 (C) A、try B、catch C、throw D、finally 2.关于异常,下列说法正确的是(A) A、异常是一种对象 B、一旦程序运行,异常将被创建 C、为了保证程序运行速度,要尽量避免异常控制 D、以上说法都丌对 3.(A)类是所有异常类的父类。 A、Throwable B、Error C、Exception D、AWTError 4.java语言中,下列哪一子句是异常处理的出口(C) A、try{…}子句 B、catch{…}子句 C、finally{…}子句 D、以上说法都丌对 5.下列程序的执行,说法错误的是 (C) public class MultiCatch { public static void main(String args[]) { try { int a=args.length; int b=42/a; int c[]={1}; c[42]=99; System.out.println(“b=”+b); } catch(ArithmeticException e) { System.out.println(“除0异常:”+e); } catch(ArrayIndexOutOfBoundsException e) { System.out.println(“数组超越边界异常:”+e); } } } A、程序将输出第15行的异常信息 B、程序第10行出错 C、程序将输出“b=42”

D、程序将输出第15和19行的异常信息 6.下列程序的执行,说法正确的是(D) class ExMulti { static void procedure() { try { int c[]={1}; c[42]=99; } catch(ArrayIndexOutOfBoundsException e) { System.out.println(“数组超越界限异常:”+e); } } public static void main(String args[]) { try { procedure(); int a=args.length; int b=42/a; System.out.println(“b=”+b); } catch(ArithmeticException e) { System.out.println(“除0异常:”+e); } } } A、程序只输出第12行的异常信息 B、程序只输出第26行的异常信息 C、程序将不输出异常信息 D、程序将输出第12行和第26行的异常信息 7.下面程序抛出了一个“异常”并捕捉它。请在横线处填入适当内容完成程序。class TrowsDemo { static void procedure() throws IllegalAccessExcepton { System.out.println(“inside procedure”); throw__new_____IllegalAccessException(“demo”);

Java语言中的异常处理机制

Java语言中的异常处理机制 导语:为了加强程序的健壮性、流畅性、稳定性,就需要考虑有可能发生的异常,并进行相应的处理。下面就由为大家介绍一下Java语言中的异常处理机制,欢迎大家阅读! 1概述 在应用程序运行的过程中,经常会出现这样一些现象:用户不按照要求输入、需要进行处理的文件丢失、分母为零、数组下标超出预定范围、网络中断等,我们把这种现象称为异常。由于异常情况总是难免的,所以一个好的应用程序不仅要满足用户的基本需求,还要具备处理有可能出现的异常情况的能力,即程序必须具备较强的容错能力,把这种对异常进行处理的机制称为异常处理。对异常处理有两种常见方法:计算机系统遇到错误,给出出错信息并结束正在运行的程序;由程序员在程序中加入异常处理的功能。早期的程序设计语言没有提供专门进行异常处理的功能,程序员在编写程序的过程中,进行处理异常的代码往往和正常的代码混杂在一起,导致程序的可维护性和可读性下降。Java语言采取了异常处理机制,其方式为“抛出-捕获”,一个异常一旦产生,Java语言采取相应的机制来处理它,避免出现死循环、死机以及其他更大的危害,尽可能预防错误代码带来的不可预期的后果,整个程序的安全性得到了极大的提高。 2Java语言中的异常概述 Java语言提供了功能强大的异常处理机制,将所有处理异常的代码集中放置,以保证正常功能代码和处理异常的代码分开。在Java

程序设计语言中,采用了大量的异常类来进行处理,这些异常类可分为两大类:https://www.doczj.com/doc/105296221.html,ng.Exception和https://www.doczj.com/doc/105296221.html,ng.Error。Exception 类解决由程序本身及环境所产生的异常。而Error类则处理较少发生的内部系统错误。Exception类异常可以捕获并进行相应处理,而Error类异常,则是由用户按照系统提示关闭程序。常见的异常类如下表所示: 在以上常见的Java异常类中,每个异常类反映一类异常错误,其中包含了异常错误信息和处理方法。当程序运行过程中,出现一种异常现象,产生一个相应的异常类对象,再由相应的异常类进行处理,从而避免对系统产生更大的危害,以保证程序的正常运行。 3常见的异常处理方法 常见的异常处理方法有两种:一种处理异常是在产生异常的方法中,使用try…catch…finally结构;还有一种是进行异常的移交,使用关键字throws和throw交给上层方法去处理异常。 在该案例中,对三种异常进行了捕获,分别是数组下标越界、输入数据格式不正确和Exception异常,当触发某种异常,则对相应的异常异常进行处理。Exception异常类是所有异常的基类,当出现catch块没有进行捕获的异常,则采用Exception异常类进行异常处理。 异常的移交: 实例分析:初始化参数x使用了-2,将触发NegativeArraySizeException异常,但在Sum方法中不对该异常进

Java中异常处理

第13章异常课堂练习(2理论+2习题课+2上机) 【教学目标】 ?了解异常和异常处理的概貌(第13.2节)。 ?探究使用异常处理的优点(第13.3节)。 ?区别异常的类型:Error (致命的) 和Exception (非致命的), 以及必检和免检异常(第13.4节)。 ?在方法头中声明异常(第13.5.1节)。 ?在方法中抛出异常(第13.5.2节)。 ?编写try-catch 块处理异常(第13.5.3节)。 ?解释异常是如何传播的(第13.5.3节)。 ?在try-catch块中使用finally子句(第13.6节)。 ?只为非预期错误使用异常(第13.7节)。 ?在catch 块中重新抛出异常(第13.8节)。 ?创建链式异常(第13.9节)。 ?定义自定制的异常类(第13.10节)。 【教学重点】 ?了解异常的处理机制 ?异常的解决方法 ?Exception类的作用及其使用方法 ?必检异常、免检异常的特点 【基本知识点】 1、常见异常演示 (1)算数异常:https://www.doczj.com/doc/105296221.html,ng.ArithmeticException 在算术运算中,0作为除数时,系统将产生该异常,示例: public static void main(String[] args) { int x=10; int y=0; int m=x/y; } Exception in thread "main" https://www.doczj.com/doc/105296221.html,ng.ArithmeticException: / by zero at exception.NotChecketException.main(NotChecketException.java:7)(2)数组越界异常:https://www.doczj.com/doc/105296221.html,ng.ArrayInd exOutOfBoundsException 在数组下标越界时,将产生该异常,示例:

程序设计异常处理机制

异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出现,那么你每个地方都要做相同处理,感觉相当的麻烦!Java 语言在设计的当初就考虑到这些问题,提出异常处理的框架的方案,所有的异常都可以用一个类型来表示,不同类型的异常对应不同的子类异常(这里的异常包括错误概念),定义异常处理的规范,在1.4版本以后增加了异常链机制,从而便于跟踪异常!这是Java语言设计者的高明之处,也是Java语言中的一个难点,下面是我对Java异常知识的一个总结,也算是资源回收一下。 一、Java异常的基础知识 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误https://www.doczj.com/doc/105296221.html,ng.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出https://www.doczj.com/doc/105296221.html,ng.ArithmeticException的异常。 有些异常需要做处理,有些则不需要捕获处理,后面会详细讲到。 天有不测风云,人有旦夕祸福,Java的程序代码也如此。在编程过程中,首先应当尽可能去避免错误和异常发生,对于不可避免、不可预测的情况则在考虑异常发生时如何处理。Java中的异常用对象来表示。Java对异常的处理是按异常分类处理的,不同异常有不同的分类,每种异常都对应一个类型(class),每个异常都对应一个异常(类的)对象。 异常类从哪里来?有两个来源,一是Java语言本身定义的一些基本异常类型,二是用户通过继承Exception类或者其子类自己定义的异常。Exception 类及其子类是Throwable的一种形式,它指出了合理的应用程序想要捕获的条件。 异常的对象从哪里来呢?有两个来源,一是Java运行时环境自动抛出系统生成的异常,而不管你是否愿意捕获和处理,它总要被抛出!比如除数为0的异常。二是程序员自己抛出的异常,这个异常可以是程序员自己定义的,也可以是Java语言中定义的,用throw 关键字抛出异常,这种异常常用来向调用者汇报异常的一些信息。 异常是针对方法来说的,抛出、声明抛出、捕获和处理异常都是在方法中进行的。 Java异常处理通过5个关键字try、catch、throw、throws、finally进行管理。基本过程是用try语句块包住要监视的语句,如果在try语句块内出现异常,则异常会被抛出,你的代码在catch语句块中可以捕获到这个异常并做处理;还有以部分系统生成的异常在Java运行时自动抛出。你也可以通过throws关键字在方法上声明该方法要抛出异常,然后在方法内部通过throw抛出异常对象。finally语句块会在方法执行return之前执行,一般结构如下: try{ 程序代码 }catch(异常类型1 异常的变量名1){ 程序代码 }catch(异常类型2 异常的变量名2){ 程序代码 }finally{ 程序代码 } catch语句可以有多个,用来匹配多个异常,匹配上多个中一个后,执行catch语句块时候仅仅执行匹配上的异常。catch的类型是Java语言中定义的或者程序员自己定义的,表示代

Java作业实验六---异常处理

提交方式: 把文件名改为学号姓名,提交文档和源码(只需提交最顶层包文件夹) 实验六异常处理 一、实验目的 1.学会利用Try-catch-finally语句来捕获和处理异常; 2.掌握自定义异常类的方法。 二、实验要求 1.通过编程理解系统异常处理的机制和创建自定义异常的方法。 2.掌握基础类。 三、实验内容 (一)异常处理机制 1. 编写使用try…catch 语句处理异常的程序文件Demo4_1.java,

编译并运行程序,并把运行结果复制在下面 。 注意:如果在catch 语句中声明的异常类是Exception,catch 语句也能正确地捕获,这是因为Exception是ArithmeticException的父类。如果不能确定会发生哪种情况的异常,那么最好指定catch的参数为Exception,即说明异常的类型为Exception。 2、源文件是Demo3_2.java。要捕捉的异常是除数为零和数组下标越界。通过修改a和c[]下标值体验程序。 【思考】 ①先运行上面程序,观察运行结果。 ②按下条件分别修改数据,编译后运行,观察输出结果,分析在try…catch块里那些语句没有被执行,为什么? 块外那些语句可被执行到,为什么? 修改a=0,保持c[2]=200; 保持a=10,修改c[3]=200, 修改a=0,修改c[3]=200; ③再添加一个catch{Exception e}{ },位置在最前面,观察编译信息,说明什么? 3、编写Demo3_3.java 程序,计算两数相除并输出结果。使用两个catch子句,分别捕捉除数为0的异常和参数输入有误异常。源代码如下:

最新java异常处理作业(1113132845)

Java异常处理作业 孙月巧 1、参考下面的程序,试修改程序,捕获相关异常,使得程序能正常运行。【提示:用错误数据测试,即可得到异常类名,运行时主方法参数输入abc 测试】 package November; import java.util.Scanner; public class StringIndexOutOf{ public static void main(String args[]){ System.out.println("请输入一个字符串:"); try{ Scanner reader=new Scanner(System.in); String str = reader.nextLine(); System.out.println("第四个字符为 " + str.charAt(3)); int aa = Integer.parseInt(str); System.out.println("平方为 " + aa * aa); } catch(StringIndexOutOfBoundsException e){ System.out.println("您输入的数值下标越界"); } catch(NumberFormatException nfe){ System.out.println("您输入的不是数字"); } } } 2、从命令行得到5个整数,放入一整型数组,然后打印输出,要求:如果输入数据不为整数,要捕获Integer.parseInt()产生的异常,显示“请输入整数”,捕获输入参数不足5个的异常(数组越界),显示“请输入至少5个整数”。 package November; public class Test2 { public static void main(String[] args) { System.out.println("请输入五个整数:"); try {

JAVA基础第6章异常处理机制_练习题

第6章异常处理机制 一、选择题 1.下列关于异常的说法正确的是(B)。 A.异常是编译时的错误 B.异常是运行时出现的错误 C.异常就是程序错误,程序错误就是异常 D.以上都不对 2.下列哪个类是异常类的父类(根类)(A)。 A.Exception B.ArithmeticException C.NullPointerException D.ArrayIndexOutofBoundException 3.有关下列异常处理机制叙述正确的是(C)。 try{ 可能产生异常的语句块; }catch(exceptiontype1 e){ 处理异常e的语句块; }catch(exceptiontype2 e){ 处理异常e的语句块; } …… finally{ 最终处理语句块; } A.try子句可能有多个,catch子句可能有多个,finally子句必须有。 B.多个catch参数中的异常类可以有父子关系,但父类异常的catch子句应该在子类异常的catch子句前面。 C.如果try子句没有抛出任何异常,则跳过catch子句,转移到finally子句继续执行。 D.当try子句监视的语句块抛出异常时,运行时系统会根据catch子句的顺序,从第一个开始,逐个查找能够捕获该异常的catch子句并执行catch子句内的语句块以完成对异常的处理,然后继续执行后面的catch子句,最后转移到finally子句,执行该子句中的语句块。4.有关throw和throws的说法中不正确的是(C)。 A.throw的作用是抛出异常,后面加的是异常类的对象。 B.throws的作用是向外抛出异常即声明要产生的若干异常,后面加的是异常类的类名。 C.throws只能声明要产生的自定义异常,也就是后面只能加自定义异常类。 D.以上都不对。 5.下列程序运行结果是(C)。 public class E { public static void main(String argv[]){ E m = new E(); System.out.println(m.amethod()); } public int amethod(){

JAVA实验四异常处理

实验四异常处理 实验目的 1、掌握异常的概念和Java 异常处理机制。 2、掌握异常的定义、抛出和捕捉处理。 实验内容与要求 1、仔细读下面的JAVA语言源程序,自己给出程序的运行结果 import java.io.*; public class Ch31 { public static void main(String args[])throws IOException { int[] ko=new int[15]; int n,a; String x; BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in)); System.out.print("Enter an integer:"); x=keyin.readLine(); n=Integer.parseInt(x); try { a=110/n; ko[15]=100; System.out.println("此描述无法执行!"); } catch(ArithmeticException e){ System.out.println("除数为0的错误"); } catch(ArrayIndexOutOfBoundsException f) { System.out.println("数组索引值大于数组长度的错误!"); } System.out.println("执行完catch的描述!!!"); } } 2.运行下面的程序,自己给出程序的运行结果。 import java.io.*; public class Ch32{ public Ch32(){ try{ int a[] = new int[2]; a[4] = 3; System.out.println("After handling exception return here?"); }catch(IndexOutOfBoundsException e){ System.err.println("exception msg:" + e.getMessage()); System.err.println("exception string:" + e.toString()); e.printStackTrace(); }finally{

Java异常处理总结(精)

Java 异常处理总结 找到一个关于异常总结的很详细的文章, 分享下. 异常在我们编程中很重,在适当的位置,合理的处理或者抛出异常,对程序来说至关重要。转:异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C 开始,你也许已经知道如何用if...else... 来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出现,那么你每个地方都要做相同处理,感觉相当的麻烦! Java 语言在设计的当初就考虑到这些问题,提出异常处理的框架的方案,所有的异常都可以用一个类型来表示,不同类型的异常对应不同的子类异常(这里的异常包括错误概念),定义异常处理的规范,在1.4版本以后增加了异常链机制,从而便于跟踪异常!这是Java 语言设计者的高明之处,也是Java 语言中的一个难点,下面是我对Java 异常知识的一个总结,也算是资源回收一下。 一、Java 异常的基础知识 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误https://www.doczj.com/doc/105296221.html,ng.Error ;如果你用System.out.println(11/0,那么你是因为你用0做了除数,会抛出https://www.doczj.com/doc/105296221.html,ng.ArithmeticException 的异常。有些异常需要做处理,有些则不需要捕获处理,后面会详细讲到。天有不测风云,人有旦夕祸福,Java 的程序代码也如此。在编程过程中,首先应当尽可能去避免错误和异常发生,对于不可避免、不可预测的情况则在考虑异常发生时如何处理。 Java 中的异常用对象来表示。Java 对异常的处理是按异常分类处理的,不同异常有不同的分类,每种异常都对应一个类型(class ),每个异常都对应一个异常(类的)对象。 异常类从哪里来?有两个来源,一是Java 语言本身定义的一些基本异常类型,二是用户通过继承Exception 类或者其子类自己定义的异常。Exception 类及其

java 日期及异常处理机制

Date、String、Calendar类型之间的转化 1.Calendar 转化String //获取当前时间的具体情况,如年,月,日,week,date,分,秒等Calendar calendat = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String dateStr = sdf.format(calendar.getTime()); 2.String 转化Calendar String str="2010-5-27"; SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd"); Date date =sdf.parse(str); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); 3.Date 转化String SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd"); String dateStr=sdf.format(new Date()); 4.String 转化Date String str="2010-5-27"; SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd"); Date birthday = sdf.parse(str); 5.Date 转化Calendar Calendar calendar = Calendar.getInstance(); calendar.setTime(new java.util.Date()); 6.Calendar转化Date Calendar calendar = Calendar.getInstance(); java.util.Date date =calendar.getTime();

JAVA实验报告5 异常处理实验

中南财经政法大学武汉学院实验报告 实验课名称:__JAVA语言____ 学生姓名:_______ 专业班级:__网络工程1104 学号:11071125__ 开课时间:___2013年2月26日_ 教务处制

《Java程序设计基础》实验报告 实验序号:05实验项目名称:异常处理 学号11071125姓名专业、班级 实验地点计-202指导教师时间2013-5-14一、实验目的及要求 了解异常处理机制; 了解异常的概念; 掌握抛出异常、捕获异常和异常处理的方法; 了解自定义异常类的定义和使用方法。 二、实验设备(环境)及要求 1、Windows-XP操作系统 2、Eclipse应用程序 三、实验内容与步骤 编写一个类ExceptionTest1,在main方法中使用try、catch、finally: ①在try块中,编写被0除的代码。 ②在catch块中,捕获被0除所产生的异常,并且打印异常信息。 ③在finally块中,打印一条语句。 四、实验结果与数据处理 import java.util.*; public class ExceptionTest1{ public static void main(String[]args){ Scanner in=new Scanner(System.in); try{ System.out.print("请输入被除数:"); double beichushu=in.nextDouble(); System.out.print("请输入除数:"); double chushu=in.nextDouble(); if(chushu==0) throw new ArithmeticException("请输入不为0的数字!"); double i=(beichushu/chushu); System.out.println("二者的商为:"+i);}catch(InputMismatchException e1){ System.out.println("请输入数字!");

java异常(习题)

java异常(习题) 练习 1. 填空 Java 中所有的错误都继承自______类;在该类的子类中, _______类表示严重的底层错误,对于这类错误一般处理的方式是___________;_______类表示例外、异常。 2. 查api,填空 异常类,从分类上说,该类属于__________(已检查| 未检查)异常,从处理方式上说,对这种异常___________________; 异常类,从分类上说,该类属于_________(已检 查|未检查)异常,从处理方式上说,对这种异常__________________。 (try-catch-finally)有如下代码:

要求: 1) MyException1 为已检查异常,MyException2 为未检查异常 2) 这两个异常均具有两个构造函数,一个无参,另一个带字符串参数,参数表示产生异常的详细信息。 6. (自定义异常)在上一题的基础上,把下面代码补充完整。

throws B. throws C. throws D. 不能抛出任何异常。 选择正确答案: A.编译不通过 B.编译通过,输出No Exception C.编译通过,输出ex1 D.编译通过,输出ex2 E.编译通过,输出ex3

10. *(try-catch,局部变量)有如下代码 选择正确答案: A. 编译不通过 B. 编译通过,输出-1 C. 编译通过,输出0 11. *(try-catch-finally)有如下代码

class MySuper { public void m() throws IOException { } } class MySub extends MySuper { public void m() throws EOFException { } } class MySub2 extends MySub { public void m() throws FileNotFoundException { } } 以上代码是否能编译通过如果不能,应该如何修改 14. *(自定义异常)完成某个计费系统的用户登录和注册模块,要求如下: 1)创建一个User 类,包括:用户登录名(username)、密码(password)、用户真实姓 名(name)、电子邮件地址(email)属性和相应的构造方法及set/get 方法。 2)创建两个自定义异常类,一个LoginException,表示登录异常。一个RegisterException,表示注册异常。自定义的两个异常,都要求有一个接受字符串类型参数的构造方法。 3)创建一个UserBiz 接口,该接口中定义两个方法: void register(String username, String password, String password2, String name, String email) throws RegisterException **(异常的捕获和抛出)有以下代码:

Java三种常见异常及解决

异常跟普通的警告等有一定的区别。当应用程序发生异常时,会中断正在执行的程序的正常指令流。也就是说,发生异常后面的代码将得不到正确的执行。甚至还会触发数据库的回退操作。 在Java的常见异常中,异常包括预定义异常与自定义异常。这两种异常的类型互为补充。作为一个合格的程序开发人员,要善于在应用程序中使用异常。这可以提高应用程序的交互性。同时,也是保证应用程序正常运行的前提。故异常的处理对于开发一个优秀的应用程序来说非常的重要。为此笔者认为程序开发人员应该对Java应用程序的常见异常有一个深入的了解。只有在了解这些常见异常的情况下,才能够做好自定义异常的处理。 一、Java常见异常的类型与原因。 对于Java应用程序的常见异常,笔者认为程序开发人员要从两个方面去了解。一是要知道有哪些常见的Java应用程序异常,二是需要知道哪些原因可能会造成这个异常。这不仅需要程序管理人员在日常工作中要注意积累,在必要的情况下还需要去从其它渠道收集资料。笔者对此就进行一个分析,希望能够对各位程序开发人员有一定的帮助。 1、 SQLException:操作数据库异常类。 现在的Java应用程序大部分都是依赖于数据库运行的。当Java应用程序与数据库进行沟通时如果产生了错误,就会触发这个类。同时会将数据库的错误信息通过这个类显示给用户。也就是说,这个操作数据库异常类是数据库与用户之间异常信息传递的桥梁。如现在用户往系统中插入数据,而在数据库中规定某个字段必须唯一。当用户插入数据的时候,如果这个字段的值跟现有的纪录重复了,违反了数据库的唯一性约束,此时数据库就会跑出一个异常信息。这个信息一般用户可能看不到,因为其发生在数据库层面的。此时这个操作数据库异常类就会捕捉到数据库的这个异常信息,并将这个异常信息传递到前台。如此的话,前台用户就可以根据这个异常信息来分析发生错误的原因。这就是这个操作数据库异常类的主要用途。在Java应用程序中,所有数据库操作发生异常时,都会触发这一个类。所有此时Java 应用程序本身的提示信息往往过于笼统,只是说与数据库交互出现错误,没有多大的参考价值。此时反而是数据库的提示信息更加有使用价值。 2、 ClassCastException:数据类型转换异常。 在Java应用程序中,有时候需要对数据类型进行转换。这个转换包括显示的转换与隐式的转换。不过无论怎么转换,都必须要符合一个前提的条件,即数据类型的兼容性。如果在数据转换的过程中,违反了这个原则,那么就会触发数据类型转换异常。如现在在应用程序中,开发人员需要将一个字符型的日期数据转换为数据库所能够接受的日期型数据,此时只需要在前台应用程序中进行控制,一般不会有问题。但是,如果前台应用程序缺乏相关的控制,如用户在输入日期的时候只输入月、日信息,而没有年份的信息。此时应用程序在进行数据类型转换的时候,就会出现异常。根据笔者的经验,数据类型转换异常在应用程序开发中使一个出现的比较多的异常,也是一个比较低级的异常。因为大部分情况下,都可以在应用程序窗口中对数据类型进行一些强制的控制。即在数据类型进行转换之前,就保证数据类型的兼容性。如此的话,就不容易造成数据类型的转换异常。如在只允许数值类型的字段中,可以设置不允许用户输入数值以外的字符。虽然说有了异常处理机制,可以保证应用程序不会被错误的运行。但是在实际开发中,还是要尽可能多的预见错误发生的原因,尽量避免异常的发生。 3、NumberFormatException:字符串转换为数字类型时抛出的异常。 在数据类型转换过程中,如果是字符型转换为数字型过程中出现的问题,对于这个异常在Java程序中采用了一个独立的异常,即NumberFormatException.如现在讲字符型的数据“123456”转换为数值型数据时,是允许的。但是如果字符型数据中包含了非数字型的字符,如123#56,此时转换为数值型时就会出现异常。系统就会捕捉到这个异常,并进行处理。

基于Java语言的异常处理机制的研究

基于语言的异常处理机制的研究 摘要:是一种面向对象的程序设计语言,其异常处理机制是语言的一大特色。本文讨论了的异常处理机制,并指出了异常处理机制使用中的常见错误模式及注意事项,以便更好的利用解决实际问题。 关键字:; 异常; 异常处理机制; 错误模式 引言:异常是一个运行时错误。在不支持异常处理的计算机语言中,错误必须被手工检查和处理——典型的是通过错误代码的运用等等,这种方法既笨重又麻烦。的异常处理机制避免了这些问题,采用面向对象的方法来管理运行时错误。 1、异常处理思想的由来 异常即程序运行时出现的非正常情况。在程序的运行过程中随时都有可能发生错误的可能。这些错误可能是由于包含不合法的输入数据所造成的,或者是数组越界存取,还可能是因为试图使用空引用来引用对象。当这些错误发生时,通常希望程序能够智能化地处理,而不会导致系统的崩溃或数据的丢失。错误处理的终极任务就是将错误从发生地传递到能够处理它的地方。 图、传统的错误处理方式 在传统的非面向对象的编程语言中,错误处理的任务全落在程序员身上,这样做有两个去缺点,一是程序员的负担过重,二是出错处理不规范,不利于程序员之间的协作沟通,而且降低了程序的可读性。在中使用异常为程序提供了一种有效的错误处理方式,使得方法的异常中止和错误处理有了一个清晰的接口:当一个方法引发一个异常之后,可以将异常抛出,由该方法的直接或间接调用者处理这个异常。这就是常说的 (捕获抛出)方式。这种处理方式使得错误的处理规范化,程序员可以用一致的方式来处理错误。 2、的异常处理机制 异常处理机制基于三中操作:声明异常、抛出异常和捕获异常。具体见图。 声明异常告诉编译程序哪里可能出错。当一个语句引起错误时,含有这个语句的方法就 会创建一个异常对象并将它传递给系统。异常对象包含有关异常的信息,包括它的类型和出错时程序的状态。一个方法抛出异常后,运行系统开始寻找用来处理错误的代码。处理错误的代码称为异常处理器,从当前的方法开始,通过方法调用链向后搜索,查找这一代码。处理器必须与抛出的异常类型相匹配,如果未发现异常处理器,程序就会中止。任何不是被你程序捕获的异常最终都会被系统提供的默认处理程序处理。默认处理程序显示一个描述异常的字符串,打印异常发生处的堆栈轨迹并且终止程序。 3、异常处理机制的规则 具体而言的异常处理通过个关键字控制:、、、和。想要进行异常监控的代码被包含在一个块中。如果在“”块中发生异常,它被抛出。程序代码可以捕捉这个异常(用)并且用某种合理的方法处理该异常。系统产生的异常在运行时被系统自动引发。手动引发一个异常,用关键字。任何被引发方法的异常都必须通过子句定义。任何在方法返回前绝对被执行的代码都被放置在块中。下面是一个异常处理的通常形式: { } ( ) { } ( ) { }

相关主题
文本预览
相关文档 最新文档