全部博文(471)
分类: Java
2012-07-22 10:23:17
java程序违反java的语义规则时,java虚拟机就会将发生的错误表示为一个异常
违反语义规则包括两种情况:
一种是java类库内置的语义检查 比如 数组越界 引发IndexOutOfBound***ception;访问NULL的对象时会引发NullPointerException
另外一种情况就是JAVA允许程序员扩展这种语法检查,程序员可以自定义异常,并自由选择在何时用throw关键字引发异常,所有的异常都是java.lang.Throwable的子类
Error 和 Exception:
java中的Error和Exception都是来自Throwable这个class的,是他的subclass
Error:是系统中的错误,程序员不能改变处理的这是在程序编译的时候出现的错误,只有通过修改程序才能修正Error
Exception:是在程序运行的时候捕捉到的错误,他是可以处理的异常
Exception:它也分两种:RuntimeException(是经常出现的错误可以不catch)和其他Exception(是必须要catch的,这样程序才能继续,像某个方法里面有throw IoException).
一、
* Runtime exceptions:
在定义方法时不需要声明会抛出runtime exception; 在调用这个方法时不需要捕获这个runtime exception; runtime exception是从java.lang.RuntimeException或java.lang.Error类衍生出来的。
* Checked exceptions:
定 义方法时必须声明所有可能会抛出的checked exception; 在调用这个方法时,必须捕获它的checked exception,不然就得把它的exception传递下去; checked exception是从java.lang.Exception类衍生出来的。
二、逻辑上
从逻辑的角度来说,checked exceptions和runtime exception是有不同的使用目的的。checked exception用来指示一种调用方能够直接处理的异常情况。而runtime exception则用来指示一种调用方本身无法处理或恢复的程序错误。
checked exception迫使你捕获它并处理这种异常情况。以java.net.URL类的构建器(constructor)为例,它的每一个构建器都会抛出 MalformedURLException。MalformedURLException就是一种checked exception。设想一下,你有一个简单的程序,用来提示用户输入一个URL,然后通过这个URL去下载一个网页。如果用户输入的URL有错误,构建 器就会抛出一个exception。既然这个exception是checked exception,你的程序就可以捕获它并正确处理:比如说提示用户重新输入。