java exception异常怎么解决

作者&投稿:狂贩 (若有异议请与网页底部的电邮联系)
出现NotSerializableException异常怎么解决~

应该是没有序列化。序列化可以将内存中的类写入文件或数据库中。比如user类。序列化代码:public class UserInfo implements Serializable { }

  hibernate能自动处理RuntimeException,如果是其他的,则要自己进行处理的

在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。
抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。
捕获异常:在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适 的异常处理器。运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适 的异常处理器,则运行时系统终止。同时,意味着Java程序的终止。
对于运行时异常、错误或可查异常,Java技术所要求的异常处理方式有所不同。
由于运行时异常的不可查性,为了更合理、更容易地实现应用程序,Java规定,运行时异常将由Java运行时系统自动抛出,允许应用程序忽略运行时异常。
对于方法运行中可能出现的Error,当运行方法不欲捕捉时,Java允许该方法不做任何抛出声明。因为,大多数Error异常属于永远不能被允许发生的状况,也属于合理的应用程序不该捕捉的异常。
对于所有的可查异常,Java规定:一个方法必须捕捉,或者声明抛出方法之外。也就是说,当一个方法选择不捕捉可查异常时,它必须声明将抛出异常。
能够捕捉异常的方法,需要提供相符类型的异常处理器。所捕捉的异常,可能是由于自身语句所引发并抛出的异常,也可能是由某个调用的方法或者Java运行时 系统等抛出的异常。也就是说,一个方法所能捕捉的异常,一定是Java代码在某处所抛出的异常。简单地说,异常总是先被抛出,后被捕捉的。
任何Java代码都可以抛出异常,如:自己编写的代码、来自Java开发环境包中代码,或者Java运行时系统。无论是谁,都可以通过Java的throw语句抛出异常。
从方法中抛出的任何异常都必须使用throws子句。
捕捉异常通过try-catch语句或者try-catch-finally语句实现。
总体来说,Java规定:对于可查异常必须捕捉、或者声明抛出。允许忽略不可查的RuntimeException和Error。
4.1 捕获异常:try、catch 和 finally

1.try-catch语句
在Java中,异常通过try-catch语句捕获。其一般语法形式为:

try {
// 可能会发生异常的程序代码
} catch (Type1 id1){
// 捕获并处置try抛出的异常类型Type1
}
catch (Type2 id2){
//捕获并处置try抛出的异常类型Type2
}

关键词try后的一对大括号将一块可能发生异常的代码包起来,称为监控区域。Java方法在运行过程中出现异常,则创建异常对象。将异常抛出监控区域之 外,由Java运行时系统试图寻找匹配的catch子句以捕获异常。若有匹配的catch子句,则运行其异常处理代码,try-catch语句结束。
匹配的原则是:如果抛出的异常对象属于catch子句的异常类,或者属于该异常类的子类,则认为生成的异常对象与catch块捕获的异常类型相匹配。
例1 捕捉throw语句抛出的“除数为0”异常。

public class TestException {
public static void main(String[] args) {
int a = 6;
int b = 0;
try { // try监控区域

if (b == 0) throw new ArithmeticException(); // 通过throw语句抛出异常
System.out.println("a/b的值是:" + a / b);
}
catch (ArithmeticException e) { // catch捕捉异常
System.out.println("程序出现异常,变量b不能为0。");
}
System.out.println("程序正常结束。");
}
}

运行结果:程序出现异常,变量b不能为0。
程序正常结束。
例1 在try监控区域通过if语句进行判断,当“除数为0”的错误条件成立时引发ArithmeticException异常,创建 ArithmeticException异常对象,并由throw语句将异常抛给Java运行时系统,由系统寻找匹配的异常处理器catch并运行相应异 常处理代码,打印输出“程序出现异常,变量b不能为0。”try-catch语句结束,继续程序流程。
事实上,“除数为0”等ArithmeticException,是RuntimException的子类。而运行时异常将由运行时系统自动抛出,不需要使用throw语句。
例2 捕捉运行时系统自动抛出“除数为0”引发的ArithmeticException异常。

public static void main(String[] args) {
int a = 6;
int b = 0;
try {
System.out.println("a/b的值是:" + a / b);
} catch (ArithmeticException e) {
System.out.println("程序出现异常,变量b不能为0。");
}
System.out.println("程序正常结束。");
}
}
运行结果:程序出现异常,变量b不能为0。
程序正常结束。
例2 中的语句:
System.out.println("a/b的值是:" + a/b);
在运行中出现“除数为0”错误,引发ArithmeticException异常。运行时系统创建异常对象并抛出监控区域,转而匹配合适的异常处理器catch,并执行相应的异常处理代码。
由于检查运行时异常的代价远大于捕捉异常所带来的益处,运行时异常不可查。Java编译器允许忽略运行时异常,一个方法可以既不捕捉,也不声明抛出运行时异常。
例3 不捕捉、也不声明抛出运行时异常。

