经济观察
运营管理

java 异常管理

java 异常管理

java中异常的处理方法有哪两种

可以选择三种方法来进行异常处理1对代码块用try..catch进行异常捕获处理;2在 该代码的方法体外用throws进行抛出声明,告知此方法的调用者这段代码可能会出现这些异常,你需要谨慎处理。

此时有两种情况:如果声明抛出的异常是非运行时异常,此方法的调用者必须显示地用try..catch块进行捕获或者继续向上层抛出异常。

如果声明抛出的异常是运行时异常,此方法的调用者可以选择地进行异常捕获处理。

3在代码块用throw手动抛出一个异常对象,此时也有两种情况,跟2)中的类似:如果抛出的异常对象是非运行时异常,此方法的调用者必须显示地用try..catch块进行捕获或者继续向上层抛出异常。

如果抛出的异常对象是运行时异常,此方法的调用者可以选择地进行异常捕获处理。

(如果最终将异常抛给main方法,则相当于交给jvm自动处理,此时jvm会简单地打印异常信息)常处理和设计的建议1. 只在必要使用异常的地方才使用异常,不要用异常去控制程序的流程2. 切忌使用空catch块3. 检查异常和非检查异常的选择4. 注意catch块的顺序5. 不要将提供给用户看的信息放在异常信息里6. 避免多次在日志信息中记录同一个异常7. 异常处理尽量放在高层进行8. 在finally中释放资源

谁知道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的体系 2.2.2.1 RuntimeException RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。

处理RuntimeException的原则是:如果出现RuntimeException,那么一定是程序员的错误。

例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。

2.2.2.2 其他(IOException等等) 这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。

2.3 与C++异常分类的不同 2.3.1 其实,Java中RuntimeException这个类名起的并不恰当,因为任何异常都是运行时出现的。

(在编译时出现的错误并不是异常,换句话说,异常就是为了解决程序运行时出现的的错误)。

2.3.2 C++中logic_error与Java中的RuntimeException是等价的,而runtime_error与Java中非RuntimeException类型的异常是等价的。

3 异常的使用方法 3.1 声明方法抛出异常 3.1.1 语法:throws(略) 3.1.2 为什么要声明方法抛出异常? 方法是否抛出异常与方法返回值的类型一样重要。

假设方法抛出异常确没有声明该方法将抛出异常,那么客户程序员可以调用这个方法而且不用编写处理异常的代码。

那么,一旦出现异常,那么这个异常就没有合适的异常控制器来解决。

3.1.3 为什么抛出的异常一定是已检查异常? RuntimeException与Error可以在任何代码中产生,它们不需要由程序员显示的抛出,一旦出现错误,那么相应的异常会被自动抛出。

而已检查异常是由程序员抛出的,这分为两种情况:客户程序员调用会抛出异常的库函数(库函数的异常由库程序员抛出);客户程序员自己使用throw语句抛出异常。

遇到Error,程序员一般是无能为力的;遇到RuntimeException,那么一定是程序存在逻辑错误,要对程序进行修改(相当于调试的一种方法);只有已检查异常才是程序员所关心的,程序应该且仅应该抛出或处理已检查异常。

3.1.4 注意:覆盖父类某方法的子类方法不能抛出比父类方法更多的异常,所以,有时设计父类的方法时会声明抛出异常,但实际的实现方法的代码却并不抛出异常,这样做的目的就是为了方便子类方法覆盖父类方法时可以抛出异常。

3.2 如何抛出异常 3.2.1 语法:throw(略) 3.2.2 抛出什么异常? 对于一个异常对象,真正有用的信息时异常的对象类型,而异常对象本身毫无意义。

比如一个异常对象的类型是ClassCastException,那么这个类名就是唯一有用的信息。

所以,在选择抛出什么异常时,最关键的就是选择异常的类名能够明确说明异常情况的类。

