java常见异常汇总

时间:2022-05-06
本文章向大家介绍java常见异常汇总,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
程序猿的成长之路,从这开始..........

在6月的投票中,结果昨天已经出来了,大家多数的希望多推送一些java的基础知识。首先来一下热身,debug模式启动起来..........

身为一个程序猿,开发过程中(调研--需求--产品--UI--开发--测试--上线),肯定会出现各种各样的BUG,如:程序异常、环境异常、服务器异常等等,另各位防不胜防,那么出现问题后,首先想到一个万能方法,叫做百度,除了百度,小编也总结了下常见的异常以及处理方式,冰冻三尺非一日之寒,各位不要着急。

一:异常汇总:

1:java.lang.NullPointerException 空指针异常问题

解析:

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

处理:

首先要看的是异常日志(不会看日志的请谷歌),定位到日志所报异常的代码行,启用debug模式,调试程序,看看哪个对象是null,并分析具体原因,如果对象可为空,则在使用之前判断是否为空条件即可

2:ConnectTimeoutException 链接超时异常问题

解析:

  • 出现这个异常一般有几个方面,数据库连接,第三方地址连接,socket连接

处理:

不管是哪种连接超时,首先看一下连接地址的IP或者端口号是否错误(90%的错),如果是网络原因,请设置连接超时时间(一般是socketTime),如下:

URL url = new URL("你服务器的ip地址");

HttpURLConnection conn = url.openConnection();

conn.setConnectTimeout(3000); //超过3秒就连接超时了

conn.setRequestMethod("GET"); //使用的http的get方法

if (conn.getResponseCode() == HttpStatus.SC_OK) {

//要是conn.getResponseCode()的值为200,再进行后面的操作。

}else{

}

3:ArrayIndexOutOfBoundsException 数组越界异常

解析:

数组索引越界异常原因:访问了不存在的索引

处理:

debug模式调试数组,看下数据的下标是否溢出或者不存在而导致的越界(for循环使用较多)

4:ClassCastException 类型转换异常

解析与处理:

ClassCastException是JVM在检测到两个类型间转换不兼容时引发的运行时异常。此类错误通常会终止用户请求。在执行任何子系统的应用程序代码时都有可能发生ClassCastException异常。通过转换,可以指示Java编译器将给定类型的变量作为另一种变量来处理。对基础类型和用户定义类型都可以转换。Java语言规范定义了允许的转换,其中大多数可在编译时进行验证。不过,某些转换还需要运行时验证。如果在此运行时验证过程中检测到不兼容,JVM就会引发ClassCastException异常

5:java.lang.ClassNotFoundException 类未找到异常

解析与处理:

这里主要考虑一下类的名称和路径是否正确即可,通常都是程序试图通过字符串来加载某个类时可能引发 异常,比如:调用Class.forName();或者调用ClassLoad的finaSystemClass();或者LoadClass();

6:java.lang.NumberFormatException 对象转换异常( 字符串转换为数字异常)

解析与处理:

当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常.如现在讲字符型的数据“123456”转换为数值型数据时,是允许的。但是如果字符型数据中包含了非数字型的字符,如123#56,此时转换为数值型时就会出现异常。系统就会捕捉到这个异常,并进行处理.

7:java.lang.NoSuchMethodException 方法不存在异常

解析与处理:

当程序试图通过反射来创建对象,访问(修改或读取)某个方法,但是该方法不存在就会引发异常

8:java.lang.OutOfMemoryException 内存不足错误

解析与处理:

当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。

9:java.lang.InterruptedException 被中止异常

解析与处理:

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

10:java.lang.RuntimeException 运行时异常

解析与处理:

是所有Java虚拟机正常操作期间可以被抛出的异常的父类。

11:javax.servlet.jsp.JspException: Cannot retrieve mapping for action /index.htm(/index.htm是你的action名字)

解析与处理:

action没有再struts-config.xml 中定义,或没有找到匹配的action,例如在JSP文件中使用 <html:form action="index.htm".将表单提交给index.htm处理,如果出现上述异常,请查看struts-config.xml中的定义部分,有时可能是打错了字符或者是某些不符合规则。

其它异常分类:

违背安全原则异常:SecturityException

操作数据库异常:SQLException

输入输出异常:IOException

通信异常:SocketException

二:异常的处理方式:

1)捕获异常:在Java程序运行过程中系统得到一个异常对象是,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种类型异常的方法后,运行时系统把当前异常交给这个方法处理;如果找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。捕获异常是通过try-catch-finally语句实现的。语法为:

try{

...

}catch(ExceptionName1 e){

...

}catch(ExceptionName2 e){

...

}finally{

...

}

2)声明抛弃异常:当Java程序运行时系统得到一个异常对象时,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃异常。声明抛弃异常是在一个方法声明中的throws子句中指明的。如:

public int read() throws IOException{

...

}

其中throws IOException就是声明抛弃异常,throws后可以跟多个异常类型。