Exception-----异常可谓是我们程序员,在开发程序的时候,常见的伙伴,有时候,它让你苦不堪言,调试半天也弄不出错在哪里了。今天就这个问题,根据自己的开发经验,总结自己经常遇到的各种异常,仅供参考,不足之处,望见谅。
一.NullPointException空指针异常
1.概述:该异常经常出现,主要原因是没有正确的理解对象这个概念,我们知道,在java中只有对象才可以用来调用方法,那我们如果只是声明一个变量,就不能用来调用方法。此时调用方法就会出现空指针异常。
2.处理办法:我们只需要找到跑出异常的那一句话,然后找到相应的变量,最后,让该变量指向一个对象就可以了。
3.例句:
public class ExceptionTest { public static void main(String[] args) { //NullPointException,空指针异常 String str = null; str.length(); } }
4.抛出异常,
Exception in thread "main" java.lang.NullPointerException
at study.exception.ExceptionTest.main(ExceptionTest.java:5)。
也就是str.length(),这一句话。我们发现,str是一个空的对象。在这里只需要给str一个值就可以了。(String 类比较特殊)
二.NumberFormatException 字符串转换异常
1.概述:应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。
2.处理办法:根据不同的题意,看看这个方法适合什么范围的树枝转换
3.例句:
public class ExceptionTest { public static void main(String[] args) { //NumberFormatException,字符串转换成一种数值类型出现异常 String str = "123abc"; int s = Integer.parseInt(str); } }
4.抛出异常:
Exception in thread "main" java.lang.NumberFormatException: For input string: "123abc"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at study.exception.ExceptionTest.main(ExceptionTest.java:5)
我们知道,parseInt(),转换的范围是str中的字符必须是0-9之间的,修改一下范围即可,我们明白,出现这个异常后,我们要立即查看这个函数适合的范围对不对。
三.ClassCastException 强制转型出现的异常
1.概述:当试图将对象强制转换为不是实例的子类时,抛出该异常。
2.处理办法:查看该类型和转换以后的类型是不是“父子关系”,如果不是,则转型失败。
3.例句:
public class ExceptionTest { public static void main(String[] args) { //ClassCastException,父类向下转型的时候,会出现这个异常 Object obj = new JTextArea(); JButton jb = (JButton)obj; } }
4.异常:
Exception in thread "main" java.lang.ClassCastException: javax.swing.JTextArea cannot be cast to javax.swing.JButton
at study.exception.ExceptionTest.main(ExceptionTest.java:4).向下转型的基础是,两个类型必须是父子类的关系,
才有可能转型,即使如此,有时候,强制转型有时候也会出现错误。
四.IndexOutOfBoundsException 数组越界异常
1.概述:指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。
2.处理办法:这里我们看看抛出的异常的后面,会标明是数组是哪个位置越界了,我们找到这个位置,将数目改变一下即可。
3.例句:
public class ExceptionTest { public static void main(String[] args) { //IndexOutOfBoundsException,数组越界,会出现这个异常 int[] a = new int[10]; a[10] = 10; } }
4。异常:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at study.exception.ExceptionTest.main(ExceptionTest.java:5)
异常中有个10,表明,我们这个数组的第10个位置的时候越界了。我们就知道该如何处理了。
五.NoSuchFieldException 没有这个字段异常
1.概述:类不包含指定名称的字段时产生的信号。
2.处理办法:这个经常用于文件的操作过程当中,我们要打开一个文件,但是该文件不存在,就会抛出这个异常
3.例句:
public class ExceptionTest { public static void main(String[] args) { //NoSuchFieldException,数组越界,会出现这个异常 try { FileOutputStream file = new FileOutputStream("111"); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
4.异常,这里如果是在eclipse开发的话,会给你主动提示,这里是要捕获没有这个文件的异常
六.NoSuchMethodException没有这个方法的异常
1.概述:无法找到某一特定方法时,抛出该异常。这里就不做过多的描述了,很简单,找到看看这个方法是不是存在。
总结:异常是我们在编程不时候,很容易遇到的事情,我们需要灵活的学会捕捉这个异常,处理方法:
1.一般我们用这个方法来进行处理:
try{ 可能出现异常的代码 }catch(Exception e) { 捕获后处理的办法,经常用e.printStackTrace();这个方法来打印异常的详细信息 }finally { 不管是不是捕获到了异常,这里都会执行 }
2.还有另一种方法,直接throws将相应的异常抛出,不过这个在大型的编程项目里,会比较麻烦。
只要是调用了这个方法的方法,我们要不断的抛出异常。
大家一起加油,争取早日交到异常这个好朋友!