3.2.3 异常对象通常有两种构造函数:一种是无参数的构造函数;另一种是带一个字符串的构造函数,这个字符串将作为这个异常对象除了类型名以外的额外说明。

3.2.4 创建自己的异常:当Java内置的异常都不能明确的说明异常情况的时候,需要创建自己的异常。

需要注意的是,唯一有用的就是类型名这个信息,所以不要在异常类的设计上花费精力。

3.3 捕获异常 如果一个异常没有被处理,那么,对于一个非图形界面的程序而言,该程序会被中止并输出异常信息;对于一个图形界面程序,也会输出异常的信息,但是程序并不中止,而是返回用Ы缑娲?硌?分小?BR> 3.3.1 语法:try、catch和...

Java中“异常机制”是什么?

、"异常"的处理方法 有两种方法处理"异常":第一种如例2,将含有"异常"出口的方法直接放到ty块中,然后由紧随其后的catch块捕捉。

第二种是不直接监听捕捉被引用方法的"异常",而是将这个"异常"关联传递给引用方法,同时监听捕捉工作也相应向上传递。

例3: int myMethod2(int dt) { int data = 0; ty{ data = myMethod(dt) }catch(LowZeoException e){ System.out.pintln("发生数据错误!"); e.pintStackTace(); } etun data; } int myMethod(int dt) thows LowZeoException { int data = isLegal(dt); 此处引用isLegal()方法,但并没有捕捉它的"异常" etun data; } 从上例中可以看到方法myMethod()与它引用的方法isLegal()产生的"异常"LowZeoException建立了关联,也就是完成了将"异常"关联的向上传递,此时的myMethod()方法体中虽然只有一个etun返回语句,但它事实上同样有两种方式的函数出口,一种是由etun返回的整形值,另一种则是返回方法名中的thows关键字所指的"异常类"的实例对象。

相应的,监听捕捉的工作交给了上一层方法myMethod2()。

同样的道理,myMethod2()也可以将"异常"通过thows的关联继续向上传递。

这样的话,一旦一个"异常"被捕捉到时,这个"异常"必有一个传递路径,而如果我们在捕捉点的catch程序块中加入pintStackTace()方法,便能清楚的看到这个"异常"是怎样传递过来的。

例如在例3如果有"异常"被捕捉到,e.pintStackTace()打印出来的结果将是: LowZeoException: at Example.isLegal at Example myMethod at Example.myMethod2 at Example main 从上结果中我们可以看到,从LowZeoException"异常"产生点,即包含thow new LowZeoException();子句的方法开始,然后一直追溯到产生当前线程的方法(注意:pintStackTace()并不是追溯到捕捉点结束,而是到产生当前线程的方法结束)。

"异常"产生点产生的LowZeoException"异常"对象,首先被赋给了isLegal()关联的LowZeoException类的无名引用,然后继续赋给myMethod()关联的LowZeoException类的无名引用,再继续赋给myMethod2()中的catch块中的形参e,最后在这里被处理掉,这个"异常"对象随即消失。

可以说,catch(){}就是"异常"对象的生命终结点。

另外还要注意一点,方法与"异常"的关联可以一直向上传递,当传递到与main方法关联后,即在main()方法的定义中使用了thows Exception,这时除了虚拟机没有其它方法能够引用main()方法,且在程序中可能看不到ty…catch程序块,但并不会产生错误,因为此时虚拟机会捕捉"异常",并且会默认的调用pintStackTace()方法打印出"异常"路径。

总之只要一个方法关联了"异常",可以将这个"异常"关联向上传递,但是最终必须使用catch来终止"异常",或者一直传递到main()方法交给Java虚拟机来结束"异常"对象的生命,否则是通不过编译的。

四、使用"异常机制"的需要注意的几点 1. 一个方法中可能会产生多种不同的异常,你可以设置多个"异常"抛出点来解决这个问题。

2. "异常"对象从产生点产生后,到被捕捉后终止生命的全过程中,实际上是一个传值过程,所以你可以根据需要,来合理的控制检测到"异常"的粒度。