public class TestException {
public static void main(String[] args) {
int a, b;
a = 6;
b = 0; // 除数b 的值为0
System.out.println(a / b);
}
}

运行结果:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Test.TestException.main(TestException.java:8)

例4 程序可能存在除数为0异常和数组下标越界异常。

public class TestException {
public static void main(String[] args) {
int[] intArray = new int[3];
try {
for (int i = 0; i <= intArray.length; i++) {
intArray[i] = i;
System.out.println("intArray[" + i + "] = " + intArray[i]);
System.out.println("intArray[" + i + "]模 " + (i - 2) + "的值: "
+ intArray[i] % (i - 2));
}
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("intArray数组下标越界异常。");
} catch (ArithmeticException e) {
System.out.println("除数为0异常。");
}
System.out.println("程序正常结束。");
}
}

运行结果:
intArray[0] = 0
intArray[0]模 -2的值: 0
intArray[1] = 1
intArray[1]模 -1的值: 0
intArray[2] = 2
除数为0异常。
程序正常结束。


武宁县19232838510: java exception异常怎么解决 -
弘军全威: 在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常.抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息.运行时系统负责寻找处置异常...

武宁县19232838510: java中5种常见的异常(Exception)是哪些? -
弘军全威: Java.lang.NullPointerException 这个异常大家肯定都经常碰到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或...

武宁县19232838510: java.io.EOFException这是个什么异常应该怎么解决 -
弘军全威: 1,内部类BlockDataInputStream.的方法peekByte抛出的异常,意思就是到达了文件的末尾,程序却没有正常结束读取文件内容,你可以单步调试一下看看到达文件末尾之后程序为什么没有停下来 2,从异常来看,你是不是使用了一个内部类BlockDataInputStream?错误就在BlockDataInputStream.peekByte()方法. java.io.EOFException:当输入过程中意外到达文件或流的末尾时,抛出此异常. 此异常主要被数据输入流用来表明到达流的末尾.

武宁县19232838510: java中的java.lang.RuntimeException异常怎么解决? -
弘军全威: 看异常堆栈,找到抛出异常的代码

武宁县19232838510: java异常问题: 1,对RuntimeException运行时异常的处理方式有哪些,都是怎么处 -
弘军全威: 对整个问题不是很理解,异常的处理方式通常有两种,捕获和不捕获,方法产生异常时如果用try……catch……捕获了,你可以按照你想要的逻辑进行处理(打日志,判定失败等),这个看个人了,如果不捕获,那个包含这个异常的方法声明出必须抛出,有上层方法处理,如果到main方法也是抛出,经交给java虚拟机处理.方法内部如果捕获了且抛出的,方法要加声明;如果不抛出,方法上不加声明,但是如果不捕获,是一定要加声明的.

武宁县19232838510: Java是怎样处理异常问题的?
弘军全威: 在Java中,异常定义了程序运行中可能遇到的轻微错误或异常情况.当发生异常时,程序员可以通过自己编写有针对性的代码来对它进行处理,以让程序继续运行下去.为了让写出来的代码比较强壮(robust),java语言要求除Error和...

武宁县19232838510: 我的java程序出现EOFException异常,谁可以帮我解决一下 -
弘军全威: 当输入流信息读取完毕后,如果你再读取,就会出现这个异常.检查下你的程序是不是读取完了还在读取.

武宁县19232838510: java.io.EOFException异常怎么解决 -
弘军全威: 在try里面最后补冲两行 sound.close(); s.close(); 以后用完了把流关闭掉 EOF---End of File 文件结束异常

武宁县19232838510: java在出现NullPointerException时怎么处理这个异常 -
弘军全威: NullPointerException是空指针异常.是Java运行时异常,必须要程序员来处理的.简单来说就是你的程序有bug.出现这个错误的根本原因就是你在程序中调用了一个空对象的属性或者方法.原因一般有两个:1.对象没有实例化,就是没有new xxx();2.对象实例化过了,但是在程序的某个地方又被赋予了null值.打个断点调试一下就知道了.

武宁县19232838510: Java异常以及怎样处理异常?
弘军全威: Java 异常以及异常处理 可将 Java 异常看作是一类消息,它传送一些系统问题、故障及未按规定执行的动作的相关信息.异常包含信息,以将信息从应用程序的一部分发送...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网