整体结构:
java.lang.Throwable
java.lang.Error
java.lang.Exception
java.lang.RuntimeException
编译时异常为受检异常(checked)
1.异常:程序在执行过程中发生的不正常情况,程序员可以捕获处理
错误:不期望被用户捕获的异常,如计算机硬件的损坏,内存溢出。
2.编译时异常:.java源文件在执行.javac命令时,产生的异常
运行时异常:.class字节码文件在执行.java命令时,产生的异常
Java要求必须处理编译时异常,但是并不要求一定处理未被捕获的运行时异常。
3.异常的处理:通过面向对象的方式来进行异常的处理,把各种不同的异常进行分类,并提供了良好的接口。
在Java中,每个异常都是一个对象,它是Throwable类或其子类的实例。
可以通过try...catch()...的方式对异常进行处理,亦可以通过throws将异常对象抛出,抛给其调用者,由其调用者进行处理。
可以通过throw关键字主动的抛出一个异常。
4.throw:使用在方法内部,主动的抛出一个异常对象
throws:使用在方法的声明处,是异常处理的一种方式,将异常抛给其调用者,由调用者进行处理。
5.异常处理完成后,会在下一个垃圾回收过程中被回收掉。
6.注意finally语句块执行的时机,特别是当try和catch块中有return语句的时候。
7.自定义异常:
class MyException extends Exception{ private static final long serialVersionUID = 1650608766435423666L; public MyException(){ } public MyException(String message){ super(message); } }8.几种常见的编译时异常:
FileNotFoundException: 发生在:将一个文件读取到流中
ClassNotFoundException: 反序列化时,有可能找不到类
IOException:发生在流的读取和写入时
SQLException:暂时还没有遇到
ParseException:通过制定的日期格式SimpleDateFormat对象对一个字符串进行转换时。
9.几种常见的运行时异常:
NullPointException:空对象的引用调用方法时
String str = "132"; str = null; System.out.println(str.toString());ArrayIndexOutOfBoundsException:数组下标越界
int[] arr = new int[10]; System.out.println(arr[10]);ClassCastException:向下转型时
Object obj = new Object(); String string = (String) obj; System.out.println(string);ArithmeticException:算术异常,如除数为0
System.out.println(13/0);IllegalArgumentException:不合法的参数
NoSuchElementException:直接调用iterator.next()会抛出此异常 InputMismatchException:Scanner/sacnner.nextInt()键入时输入非数字字符会抛出
InvalidClassException:反序列化异常,没有指定序列号,修改了类文件
可能有所欠缺,随时补充。
明天抽空补齐集合、泛型、IO部分的总结,今天太晚了。加油!
原文地址:http://blog.csdn.net/sloverpeng/article/details/44009569