标签:
一、从根部异常可以分为Erro和Exception两大类他们都继承自Thorwable:
Error一般指的是一些无法挽回的错误,当这些错误发生后,程序就会直接死掉,无法继续运行。
Exception : 一般分为:运行时异常和非运行时异常,
运行时异常:指的是程序已经通过编译,在程序运行时产生了异常,这个是由于程序自己编写的代码不够健壮,考虑不够完善导致的。如果程序员足够认真这些是完全可以避免的。
非运行时异常:是程序代码语法错误 ,在程序编译时就不能通过而抛出的异常。
public class Test { public static void main(String[] args) { String filename = "d:\\test.txt"; try { FileReader reader = new FileReader(filename); Scanner in = new Scanner(reader); String input = in.next(); int value = Integer.parseInt(input); System.out.println(value); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { System.out.println("this is finally block!"); } } }
如果d盘根目录下没有test.txt的话,该程序抛出异常:
this is finally block!
java.io.FileNotFoundException: d:\test.txt (系统找不到指定的文件。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.io.FileInputStream.<init>(FileInputStream.java:66)
at java.io.FileReader.<init>(FileReader.java:41)
at Test.main(Test.java:10)
可以看出上面的异常抛出时没有指名异常的具体发生出处。
我们将test.txt中的2322改成abc,看看结果:
this is finally block!
Exception in thread "main" java.lang.NumberFormatException: For input string: "abc"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:447)
at java.lang.Integer.parseInt(Integer.java:497)
at Test.main(Test.java:13)
这时我们会发现,该异常指明了异常的内容和发生的出处,那时因为该异常我们没有对它进行声明,而FileNotFoundException我们对它进行了声明所以,在此异常抛出时没有指名它的出处。
总结: 异常的一般处理,如果我们声明一个异常秉承并处理它,则在该异常发生时会进行相应的处理。如果对于一个异常我们没有对它进行声明处理,那么在异常发生时,回去调用相关的方法,如果该方法也没有声明处理,则它会一直回溯直至main函数。
二、常见的异常:
NullPointerException 空指针、ClassNotFoundException 找不到类 、ClassCastException 类型转换、ArithmeticException 算数条件
ArrayIndexOutOfBoundsException 数组越界
三、自定义异常:
使用自定义异常的原因:一、java不可能封装所有我们在程序可能用到的异常。二、java封装的异常提示信息部明了。基于这两点我们可以进行自定义异常的创建,来改善异常的处理。
pbulic class MyException extends RuntimeException{ public MyException(){ } pubic MyException(String message){ super(message); } }
四、try/catch/finally的使用情况:
在进行异常处理时,尽量不要将catch 和 finally放在一起使用。
public class FinallyTest{ public static main(String[] agrs){ boolean file = open(); } public static boolean open(){ string filename = "d://test.txt"; try{ try{ FileReader file = new FileReader(filename); Scanner sn = new Scanner(file); String str = sn.next(); int num = Integer.paseInt(str); System.out.println(num); }finally{ //关闭一些资源 } }catch(exception e){ Systme.out.println("文件内容输出异常"); } } }
尽量将catch和finally分开处理,catch进行异常的捕捉,finally进行一些流的关闭。。。
标签:
原文地址:http://www.cnblogs.com/fanshao/p/4409936.html