java异常的处理
A. 在java中哪些异常需要处理
可以选择三种方法来进行异常处理1对代码块用try..catch进行异常捕获处理;
2在 该代码的方法体外用throws进行抛出声明,告知此方法的调用者这段代码可能会出现这些异常,你需要谨慎处理。此时有两种情况:如果声明抛出的异常是非运行时异常,此方法的调用者必须显示地用try..catch块进行捕获或者继续向上层抛出异常。如果声明抛出的异常是运行时异常,此方法的调用者可以选择地进行异常捕获处理。
3在代码块用throw手动抛出一个异常对象,此时也有两种情况,跟2)中的类似:如果抛出的异常对象是非运行时异常,此方法的调用者必须显示地用try..catch块进行捕获或者继续向上层抛出异常。如果抛出的异常对象是运行时异常,此方法的调用者可以选择地进行异常捕获处理。(如果最终将异常抛给main方法,则相当于交给jvm自动处理,此时jvm会简单地打印异常信息)
常处理和设计的建议
只在必要使用异常的地方才使用异常,不要用异常去控制程序的流程
切忌使用空catch块
检查异常和非检查异常的选择
注意catch块的顺序
不要将提供给用户看的信息放在异常信息里
避免多次在日志信息中记录同一个异常
异常处理尽量放在高层进行
在finally中释放资源
B. Java是怎样处理异常问题的
第一:try{}catch{}捕捉异常处理。
try语句里面实现的是主事件流,而catch里面实现的是异常流。
自定义大量的Exception类,只是代表非主事件流的发生的,用来进行那些分支流程的流程控制的。
在异常捕获后返回一个变量,该变量参与正常的业务流程。
第二:业务层处理业务时抛出异常,下次处理。(会影响性能)
返回变量是一种做法;抛出异常是一种做法。
而不是两者都用,返回变量是面向过程的编程方法;抛出异常更OO。
C. 详细描述java是如何处理异常的
当出现程序无法控制的外部环境问题(用户提供的文件不存在,文件内容损坏,网络不可用...)时,JAVA就会用异常对象来描述。
JAVA中用2种方法处理异常:
1.在发生异常的地方直接处理;
2.将异常抛给调用者,让调用者处理。
JAVA异常可分为3种:
(1)检查性异常:java.lang.Exception
(2)运行期异常:java.lang.RuntimeException
(3)错误:java.lang.Error
顶层是java.lang.Throwable类,检查性异常,运行期异常,错误都是这个类的子孙类。
java.lang.Exception和java.lang.Error继承自java.lang.Throwable,而java.lang.RuntimeException继承自java.lang.Exception.
检查性异常------程序正确,但因为外在的环境条件不满足引发。例如:用户错误及I/O问题----程序试图打开一个并不存在的远程Socket端口。这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误)。对商用软件系统,程序开发者必须考虑并处理这个问题。JAVA编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。
运行期异常------这意味着程序存在bug,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免,JAVA编译器强制要求处理这类异常。
错误------一般很少见,也很难通过程序解决。它可能源于程序的bug,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而有运行环境处理。
如何处理异常?
1.try...catch
程序运行产生异常时,将从异常发生点中断程序并向外抛出异常信息。
Java代码
int x = (int)(Math.random()*5);
int y = (int)(Math.random()*10);
int[] z =new int[5];
try
{
System.out.println("y/x="+(y/x));
System.out.println("y="+y+"z[y]="+z[y]);
}
catch (ArithmeticException exc1)
{
System.out.println("算术运算异常:"+exc1.getMessage());
}
catch ( exc2)
{
System.out.println("数据越界异常:"+exc2.getMessage());
}
说明:ArithmeticException和都属运行期异常:java.lang.RuntimeException,如果不用try...catch捕获,程序也是可通过编译的,但如果属于检查性异常:java.lang.Exception,必须而且一定要用try...catch...对其进行处理。
2.finally
如果把finally块置try...catch...语句后,finally块一般都会得到执行,它相当于一个万能的保险,即使前面的try块发生异常,而又没有对应异常的catch块,finally块将马上执行。
以下情形,finally块将不会被执行:
(1)finally块中发生了异常;
(2)程序所在线程死亡;
(3)在前面的代码中用了System.exit();
(4)关闭CPU。
3.多个异常的处理规则:
定义多个catch可精确地定位异常。如果为子类的异常定义了特殊的catch块,而父类的异常则放在另外一个catch块中,此时,必须满足以下规则:子类异常的处理块必须在父类异常处理块的前面,否则会发生编译错误。所以,越特殊的异常越在前面处理,越普遍的异常越在后面处理。这类似于制订防火墙的规则次序:较特殊的规则在前,较普通的规则在后。
自己也可以定义并抛出异常,方法是2步:创建异常,抛出异常(首先实例化一个异常对象,然后用thow抛出)合在一起就是----
thow new IOException("异常说明信息")。将创建异常,抛出异常合在一起的好处是:创建异常时,会包含异常创建处的行信息,异常被捕获时可以通过堆栈迹(stack Trace)的形式报告这些信息。如果在同一行代码创建和抛出异常,对于程序的调试将非常有用。
所以,thow new XXX()已经成为一个标准的异常抛出范式。
在定义一个方法时,方法块中调用的方法可能会抛出异常,可用上面的thow new XXX()处理,如果不处理,那么必须在方法定义时,用thows声明这个方法会抛出的异常。
对异常的处理,有一条行之有效的默认规则:向上抛出-----被调用类在运行过程中对遇到的异常一概不作处理,而是直接向上抛出,一直到最上层的调用类,调用类根据应用系统的需求和特定的异常处理规则进行处理,如向控制台输出异常堆栈信息,打印在日志文件中。用一句形象的话来说,就是谁使用,谁(最上层的调用类)处理。
D. java抛出异常在哪里处理
异常在哪里处理也没法说在哪里处理好,只能是根据实际情况来进行相应的处理。
捕获异常:通常在运行之前java不报错,但是运行后可能会出现某些未知的错误,但是还不想直接抛出到上一级,那么就需要通过”try{}catch“的形式进行异常捕获,之后根据不同的异常情况来进行相应的处理。
传递异常:通常用在多级方法调用上,最终想将异常返回到最上层进行处理的时候,那么就把异常向上抛出,知道调用的方法处,进行异常捕获。
E. 通常Java是如何处理异常的
Java处理异常的方式和C++等语言类似,使用try-catch-finally语句,例子如下:
try{ //产生异常的回语句编写在try语句块中。
int[] num={1,2,3,4};
System.out.println(num[4]);
}catch(Exception e){ //处理具答体异常的代码编写在catch语句块中。
e.printStackTrace();
}finally{ //资源释放代码编写在finally语句块中。
System.out.println(“总是运行!”);
}
更加具体的异常处理方法,你可以参考秒秒学的相关课程。上面列举了异常的用法,和相关的异常类。
F. JAVA语言中,异常处理有哪几种方式
有两中方式:1.捕获异常,自己处理.
2.throw出去,让别人处理.
举个例子:
public class A{
try{
可能放生异常的语句...
}catch(Exception e){
e.getMessage();//自己处理
}
}
public class A throws Exception{
可能放生异常的语句...
}//throw出去,让别人处理
注意这里用的是throws
如果在方法里面则用throw
举例:
public class A{
try{
可能放生异常的语句...
}catch(Exception e){
e.getMessage();//自己处理
throw new Exception ("");
}
}
G. Java中,如何进行异常处理
异常
exception
不是
错误
error
异常又分为运行时异常(runtimeexception)和编译时异常(checkedexception)
checkedexception
是非人为原因的而造成的不可避免的异常,比如
ioexception
和
sqlexception
等。
这些必须要用
thr{}catch
来捕获或者
throws。必须抛出,因为在编译的时候jvm会检查,如果不抛出,则编译不能通过。
简单举例来说,我用了
java.io.*
用了java
文件流的输入输出,就会产生不可预见的异常,假如,文件不存在,假如,流,读写失败等,这些不可预见的问题,如果不捕获并且忽略这些异常或者对异常进行相应的处理,也许会造成整个程序的崩溃,甚至有可能造成jvm的崩溃。所以,在编译时,jvm就会检查这些可能会造成异常的代码,是否对异常进行了捕获和处理。
而运行时异常,是程序员自己的错误而造成的,比如下标越界,这些问题在写代码的时候程序员自己就可以处理,是可预见的异常。编译时
jvm不会检查
H. Java中的异常处理是什么意思
Java中的异常处理机制是由try
/catch/finally语句控制的,一个try语句后面可以跟多个catch语句对try区块中抛出内的异常进容行处理。finally语句多catch中没有进行处理的异常进行扫尾工作。
具体的语句的写法格式如下
try{
expr
}
catch(exception
e){
expr
}
finally{
expr
}
expr代表处理语句。
在try语句中写入我们准备要尝试运行的代码,在运行中try语句只负责抛出运行代码时发生的异常。
在catch语句中我们写入的是对try语句运行中抛出异常的处理代码,catch语句需要传入异常类型作为参数,一旦catch捕获对应类型的异常就执行catch中的代码。在一个try语句后面可以跟多个catch语句,对try语句中抛出的异常进行针对性的处理。但是要注意try语句中产生的是异常还是错误。
finally语句主要进行的是扫尾工作,无论try语句中是否抛出异常,都执行finally中的代码。例如在try语句中抛出了一个异常,被一个catch语句捕获,首先执行catch中的代码,执行完毕后转入finally语句中执行其中代码。
I. JAVA异常处理的意义何在为什么要做异常处理,作用是什么
代替日渐衰落的error code方法的新法,提供error code所未能具体的优势。
异常处理分离了接收和处理错误代码。这个功能理清了编程者的思绪,也帮助代码增强了可读性,方便了维护者的阅读和理解。
异常处理(又称为错误处理)功能提供了处理程序运行时出现的任何意外或异常情况的方法。异常处理使用try、catch 和 finally关键字来尝试可能未成功的操作,处理失败,以及在事后清理资源。
(9)java异常的处理扩展阅读
程序设计的要求之一就是程序的健壮性。希望程序在运行时能够不出或者少出问题。但是,在程序的实际运行时,总会有一些因素导致程序不能正常运行。
在设计算法时,往往对算法的正常逻辑处理流程设计得比较准确,对异常情况的处理反而不容易设计全面,导致程序在出现异常情况时崩溃。如果软件出现这种情况会给用户带来极不友好的体验。
例如:试设计一个程序,运行后提示用户输入两个整数。两个整数用空格隔开,用户输入后,程序显示出两个数字的和。这个程序正常的逻辑处理非常简单,但普用户输入的两个字符串不是整数,程序应该给出提示,否则程序有可能会崩溃。因此针对异常情况的处理也是非常重要的,当然有时这种处理会比较复杂。
J. java异常处理的机制有哪几种
有两中方抄式:1.捕获异常袭,自己处理.
2.throw出去,让别人处理.
举个例子:
public class A{
try{
可能发生异常的语句...
}catch(Exception e){
e.getMessage();//自己处理
}
}
public class A throws Exception{
可能发生异常的语句...
}//throw出去,让别人处理
注意这里用的是throws
如果在方法里面则用throw
举例:
public class A{
try{
可能放生异常的语句...
}catch(Exception e){
e.getMessage();//自己处理
throw new Exception ("");
}
}