Java(异常的捕获及处理)

Java(异常的捕获及处理)
Java(异常的捕获及处理)

Java编程基础——异常的捕获及处理

杨巍

yangwei@https://www.360docs.net/doc/531350706.html,

异常的捕获及处理

Error Handling with Exceptions Java程序中的错误

语法错误——编译时

语义错误——运行时

出现各种各样的错误导致程序退出

异常Exception

异常

异常

导致程序中断运行的一种指令流

不处理异常,可能导致程序的中断执行

任何程序都可能存在问题

处理异常

增进程序的稳定性及效率

3

Java 编程基础

5

异常

在程序中使用异常处理

保证程序即使出现异常之后也可以正确执

行,则必须进行异常的处理

Java 中所有的异常都以类和对象的形式存在

提供各种异常类外

用户可以根据需要定义自己的异常类

public class ExceptionDemo2 {

public static void main(String[] args) {

10

练习

使用初始化参数输入两个数字,并进行

除法操作

捕获并处理自己程序的异常ExceptionDemo3.java

异常

数组超出绑定异常

https://www.360docs.net/doc/531350706.html,ng.ArrayIndexOutOfBoundsException 数字格式化异常

https://www.360docs.net/doc/531350706.html,ng.NumberFormatException

算术异常

https://www.360docs.net/doc/531350706.html,ng.ArithmeticException

ExceptionDemo4.java

11

异常

12

13

异常处理机制

异常处理机制

一旦产生异常,则首先产生一个异常类的实例化对象

在try 语句中对此异常对象进行捕获

产生的异常对象与catch 语句中的各个异常

类型进行匹配,匹配成功则执行catch 中的

代码

public class ExceptionDemo5 {

public static void main(String[] args) {

异常处理机制

Exception所捕获的异常范围大

数组超出绑定异常

https://www.360docs.net/doc/531350706.html,ng.ArrayIndexOutOfBoundsException 数字格式化异常

https://www.360docs.net/doc/531350706.html,ng.NumberFormatException

算术异常

https://www.360docs.net/doc/531350706.html,ng.ArithmeticException

15

异常处理机制

使用Exception方便地捕获所有异常

可不可以直接使用Throwable?

不建议这样使用

Error子类——本身不需要程序处理

Exception子类——需要程序处理

如果有多个异常分别进行捕获,还是直接使用Exception捕获?

Java中常见错误和异常解决方法(打印)

https://www.360docs.net/doc/531350706.html,ng.NullPointerException 原因是:有空指针,有地址没赋值 2.Exception in thread "main" https://www.360docs.net/doc/531350706.html,ng.ArithmeticException: / by zero 原因是除数是0 3.ArrayIndexOutOfBoundsException 原因是:数组越界 https://www.360docs.net/doc/531350706.html,ng.NumberFormatException 原因是:数字格式化有问题 5.Unhandled exception type Exception 原因是:没有进行异常处理 6.进行国际化操作的时候遇到这样的错误:Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name Message, locale zh_CN 答:因为在命令提示符中,是没有错误的 解决方法是:在myeclipse中,会出现这个错误 java国际化之Can't find bundle for base name 1.初步学习 最近在学习ResourseBundle时遇到了“Can't find bundle for base name ”这个错误搞了很 久才解决了。原因就是类路径问题要将属性文件放在类路径中!百度里很多都是教程但没有涉及到解决方法!2.中文显示: 测试文件 java 代码 package com.lht.ResourseBundleStudy; import java.util.ResourceBundle; public class ResourseBundleDemo { public static void main(String[] args) { ResourceBundle resource = ResourceBundle.getBundle("test"); System.out.print(resource.getString("msg0") + "!"); System.out.println(resource.getString("msg1") + "!"); } } test.properties msg0="Hello World" msg1="da jia hao" 开始自己测试的时候:将属性文件放在bin/下也试过也不行无赖中就在google中搜索了一 下终于在sun的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.360docs.net/doc/531350706.html,ng.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了。数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话) 2. https://www.360docs.net/doc/531350706.html,ng.classnotfoundexception 这个异常是很多原本在jb等开发环境中开发的程序员,把jb下的程序包放在wtk下编译经常出现的问题,异常的解释是"指定的类不存在",这里主要考虑一下类的名称和路径是否正确即可,如果是在jb下做的程序包,一般都是默认加上package的,所以转到wtk下后要注意把package的路径加上。 3. https://www.360docs.net/doc/531350706.html,ng.arithmeticexception 这个异常的 好好检查一下自己程序中涉及到数学运算的地方,公式是不是有不妥了。 4. 是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常。 5. https://www.360docs.net/doc/531350706.html,ng.illegalargumentexception 这个异常的解释是"方法的参数错误",很多j2me的类库中的方法在一些情况下都会引发这样的错误,比如音量调节方法中的音量参数如果写成负数就会出现这个异常,再比如g.setcolor(int red,int green,int blue)这个方法中的三个值,如果有超过255的也会出现这个异常,因此一旦发现这个异常,我们要做的,就是赶紧去检查一下方法调用中的参数传递是不是出现了错误。 6. https://www.360docs.net/doc/531350706.html,ng.illegalaccessexception 这个异常的解释是"没有访问权限",当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了package的情况下要注意这个异常。其他还有很多异常,我就不一一列举了,我要说明的是,一个合格的程序员,需要对程序中常见的问题有相当的了解和相应的解决办法,否则仅仅停留在写程序而不会改程序的话,会极大影响到自己的开发的。关于异常的全部说明,在api里都可以查阅。算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界异常:ArrayIndexOutOfBoundsException 违背安全原则异常:SecturityException 文件已结束异常:EOFException 文件未找到异常:FileNotFoundException 字符串转换为数字异常:NumberFormatException 操作数据库异常:SQLException 输入输出异常:IOException 方法未找到异常:NoSuchMethodException https://www.360docs.net/doc/531350706.html,ng.AbstractMethodError 抽象方法错误。当应用试图调用抽象方法时抛出。https://www.360docs.net/doc/531350706.html,ng.AssertionError 断言错。用来指示一个断言失败的情况。https://www.360docs.net/doc/531350706.html,ng.ClassCircularityError 类循环依赖错误。在初始化一个类时, 个文件中读取Java类,而检测到该文件的内容不符合类的有效格式时抛出。https://www.360docs.net/doc/531350706.html,ng.Error 错误。是所有错误的基类,用于标识严重的程序运行问题。这些问题通常描述一些不应被应用程序捕获的反常情况。https://www.360docs.net/doc/531350706.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中异常处理

第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.360docs.net/doc/531350706.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.360docs.net/doc/531350706.html,ng.ArithmeticException: / by zero at exception.NotChecketException.main(NotChecketException.java:7)(2)数组越界异常:https://www.360docs.net/doc/531350706.html,ng.ArrayInd exOutOfBoundsException 在数组下标越界时,将产生该异常,示例:

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 异常(习题)

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

问:当读入的n 分别为1,2,3,4,5 时,输出的结果分别是什么?

5. (自定义异常)创建两个自定义异常类MyException1 和MyException2。 要求: 1) MyException1 为已检查异常,MyException2 为未检查异常 2) 这两个异常均具有两个构造函数,一个无参,另一个带字符串参数,参数表示产生异常的详细信息。

问: 在//1 处,填入以下________代码可以编译通过,在//2 处,填入_________代码可以编译通过。 A. throws java.io.IOException B. throws java.io.FileNotFoundException, java.io.EOFException C. throws java.sql.SQLException D. 不能抛出任何异常。

最新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的常见问题及解决方法

1."https://www.360docs.net/doc/531350706.html,mons.collections.SequencedHashMap"'s signer information does not match signer information of other classes in the same package 这是由于struts提供的commons-beanutils.jar和hibernate提供的commons-collections.jar冲突成的, 可以从spring提供的lib中找到这个两个jar https://www.360docs.net/doc/531350706.html,ng.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.IdentNode 用hql 时,忘了给表名加别名,如select p from Position,应该是select p from Position p 3.The Server didn 't send back a proper XML response 用FCKEditor时 原因:解析不了xml文件 解决方法: 情况一:web.xml的配置是否正确,具体查看《FCKEditor使用指南.pdf》,还有fckeditor自带的几个jar 包 情况二:加入serializer.jar,xalan.jar 情况三:把项目下的fckeditor包删了,重新加入一遍 https://www.360docs.net/doc/531350706.html,.eclipse.swt.SWTError: No more handles [Unknown Mozilla path (MOZILLA_FIVE_HOME not set)] SWTError:没有更多的处理[未知Mozilla的路径 (MOZILLA_FIVE_HOME未设置)] 环境:linux下运行swt程序(我出现此问题是,在linux下嵌套浏览器) 原因:firefox版本不一致 解决:重装一个firefox,并设置相关变量 5.Exception in thread "main" org.eclipse.swt.SWTError: No more handles [Could not detect registered XULRunner to use] 环境:用XULRunner 在java application中嵌套浏览器 原因:没有注册XULRunner 解决:window下环境中,在程序中加入,如(第二个参数是下载解压后的存放路径): static{ System.setProperty("org.eclipse.swt.browser.XULRunnerPath", "C:\\xulrunner"); } 6.Exception in thread "main" https://www.360docs.net/doc/531350706.html,ng.UnsatisfiedLinkError: no swt-win32-3536 or swt-win32 in swt.library.path, java.library.path or the jar file

java异常处理试题及答案

j a v a异常处理试题及答 案 This model paper was revised by the Standardization Office on December 10, 2020

异常处理练习题 一、选择题 中用来抛出异常的关键字是 (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 语言中,下列哪一子句是异常处理的出口(C) A、try{…}子句 B、catch{…}子句 C、finally{…}子句 D、以上说法都丌对 5.下列程序的执行,说法错误的是 (C) public class MultiCatch

{ public static void main(String args[]) { try { int a=; int b=42/a; int c[]={1}; c[42]=99; } catch(ArithmeticException e) { 除0异常:”+e); } catch(ArrayIndexOutOfBoundsException e) {

数组超越边界异常:”+e); } } } A、程序将输出第15行的异常信息 B、程序第10行出错 C、程序将输出“b=42” D、程序将输出第15和19行的异常信息 6.下列程序的执行,说法正确的是(D)class ExMulti { static void procedure() { try { int c[]={1};

Java异常处理总结(精)

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

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("请输入数字!");

实验10 java异常(答案)

实验六Java异常处理 【实验目的】 1)掌握Java异常的概念及工作机制 2)掌握异常的分类 3)掌握抛出异常语句的使用(throw) 4)掌握抛出捕获处理异常语句的使用(try…catch…finally) 5)掌握上抛异常语句的使用(throws) 6)掌握创建自定义异常 【实验环境】 JDK1.6+Eclpise3.2 【实验准备】 1)复习课件中理论知识 2)练习课堂所讲的例子 【实验内容】 1、编写一个应用程序,要求从键盘输入一个double型的圆的半径,计算并输出其面积。测试当输入的数据不是double型数据(如字符串“abc”)会产生什么结果,怎样处理。 package SIX; import java.io.IOException; import java.io.InputStreamReader; import java.io.BufferedReader; public class CIRCLE { public static void main(String[] args) throws IOException { System.out.print("请输入半径: "); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); try{ System.out.println("圆的面积为: "+computerArea(Double.parseDouble(br.readLine()))); } catch(NumberFormatException e){ System.out.println("您输入的不是数值,请重新输入"); } } public static double computerArea(double r)

