Java项目中常见的异常处理

最近建民老师给我讲了有关异常处理的知识,今天对java项目中常见的异常处理进行总结。

一、空指针异常——NullPointerException

所谓的空指针异常,就是一个指针是空指针,你还要去操作它,既然它指向的是空对象,它就不能使用这个对象的方法。比如s假如为null,你还要用s的方法,比如s.equals( String x);那么就会产生空指针异常

举例说明

String mm = null;
会抛出NullPointerException异常的有()
if( (mm!=null) & (mm.length()>0) )
if( (mm!=null) & & (mm.length()>0) )
if( (mm==null) | (mm.length()>0) )
if( (mm==null) || (mm.length()==0) )

上面的代码说明:mm已经是个null,没有开辟空间,如果调用mm.length()必然会报错

当应用程序试图在需要对象的地方使用 null 时,抛出该异常。这种情况包括:
  • 调用 null 对象的实例方法。
  • 访问或修改 null 对象的字段。
  • 将 null 作为一个数组,获得其长度。
  • 将 null 作为一个数组,访问或修改其时间片。
  • 将 null 作为 Throwable 值抛出。
应用程序应该抛出该类的实例,指示其他对 null 对象的非法使用。
二、指定的类不存在——java.lang.ClassNotFoundException
出现这个错误的原因之一是缺包,这时只要下载并导入相应的包即可;
当我们已经把包导入的时候,又报了这种错误的情况下,就需要开启自己的编辑器去调整设置了;
在使用tomcat的时候,先检查lib中是否导入了jar。
三、字符串转换为数字异常——java.lang.NumberFormatException
当试图把一个String类型的转化为指定的数字类型,而该字符串不满足数字类型要求的格式时出现此类异常
这个错误就是字符串中出现非数字型字符时,转换为数字时发生异常;
除此之外,如果字符串转换为数字时超过了类型的范围(比如string转int和string转double),也会出现这个错误。
解决该问题的方法就是在转换之前先对字符串进行检查。
四、数组下标越界异常——java.lang.IndexOutOfBoundsException
该异常顾名思义,就是指你想要的数组元素没有在数组中定义出来,比如说你定义了一个数组arr[5],当你申请调用arr[6],此时就会出现报错。
解决这类问题就是要注意数组的长度,有时候为了减少空间浪费我们会使用动态数组构建方法,这时在对数组进行操作时建议先用length获取其数组长度,从而规避错误。
五、数学运算异常——java.lang.ArithmeticException
该类异常是出现了不符合运算规则的语句,比如说除以0
import javax.swing.*;

class AboutException {
   public static void main(String[] a) 
   {
      int i=1, j=0, k;
      k=i/j;


    try
    {
        
        k = i/j;    // Causes division-by-zero exception
        //throw new Exception("Hello.Exception!");
    }
    
    catch ( ArithmeticException e)
    {
        System.out.println("被0除.  "+ e.getMessage());
    }
    
    catch (Exception e)
    {
        if (e instanceof ArithmeticException)
            System.out.println("被0除");
        else
        {  
            System.out.println(e.getMessage());
            
        }
    }

    
    finally
     {
             JOptionPane.showConfirmDialog(null,"OK");
     }
        
  }
}

对于该类语句的解决方法只能是具体问题具体分析。

六、没有访问权限——java.lang.IllegalAccessException

这个异常的解释是 “没有访问权限 ”,当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。

对程序中用了Package的情况下要注意这个异常。

七、方法的参数错误——java.lang.IllegalArgumentException

该类异常一般是调用参数时发生了错误,如果出现此类错误可以去找一下参数传递是否发生错误

例如g.setColor(int red,int green,int blue)这个方法中的三个值,如果有超过255的会出现这个异常,如果程

序中存在这个异常,就要去检查一下方法调用中的参数传递或参数值是不是有错

八、数据类型转换异常——java.lang.ClassCastException

当试图将对某个对象强制执行向下转换,但该对象又不可转换或又不可转换为其子类的实例时将出现该异常,在进行转换前先对类型进行判别,规避错误。

九、文件未找到异常——java.lang.FileNotFoundException

当程序试图打开一个不存在的文件进行读写操作时会报出该错误,通常由FileInputStream,FileOutputStream,RandomAccessFile的构造器声明发出,即使文件存在,但因某个原因无法访问,也会报出该错误。

该类异常主要指找不到文件。

十、数组存储异常——java.lang.ArrayStoreException

该类异常为定义数组类型与数组存入的数据类型不匹配,比如在int 数组里面存入String类型的数据就会出现此类异常,解决这种异常的方法就是在使用数组存储数据之前先查看数组的类型。

十一、方法不存在异常——java.lang.NoSuchMethodException

此类异常为调用方法时发现方法不存在,当出现这种异常时,可以之间构建一个方法就行。

十二、实例化异常——java.lang.InstantiationException

当试图通过Class的add()方法创建某个类的实例,但程序无法通过该构造器来创建该对象时引发。

Class对象表示一个抽象类,接口,数组类,基本类型 。该Class表示的类没有对应的构造器。

十三、文件已结束异常——java.lang.EOFException

程序输入过程中遇到文件或流的结尾引发该异常,此异常用于检查是否达到文件或流结尾。

十四、被终止异常——java.lang.InterruptedException

当某个线程处于长时间的等待、休眠或其他暂停状态,而此时其他的线程通过Thread的interrupt方法终止该线程时抛出该异常。

解决方法:

  • 不做处理,直接抛出
  • 捕获异常,再次调用interrupt方法,将中断状态重新设置为true。

十五、不支持克隆异常——java.lang.CloneNotSupportedException

如果没有实现Cloneable接口便调用了clone方法,报出该错误;若类不支持Cloneable接口,调用时也会出现该错误。

解决方法:实现Cloneable接口。

十六、输入输出异常——IOException

该异常为输入输出流时出现的问题

十七、错误——java.lang.Error

错误,是所有错误的基类,用于标识严重的程序运行问题,这些问题统常描述一些不应该被应用程序捕获的反常情况

原因:对系统所访问外部资源,未执行关闭操作,导致外部资源的大量浪费,最终导致系统无法正常运行;对系统所访问的外部资源关闭的次数太多,外部系统无法正常处理;系统访问的外部资源出现异常情况。

解决方法:访问外部资源之前,首先检查该资源是否可以进行正常的连接或操作;访问外部资源时,如果进行了连接,一定要关闭操作,并且仅进行一次关闭操作;尽量在同一操作中共享外部资源,以减少该操作对资源的浪费,提高程序的执行效率

 
 
posted @ 2022-10-17 21:43  伽澄  阅读(750)  评论(0)    收藏  举报