例如在例3中,如果你并不需要知道具体产生的是LowZeoException"异常",那么你可以使用"异常"的公共父类Exception来结合"异常"对象,即catch(Exception e){…}。

同样在"异常"与方法关联的传递过程中,也可以根据需要控制关联"异常"的粒度,即thows后面跟上异常对象的父类名。

3. "异常机制"中还有一种特殊情况――RuntimeException"异常类"(见图1),这个"异常类"和它的所有子类都有一个特性,就是"异常"对象一产生就被Java虚拟机直接处理掉,即在方法中出现thow 子句的地方便被虚拟机捕捉了。

因此凡是抛出这种"运行时异常"的方法在被引用时,不需要有ty…catch语句来处理"异常"。

在java中的异常处理中的异常对象是什么

Exception类以及他的子类 的一个实例对象比如常见异常1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。

对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了。

数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话) 2. java.lang.classnotfoundexception 这个异常是很多原本在jb等开发环境中开发的程序员,把jb下的程序包放在wtk下编译经常出现的问题,异常的解释是"指定的类不存在",这里主要考虑一下类的名称和路径是否正确即可,如果是在jb下做的程序包,一般都是默认加上package的,所以转到wtk下后要注意把package的路径加上。

3. java.lang.arithmeticexception 这个异常的解释是"数学运算异常",比如程序中出现了除以零这样的运算就会出这样的异常,对这种异常,大家就要好好检查一下自己程序中涉及到数学运算的地方,公式是不是有不妥了。

4. java.lang.arrayindexoutofboundsexception 这个异常相信很多朋友也经常遇到过,异常的解释是"数组下标越界",现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常。

5. java.lang.illegalargumentexception 这个异常的解释是"方法的参数错误",很多j2me的类库中的方法在一些情况下都会引发这样的错误,比如音量调节方法中的音量参数如果写成负数就会出现这个异常,再比如g.setcolor(int red,int green,int blue)这个方法中的三个值,如果有超过255的也会出现这个异常,因此一旦发现这个异常,我们要做的,就是赶紧去检查一下方法调用中的参数传递是不是出现了错误。

6. java.lang.illegalaccessexception 这个异常的解释是"没有访问权限",当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。

对程序中用了package的情况下要注意这个异常。

其他还有很多异常,我就不一一列举了,我要说明的是,一个合格的程序员,需要对程序中常见的问题有相当的了解和相应的解决办法,否则仅仅停留在写程序而不会改程序的话,会极大影响到自己的开发的。

关于异常的全部说明,在api里都可以查阅。

算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界异常:ArrayIndexOutOfBoundsException 违背安全原则异常:SecturityException 文件已结束异常:EOFException 文件未找到异常:FileNotFoundException 字符串转换为数字异常:NumberFormatException 操作数据库异常:SQLException 输入输出异常:IOException 方法未找到异常:NoSuchMethodException java.lang.AbstractMethodError 抽象方法错误。

当应用试图调用抽象方法时抛出。

java.lang.AssertionError 断言错。

用来指示一个断言失败的情况。

java.lang.ClassCircularityError 类循环依赖错误。

在初始化一个类时,若检测到类之间循环依赖则抛出该异常。

java.lang.ClassFormatError 类格式错误。

当Java虚拟机试图从一个文件中读取Java类,而检测到该文件的内容不符合类的有效格式时抛出。

java.lang.Error 错误。

是所有错误的基类,用于标识严重的程序运行问题。

这些问题通常描述一些不应被应用程序捕获的反常情况。

java.lang.ExceptionInInitializerError 初始化程序错误。

当执行一个类的静态初始化程序的过程中,发生了异常时抛出。

静态初始化程序是指直接包含于类中的static语句段。

java.lang.IllegalAccessError 违法访问错误。

当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。

java.lang.IncompatibleClassChangeError 不兼容的类变化错误。

当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出该异常。