Java三种常见异常及解决

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

Java遇到的问题以及解决方法

一、根据小锋视频实现 HelloWorld 时出现的问题(20140925) 1. 当在点击debug 后出现下面的情况: 1.1问题原因 Tomcat 默认使用的端口(8080)被占用了。 1.2解决方法 修改Servers server.xml 中默认使用的端口(8080),比如改为8888. 2. 当在点击debug 后出现下面的情况: Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds. Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor. 2.1问题原因 由于项目太大,加载的时间超过了tomcat默认启动时间45秒。 2.2解决方法 (1)修改workspace\.metadata\.plugins\org.eclipse.wst.server.core\servers.xml文件。

Java异常学习心得

Java异常学习心得 Java异常学习心得 本文重在Java中异常机制的一些概念。写本文的目的在于方便我很长时间后若是忘了这些东西可以通过这片文章迅速回忆起来。 1. 异常机制 1.1 异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。 1.2 传统的处理异常的办法是,函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果。这样做有如下的弊端:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆;可读性降低,将程序代码与处理异常的代码混爹在一起;由调用函数的程序来分析错误,这就要求客户程序员对库函数有很深的了解。 1.3 异常处理的流程 1.3.1 遇到错误,方法立即结束,并不返回一个值;同时,抛出一个异常对象 1.3.2 调用该方法的程序也不会继续执行下去,而是搜索一个可以处理该异常的异常处理器,并执行其中的代码 2 异常的分类 2.1 异常的分类 2.1.1 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception,具体的RuntimeException继承RuntimeException。 2.1.2 Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。 2.2 每个类型的异常的特点 2.2.1 Error体系 Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形。应用程序不应该抛出这种类型的对象(一般是由虚拟机抛出)。如果出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以,在进行程序设计时,应该更关注Exception体系。 2.2.2 Exception体系 Exception体系包括RuntimeException体系和其他非RuntimeException的体系

