JAVA项目常用异常处理汇总
一、异常发生的原因有很多,通常包含以下几大类:
* 用户输入了非法数据。
* 要打开的文件不存在。
* 网络通信时连接中断,或者JVM内存溢出。
这些异常有的是因为用户错误引起,有的是程序错误引起的,还有其它一些是因为物理错误引起的。-
要理解Java异常处理是如何工作的,你需要掌握以下三种类型的异常:
* 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
* 运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
* 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
二、几种常见异常:
1.空指针异常(java.lang.nullpointerexception)
发生该情况一般是字符串变量未初始化,数组未初始化,类对象未初始化等。还有一种情况是当该对象为空时你并没有判断是否为空值,这个错误我在之前的web习题上犯过,因此为了避免这种情况,除了检查是否初始化之外,如有必要则要加上判断是否为null的if语句。
2.指定的类不存在(java.lang.ClassNotFoundException)
出现这个错误的原因之一是缺包,这时只要下载并导入相应的包即可;当我们已经把包导入的时候,又报了这种错误的情况下,就需要开启自己的编辑器去调整设置了;在使用tomcat的时候,先检查lib中是否导入了jar。
3.字符串转换为数字异常(java.lang.NumberFormatException)
这个错误就是字符串中出现非数字型字符时,转换为数字时发生异常;除此之外,如果字符串转换为数字时超过了类型的范围(比如string转int和string转double),也会出现这个错误。解决该问题的方法就是在转换之前先对字符串进行检查。
4.数组下标越界异常(java.lang.IndexOutOfBoundsException)
顾名思义,你想取的数组元素在数组中并没有定义出来,比如定义了一个长度为5的数组a,当你想取a[6]元素时肯定会出错。解决这类问题就是要注意数组的长度,有时候为了减少空间浪费我们会使用动态数组构建方法,这时在对数组进行操作时建议先用length获取其数组长度,从而规避错误。
5.数学运算异常(java.lang.ArithmeticException)
除数为0时会报出该错误,解决方法:避免除数为0。这个错误解读为“出现异常的运算条件”,除了除数为0的情况之外,可能还有其他的异常情况,届时具体情况具体分析。
6.没有访问权限(java.lang.IllegalAccessException)
权限问题,在程序访问某方法时注意一下访问权限即可(public/private),这种错误在使用package时容易发生。
7.方法的参数错误(java.lang.IllegalArgumentException)
在调用带有参数的方法时,请注意传递的参数是否正确。
8.数据类型转换异常(java.lang.ClassCastException)
在进行强制类型转换时容易发生该错误,在进行转换前先对类型进行判别,规避错误。
9.文件未找到异常(java.lang.FileNotFoundException)
当程序试图打开一个不存在的文件进行读写操作时会报出该错误,通常由FileInputStream,FileOutputStream,RandomAccessFile的构造器声明发出,即使文件存在,但因某个原因无法访问,也会报出该错误。
10.数组存储异常(java.lang.ArrayStoreException)
假如在int型数组里存入string类型的变量,就会报错,解决方案是在存入对象时查明类型,或者在存入前先进行类型转换。
11.方法不存在异常(java.lang.NoSuchMethodException)
程序所要调用的方法不存在。解决方法:不调用或者构造其方法。
12.文件已结束异常(java.lang.EOFException)
程序输入过程中遇到文件或流的结尾引发该异常,此异常用于检查是否达到文件或流结尾。
13.实例化异常(java.lang.InstantiationException)
类创建新对象时无法通过构造器进行实例化引发的异常。解决方案:构造方法。
14.被中止异常(java.lang.InterruptedException)
通过其他线程的Thread的interrupt方法中止另一个线程时报出的错误。解决方法:一,不做处理,直接抛出;二,捕获异常,再次调用interrupt方法,将中断状态重新设置为true。
15.不支持克隆异常(java.lang.CloneNotSupportedException)
如果没有实现Cloneable接口便调用了clone方法,报出该错误;若类不支持Cloneable接口,调用时也会出现该错误。解决方法:实现Cloneable接口。
16.输入输出异常(IOException)
该异常为Exception的一个分支,通常发生在文件的数据读写上。
17.错误(java.lang.Error)
所有错误的基类,用于标识严重的程序运行问题。通常原因是访问外部资源时出现一系列问题,解决方案也需要围绕访问外部资源这一重点展开。
三、捕获异常:
* 使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方
* try/catch代码块中的代码称为保护代码,使用 try/catch 的语法如下:
try
{
// 程序代码
}catch(ExceptionName e1)
{
//Catch 块
}
* Catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。
* 如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。
四、通用异常
在Java中定义了两种类型的异常和错误。
* Jvm异常:由 JVM 抛出的异常或错误。例如:NullPointerException 类,ArrayIndexOutOfBoundsException 类,ClassCastException 类。
* 程序级异常:由程序或者API程序抛出的异常。例如 IllegalArgumentException 类,IllegalStateException 类。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?