前言:
我们在软件开发的过程中,任何语言的开发过程中都离不开异常处理。如果不处理异常,将会导致软件异常中断,崩溃,退出,严重影响用户的使用和体验。如果合理的应用异常处理那将会减少软件出现的错误,可以友好的提示用户,提升用户的体验。
一、异常是什么
异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。如:用户输入非法数据,做除法运算的时候除数为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()
的结果返回类的串级名字。
printSta
ckTrace:错误输出流。
五、异常处理
对检查异常处理的方式:使用 try…catch…finally
语句块处理;在函数定义中使用 throws 声明。
语法:
try{ // try 块中放可能发生异常的代码。 }catch(ArithmeticException arithexception){ // 1.每一个 catch 块用于捕获并处理一个特定的异常,或者异常类型的子类。 // 2.catch 后面括号中定义了异常类型和异常参数。 // 3.在 catch 块中可以使用这个块的异常参数来获取异常的相关信息。 // 4.如果 try 块中发生的异常在所有catch中都没捕获到,则去执行finally,然后到这个函数的外部 caller 中去匹配异常处理器。 // 5.如果 try 中没有发生异常,则所有的catch块都不执行。 }catch(Exception exception){ // 捕获异常 }finally{ // 1.finally 块是可选的。 // 2.无论异常是否发生,finally 都会执行。 // 3.一个 try 至少要有一个 catch 块,或者至少要有一个 finally 块。 // 4.finally 块主要做一些关闭清理工作,如关闭文件,关闭数据库连接等。 }
示例:
package com.exception; public class test { public static void main(String[] args) { // TODO 自动生成的方法存根 compute(); } public static void compute() { try { double num = 10 / 0; System.out.println(num); }catch(ArithmeticException exp){ System.out.println(exp.getMessage().toString()); }finally { System.out.println("执行finally块"); } } }
六、关键字 throws/throw
如果一个方法没有捕获到一个检查性异常,那么该方法必须使用 throws
关键字来声明,throws
关键字放在定义方法的尾部。
也可以使用 throw
关键字抛出一个异常,无论它是新实例化的还是刚捕获到的。
throws 语法:
修饰符 返回值类型 方法名(参数) throws 异常类名1, 异常类名2, ... { 代码块 }
package com.exception; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; public class test { public static void main(String[] args) throws FileNotFoundException { // TODO 自动生成的方法存根 readFile(); } public static void readFile() throws FileNotFoundException { InputStream file = new FileInputStream("E:/test.txt"); } }
throw 语法:
throw new xxxException();
其中 xxxException
必须是 Exception
的派生类。
注意:throw 出的是1个异常对象,所以 new 不能省略。
七、自定义异常
除了JDK定义好的异常类外,我们可以根据自身业务情况自定义异常处理类。
编写自定义异常类注意点:
- 1.所有异常都必须是
Throwable
的子类。 - 2.如果写一个检查性异常类,则需要继承
Exception
类。 - 3.如果写一个运行时异常类,则需要继承
RuntimeException
类。
语法:修饰符 class 类名 extends Exception { 代码块 }
package com.exception; /** * 自定义异常类 * 登录失败异常信息类 */ public class LoginFailException extends RuntimeException { public LoginFailException() { super(); } public LoginFailException(String message) { super(message); } public void printStackTrace(){ //overwrite super.printStackTrace(); System.out.printf("This is a LoginFailException excetpion\n"); } } public class test { public static void main(String[] args){ // TODO 自动生成的方法存根 Boolean isLogin = false; if(!isLogin) { // 登录失败,抛出异常 throw new LoginFailException("Login is fail"); } } }
到此这篇关于Java异常处理方法汇总的文章就介绍到这了,更多相关Java异常处理方法 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!