Java常见问题及处理

常见的JAVA错误以及处理方法 2007-12-10 15:43 该错误集合中有些是我自己总结的,有些是从网络上搜索到的别人的一些错误处理集合,都放在一起来了 0、需要标识符 a) 不在函数内 1、非法表达式开始 b) 可能:丢失括号 . 2. no data found a) 可能:setInt(1,100)中,没有100这个值 3. 找不到符号 a) 可能:没导入包 4. 指定了无效URL a) 可能:数据库名或IP错误,即连接出错 5. 类路径没有找到 a) 可能: ClassNotFoundException: oracle.jdbc.driver.OracleDriver b) 原因: 一般是指包名写错,或者没有import包,或者没有在类路径中找到jar文件 c) 解决: 没有加载Oracle驱动jar,在.bash_profile中把ojdbc14.jar加进来 6. 空指针异常 a) 可能: 数据源错误比如数据库名或IP错误 7. 不能执行查询 a) 可能: 数据库中表的问题,比如列名不存在 8. invalid identity a) 可能: 列名出错 9. 若在数据库中创建了两个sequence ,运行时出现异常可能是先后执行了多次select语句,导致与原有的序列号产生冲突 10. 表名或列名不存在 a) 可能:表不存在或者没有插入数据到表中 11. 不支持的类,类的版本错误 a) 可能:没有导入jdk5.0,或者编译器仍为1.4 12. MappingNotFoundException a) Maybe: In the Eclipse Not refersh , or not exist in the dirctory 13. HibernateException: /hibernate.cfg.xml not found a) Maybe1: hibernate.cfg.xml not in the root directory b) Maybe2: Could not parse configuration . c) resolve: database not connect or use another database 14. ConstraintViolationException a) Maybe: used a not true database 15. 驱动没有找到或者 JDBC Driver not found 可能:连接数据库的驱动jar包不存在或者版本不一致,比如将旧的版本换成新的会造成该类错误 16. 空指针异常, https://www.360docs.net/doc/531350706.html,ng.NullPointerException

