java 异常汇总

转载:https://mp.weixin.qq.com/s/wvnBkdmK7Fb250d4qSCGFA

一:异常汇总:

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后可以跟多个异常类型。

猜你喜欢

转载自blog.csdn.net/qq_39657909/article/details/80995931