一般在修改了应用中的某些类的声明定义而没有对整个应用重新编译而直接运行的情况下,容易引发该错误。

java.lang.InstantiationError 实例化错误。

当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常. java.lang.InternalError 内部错误。

用于指示Java虚拟机发生了内部错误。

java.lang.LinkageError 链接错误。

该错误及其所有子类指示某个类依赖于另外一些类,在该类编译之后,被依赖的类改变了其类定义而没有重新编译所有的类,进而引发错误的情况。

java.lang....

Java的异常处理有哪些方法呢?

1.异常处理: 在Java语言的错误处理结构由try,catch,finally三个块组成。

其中try块存放将可能发生异常的Java语言,并管理相关的异常指针;catch块紧跟在try块后面,用来激发被捕获的异常;finally块包含清除程序没有释放的资源,句柄等。

不管try块中的代码如何退出,都将执行finally块。

2.抛出异常: Java语言可以不在方法中直接捕获,而用throw语句将异常抛给上层的调用者。

Throw语句就是来明确地抛出一个异常;首先你必需得到一个Throwable的实例句柄,通过参数传到catch中,或者采用new操作符来创建一个。

例如:public void execute(String str,int index) throws WhcaException{ try{ //可能产生异常的代码; }catch(Exception e){ throw new WhcaException(“JB: M:”+e.getMessage); } } 最后谈谈使用"异常机制"的需要注意的几点 1.一个方法中可能会产生多种不同的异常,你可以设置多个"异常"抛出点来解决这个问题。

2."异常"对象从产生点产生后,到被捕捉后终止生命的全过程中,实际上是一个传值过程,所以你可以根据需要,来合理的控制检测到"异常"的粒度。

3."异常机制"中还有一种特殊情况――RuntimeException"异常类",这个"异常类"和它的所有子类都有一个特性,就是"异常"对象一产生就被Java虚拟机直接处理掉,即在方法中出现throw子句的地方便被虚拟机捕捉了。

因此凡是抛出这种"运行时异常"的方法在被引用时,不需要有try…catch语句来处理"异常"。

4.捕获了异常,就要对它进行适当的处理。

调用printStackTrace对调试程序有帮助,但没有真正的处理异常! printStackTrace()方法只能分析程序运行情况,在JDK1.4中提供了StackTraceElement类来获取程序的运行情况!例: import javax.swing.*; public class StackTraceTest { public static int factorial(int n) { System.out.print("迭代: ("+n+"):"); Throwable t=new Throwable(); StackTraceElement[] frames=t.getStackTrace(); for(int i=0;i统计你写的java代码行数

Java为什么要引入异常处理机制?

虽然有点多 但是对你有用 好好去看看吧异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出现,那么你每个地方都要做相同处理,感觉相当的麻烦! Java语言在设计的当初就考虑到这些问题,提出异常处理的框架的方案,所有的异常都可以用一个类型来表示,不同类型的异常对应不同的子类异常(这里的异常包括错误概念),定义异常处理的规范,在1.4版本以后增加了异常链机制,从而便于跟踪异常!这是Java语言设计者的高明之处,也是Java语言中的一个难点,下面是我对Java异常大发一分时时彩的一个总结,也算是资源回收一下。

一、Java异常的基础大发一分时时彩 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。

比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error;如果你用System.out.println(11/0),那么你是因为你用0做了除数,会抛出java.lang.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语言中定义的或者程序员自己定义的,表示代码抛出异常的类型,异常的变量名表示抛出异常的对象的引用,如果catch捕获并匹配上了该异常,那么就可以直接用这个异常变量名,此时该异常变量名指向所匹配的异常,并且在catch代码块中可以直接引用。

这一点非常非常的特殊和重要! Java异常处理的目的是提高程序的健壮性,你可以在catch和finally代码块中给程序一个修正机会,使得程序不因异常而终止或者流程发生以外的改变。

同时,通过获取Java异常信息,也为程序的开发维护提供了方便,一般通过异常信息就很快就能找到出现异常的问题(代码)所在。

Java异常处理是Java语言的一大特色,也是个难点,掌握异常处理可以让写的代码更健壮和易于维护。

二、Java异常类类图 下面是这几个类的层次图: java.lang.Object java.lang.Throwable java.lang.Exception java.lang.RuntimeException java.lang.Error java.lang.ThreadDeath 下面四个类的介绍来自java api 文档。

1、Throwable Throwable 类是 Java 语言中所有错误或异常的超类。

只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。

类似地,只有此类或其子类之一才可以是 catch 子句中的参数类型。

两个子类的实例,Error 和 Exception,通常用于指示发生了异常情况。

通常,这些实例是在异常情况的上下文中新近创建的,因此包含了相关的信息(比如堆栈跟踪数据)。

2、Exception Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件,表示程序本身可以处理的异常。

3、Error Error 是 Throwable 的子类,表示仅靠程序本身无法恢复的严重错误,用于指示合理的应用程序不应该试图捕获的严重问题。

在执行该方法期间,无需在方法中通过throws声明可能抛出但没有捕获的 Error 的任何子类,因为Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出...

JAVA中的异常处理机制的原理

Java中的异常处理机制的简单原理和应用 : java中Throwable这个类可以被作为异常抛出的类,继承它的分为异常Exception和错误Error.Exception表示程序需要捕捉和处理的的异常;Error表示系统级别的错误和程序无需处理的。

我们所需要关心的是Exception. Execption可以分为java标准定义的异常和程序员自定义异常2种. (1)一种是当程序违反了java语规则的时候,JAVA虚拟机就会将发生的错误表示为一个异常.这里语法规则指的是JAVA类库内置的语义检查。

(2)另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。

所有的异常都是Thowable的子类。

异常处理是与程序执行是并行的.Try{ //可能发现异常的语句块}catch(异常类型,e){ //发生异常时候的执行语句块} finnally{ //不管是否发生异常都执行的语句块}以下是一个自定义异常测试类:package code;class MyException extends Exception{ public void f() { System.out.println("this is my Exception!!"); }}public class ExceptionTestTwo { private int i = 0; private int j; ExceptionTestTwo(int x) throws MyException { f2(); j = x / i; } public void f2() throws MyException { System.out.println("this is My first Exception!!"); throw new MyException(); } public static void main(String[] args) { try { new ExceptionTestTwo(9); } catch (MyException e2) { e2.f(); } catch (Exception e) { e.printStackTrace(); } finally { System.out.println("Finally is first Exception!!"); } try { throw new MyException(); } catch (MyException e1) { e1.f(); } finally { System.out.println("Finally is second Exception!!"); } }}

java中关于异常如何处理?

//除零异常,不做处理 class test{ int devide(int x,int y) {return x/y;} } class TestException{ public static void main(String arg[]) { new test().devide(3,0); System.out.println("the end!!"); } } //除零异常,进行捕获 class test{ int devide(int x,int y) {return x/y;} } class CatchException{ public static void main(String arg[]) { try{ new test().devide(3,0); } catch(ArithmeticException l)//exception类 声名 对象l {//catch中可以执行其他语句输出 // l.printStackTrace() ;//printStackTrace // public void printStackTrace(PrintWriter s) // 将此 throwable 及其追踪输出到指定的 PrintWriter。

Java异常以及怎样处理异常?

Java 异常以及异常处理 可将 Java 异常看作是一类消息,它传送一些系统问题、故障及未按规定执行的动作的相关信息。

异常包含信息,以将信息从应用程序的一部分发送到另一部分。

编译语言为何要处理异常?为何不在异常出现位置随时处理具体故障?因为有时候我们需要在系统中交流错误消息,以便按照统一的方式处理问题,有时是因为有若干处理问题的可能方式,但您不知道使用哪一种,此时,可将处理异常的任务委托给调用方法的代码。

调用者通常更能了解问题来源的上下文,能更好的确定恢复方式。

必定在运行的 Java 应用程序的一些类或对象中产生异常。

出现故障时,“发送者”将产生异常对象。

异常可能代表 Java 代码出现的问题,也可能是 JVM 的相应错误,或基础硬件或操作系统的错误。

异常本身表示消息,指发送者传给接收者的数据“负荷”。

首先,异常基于类的类型来传输有用信息。

很多情况下,基于异常的类既能识别故障本因并能更正问题。

其次,异常还带有可能有用的数据(如属性)。

在处理异常时,消息必须有接收者;否则将无法处理产生异常的底层问题。

在上例中,异常“产生者”是读取文本行的 BufferedReader。

在故障出现时,将在 readLine 方法中构建 IOException 对象。

异常“接收者”是代码本身。

EchoInputHandle 应用程序的 try-catch 结构中的 catch 块是异常的接收者,它以字符串形式输出异常,将问题记录下来。

Java 异常类的层次结构 在我们从总体上了解异常后,我们应该了解如何在 Java 应用程序中使用异常,即需要了解 Java 类的层次结构。

必定在运行的 Java 应用程序的一些类或对象中产生异常。

出现故障时,“发送者”将产生异常对象。

异常可能代表 Java 代码出现的问题,也可能是 JVM 的相应错误,或基础硬件或操作系统的错误。

异常本身表示消息,指发送者传给接收者的数据“负荷”。

首先,异常基于类的类型来传输有用信息。

很多情况下,基于异常的类既能识别故障本因并能更正问题。

其次,异常还带有可能有用的数据(如属性)。

在处理异常时,消息必须有接收者;否则将无法处理产生异常的底层问题。

在上例中,异常“产生者”是读取文本行的 BufferedReader。

在故障出现时,将在 readLine 方法中构建 IOException 对象。

异常“接收者”是代码本身。

EchoInputHandle 应用程序的 try-catch 结构中的 catch 块是异常的接收者,它以字符串形式输出异常,将问题记录下来。

Java 异常类的层次结构 在我们从总体上了解异常后,我们应该了解如何在 Java 应用程序中使用异常,即需要了解 Java 类的层次结构。

必定在运行的 Java 应用程序的一些类或对象中产生异常。

出现故障时,“发送者”将产生异常对象。

异常可能代表 Java 代码出现的问题,也可能是 JVM 的相应错误,或基础硬件或操作系统的错误。

异常本身表示消息,指发送者传给接收者的数据“负荷”。

首先,异常基于类的类型来传输有用信息。

很多情况下,基于异常的类既能识别故障本因并能更正问题。

其次,异常还带有可能有用的数据(如属性)。

在处理异常时,消息必须有接收者;否则将无法处理产生异常的底层问题。

在上例中,异常“产生者”是读取文本行的 BufferedReader。

在故障出现时,将在 readLine 方法中构建 IOException 对象。

异常“接收者”是代码本身。

EchoInputHandle 应用程序的 try-catch 结构中的 catch 块是异常的接收者,它以字符串形式输出异常,将问题记录下来。

Java 异常类的层次结构 在我们从总体上了解异常后,我们应该了解如何在 Java 应用程序中使用异常,即需要了解 Java 类的层次结构。

在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)。

Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性。

Throwable 有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。

Exception(异常)是应用程序中可能的可预测、可恢复问题。

一般大多数异常表示中度到轻度的问题。

异常一般是在特定环境下产生的,通常出现在代码的特定方法和操作中。

在 EchoInput 类中,当试图调用 readLine 方法时,可能出现 IOException 异常。

Error(错误)表示运行应用程序中较严重问题。

大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。

例如,当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。

Exception 类有一个重要的子类 RuntimeException。

RuntimeException 类及其子类表示“JVM 常用操作”引发的错误。

例如,若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常(NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。

Java 异常的处理 在 Java 应用程序中,对异常的处理有两种方式:处理异常和声明异常。

处理异常:try、catch 和 finally 若要捕获异常,则必须在代码中添加异常处理器块。

这种 Java 结构可能包含 3 个部分, 都有 Java 关键字。

在java中的异常处理中的异常对象是什么

Exception类以及他的子类 的一个实例对象比如常见异常1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。

对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了。

数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话) 2. java.lang.classnotfoundexception 这个异常是很多原本在jb等开发环境中开发的程序员,把jb下的程序包放在wtk下编译经常出现的问题,异常的解释是"指定的类不存在",这里主要考虑一下类的名称和路径是否正确即可,如果是在jb下做的程序包,一般都是默认加上package的,所以转到wtk下后要注意把package的路径加上。

3. java.lang.arithmeticexception 这个异常的解释是"数学运算异常",比如程序中出现了除以零这样的运算就会出这样的异常,对这种异常,大家就要好好检查一下自己程序中涉及到数学运算的地方,公式是不是有不妥了。

4. java.lang.arrayindexoutofboundsexception 这个异常相信很多朋友也经常遇到过,异常的解释是"数组下标越界",现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常。

5. java.lang.illegalargumentexception 这个异常的解释是"方法的参数错误",很多j2me的类库中的方法在一些情况下都会引发这样的错误,比如音量调节方法中的音量参数如果写成负数就会出现这个异常,再比如g.setcolor(int red,int green,int blue)这个方法中的三个值,如果有超过255的也会出现这个异常,因此一旦发现这个异常,我们要做的,就是赶紧去检查一下方法调用中的参数传递是不是出现了错误。

6. java.lang.illegalaccessexception 这个异常的解释是"没有访问权限",当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。

对程序中用了package的情况下要注意这个异常。

其他还有很多异常,我就不一一列举了,我要说明的是,一个合格的程序员,需要对程序中常见的问题有相当的了解和相应的解决办法,否则仅仅停留在写程序而不会改程序的话,会极大影响到自己的开发的。

关于异常的全部说明,在api里都可以查阅。

算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界异常:ArrayIndexOutOfBoundsException 违背安全原则异常:SecturityException 文件已结束异常:EOFException 文件未找到异常:FileNotFoundException 字符串转换为数字异常:NumberFormatException 操作数据库异常:SQLException 输入输出异常:IOException 方法未找到异常:NoSuchMethodException java.lang.AbstractMethodError 抽象方法错误。

当应用试图调用抽象方法时抛出。

java.lang.AssertionError 断言错。

用来指示一个断言失败的情况。

java.lang.ClassCircularityError 类循环依赖错误。

在初始化一个类时,若检测到类之间循环依赖则抛出该异常。

java.lang.ClassFormatError 类格式错误。

当Java虚拟机试图从一个文件中读取Java类,而检测到该文件的内容不符合类的有效格式时抛出。

java.lang.Error 错误。

是所有错误的基类,用于标识严重的程序运行问题。

这些问题通常描述一些不应被应用程序捕获的反常情况。

java.lang.ExceptionInInitializerError 初始化程序错误。

当执行一个类的静态初始化程序的过程中,发生了异常时抛出。

静态初始化程序是指直接包含于类中的static语句段。

java.lang.IllegalAccessError 违法访问错误。

当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。

java.lang.IncompatibleClassChangeError 不兼容的类变化错误。

当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出该异常。

一般在修改了应用中的某些类的声明定义而没有对整个应用重新编译而直接运行的情况下,容易引发该错误。

java.lang.InstantiationError 实例化错误。

当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常. java.lang.InternalError 内部错误。

用于指示Java虚拟机发生了内部错误。

java.lang.LinkageError 链接错误。

该错误及其所有子类指示某个类依赖于另外一些类,在该类编译之后,被依赖的类改变了其类定义而没有重新编译所有的类,进而引发错误的情况。

java.lang...

转载请注明出处大发一分时时彩 » java 异常管理

相关推荐