java异常及解决方法

java异常及解决方法 1:https://www.360docs.net/doc/531350706.html,.BindException: Address already in use解决方法 在网络编程中,特别是在短时间内new的网络连接太多,经常出现https://www.360docs.net/doc/531350706.html,.BindException: Address already in use: JVM_Bind的异常,网络有很多介绍此异常的,通常都是在说是要使用的端口被别的程序已经使用,但有时并不是这个原因,通过仔细查找,找到一些很好的资料,在此将其一一记录下来。短时间内new socket操作过多而socket.close()操作并不能立即释放绑定的端口而是把端口设置为TIME_WAIT状态过段时间(默认240s)才释放(用netstat -na可以看到)最后系统资源耗尽 (windows上是耗尽了pool of ephemeral ports 这段区间在1024-5000之间) Socket Remember that TCP guarantees all data transmitted will be delivered, if at all possible. When you close a socket, the server goes into a TIME_WAIT state, just to be really really sure that all the data has gone through. When a socket is closed, both sides agree by sending messages to each other that they will send no more data. This, it seemed to me was good enough, and after the handshaking is done, the socket should be closed. The problem is two-fold. First, there is no 2:https://www.360docs.net/doc/531350706.html,.BindException: Address already in use: connect的问题大概原因是短时间内new socket操作很多,而socket.close()操作并不能立即释放绑定的端口,而是把端口设置为TIME_WAIT状态,过段时间(默认240s)才释放,(用netstat -na可以看到),最后系统资源耗尽(windows上是耗尽了pool of ephemeral ports ,这段区间在1024-5000之间; ) 避免出现这一问题的方法有两个,一个是调高你的web服务器的最大连接线程数,调到1024,2048都还凑合,以resin 为例,修改resin.conf中的thread-pool.thread_max,如果你采用apache连resin的架构,别忘了再调整apache; 另一个是修改运行web服务器的机器的操作系统网络配置,把time wait的时间调低一些,比如30s。 在red hat上,查看有关的选项,[xxx@xxx~]$ /sbin/sysctl -a|grep net.ipv4.tcp_tw net.ipv4.tcp_tw_reuse = 0net.ipv4.tcp_tw_recycle = 0 [xxx@xxx~]$vi /etc/sysctl,修改 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 [xxx@xxx~]$sysctl -p,使内核参数生效 socket-faq中的这一段讲time_wait的,摘录如下: 2.7. Please explain the TIME_WAIT state. Remember that TCP guarantees all data transmitted will be delivered, 3:当您尝试从TCP 端口大于5000 连接收到错误' WSAENOBUFS (10055) '症状

相关文档
最新文档