首页>>后端>>java->Java异常处理学习总结

Java异常处理学习总结

时间:2023-12-01 本站 点击:0

我们在软件开发的过程中,任何语言的开发过程中都离不开异常处理。如果不处理异常,将会导致软件异常中断,崩溃,退出,严重影响用户的使用和体验。如果合理的应用异常处理那将会减少软件出现的错误,可以友好的提示用户,提升用户的体验。

异常是什么

异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。如:用户输入非法数据,做除法运算的时候除数为0,语句少写分号,打开的文件不存在,内存溢出,网络中断等。

异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。

异常类型

Java中所有的异常类是从 java.lang.Exception 类继承的子类。Exception 类是 Throwable 类的子类。除了Exception类外,Throwable还有一个子类Error 。

检查性异常:用户错误或问题引起的异常,这是程序员无法预见的。除了Error 和RuntimeException的其它异常。

运行时异常: 运行时异常是可能被程序员避免的异常。Error 和 RuntimeException 以及他们的子类。

错误: 错误不是异常,而是脱离程序员控制的问题。通常的做法是通知用户并中止程序的执行。

常见异常

输入输出异常:IOException

算术异常类:ArithmeticExecption

空指针异常类:NullPointerException

类型强制转换异常:ClassCastException

文件未找到异常:FileNotFoundException

数组下标越界异常:ArrayIndexOutOfBoundsException

数组负下标异常:NegativeArrayException

文件已结束异常:EOFException

字符串转换为数字异常:NumberFormatException

方法未找到异常:NoSuchMethodException

操作数据库异常:SQLException

常用异常方法

getMessage:获取异常的详细信息。

toString:使用getMessage()的结果返回类的串级名字。

printStackTrace:错误输出流。

异常处理

对检查异常处理的方式:使用try…catch…finally 语句块处理;在函数定义中使用throws 声明。

语法:

try{//try块中放可能发生异常的代码。}catch(ArithmeticExceptionarithexception){//1.每一个catch块用于捕获并处理一个特定的异常,或者异常类型的子类。//2.catch后面括号中定义了异常类型和异常参数。//3.在catch块中可以使用这个块的异常参数来获取异常的相关信息。//4.如果try块中发生的异常在所有catch中都没捕获到,则去执行finally,然后到这个函数的外部caller中去匹配异常处理器。//5.如果try中没有发生异常,则所有的catch块都不执行。}catch(Exceptionexception){//捕获异常}finally{//1.finally块是可选的。//2.无论异常是否发生,finally都会执行。//3.一个try至少要有一个catch块,或者至少要有一个finally块。//4.finally块主要做一些关闭清理工作,如关闭文件,关闭数据库连接等。}

示例

packagecom.exception;publicclasstest{publicstaticvoidmain(String[]args){//TODO自动生成的方法存根compute();}publicstaticvoidcompute(){try{doublenum=10/0;System.out.println(num);}catch(ArithmeticExceptionexp){System.out.println(exp.getMessage().toString());}finally{System.out.println("执行finally块");}}}

关键字 throws/throw

如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws 关键字来声明,throws 关键字放在定义方法的尾部。

也可以使用 throw 关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。

throws 语法:

修饰符返回值类型 方法名(参数) throws 异常类名1, 异常类名2, ... { 代码块 }

packagecom.exception;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.InputStream;publicclasstest{publicstaticvoidmain(String[]args)throwsFileNotFoundException{//TODO自动生成的方法存根readFile();}publicstaticvoidreadFile()throwsFileNotFoundException{InputStreamfile=newFileInputStream("E:/test.txt");}}

throw 语法:

throw new xxxException();

其中 xxxException 必须是 Exception 的派生类。

注意:throw 出的是1个异常对象,所以 new 不能省略。

自定义异常

除了JDK定义好的异常类外,我们可以根据自身业务情况自定义异常处理类。

编写自定义异常类注意点:

1.所有异常都必须是 Throwable 的子类。

2.如果写一个检查性异常类,则需要继承 Exception 类。

3.如果写一个运行时异常类,则需要继承 RuntimeException 类。

语法:修饰符 class 类名 extends Exception {代码块 }

packagecom.exception;/***自定义异常类*登录失败异常信息类*/publicclassLoginFailExceptionextendsRuntimeException{publicLoginFailException(){super();}publicLoginFailException(Stringmessage){super(message);}publicvoidprintStackTrace(){//overwritesuper.printStackTrace();System.out.printf("ThisisaLoginFailExceptionexcetpion\n");}}publicclasstest{publicstaticvoidmain(String[]args){//TODO自动生成的方法存根BooleanisLogin=false;if(!isLogin){//登录失败,抛出异常thrownewLoginFailException("Loginisfail");}}}

作者: zekelove


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/java/5467.html