java异常

来源:互联网 发布:安卓数据精灵 编辑:程序博客网 时间:2024/05/01 17:29

------------------------------------------------------------------------------

什么是异常

在java程序运行时,常常会出现一些非正常的现象,java需要显式的告诉别人程序出问题了,此时就会抛出(throw)错误或异常。java程序中所有抛出的非正常现象都必须从Throwable派生而来。类Throwable有两个直接子类:Error和Exception,就是错误和异常。

错误:一般来说,最常见的错误有程序进入死循环,内存泄露等。这种情况下,程序运行时本身无法解决,只能通过其他程序干预。java对应的类为Error类。Error类对象由java虚拟机生成并抛弃(通常java程序不对这类异常行为进行处理)。

异常:异常是程序执行时遇到的非正常情况或意外行为。以下这些情况一般都可以引发异常:代码或调用的代码中有错误,操作系统资源不可用,公共语言运行库遇到意外情况(常见的有数组下标越界,算法溢出,除数为0,内存溢出等)。这种情况不像错误类那样,程序运行时本身可以解决,由异常处理代码调整程序运行方向,使程序仍可以继续运行,直至正常结束。

RuntimeException代表运行时由java虚拟机生成的异常。其他则为非运行时异常。java编译器要求程序必须捕获或声明所有的非运行时异常,但对运行时异常可以不做处理(其实有少量运行时异常编译器也要求必须处理,如InterruptedException)。

运行时异常称为runtime exception,是从java.lang.RuntimeException派生出来的。非运行时异常又称为checked exception,是从java.lang.Exception派生出来的。

我们可以自定义异常对象,使得抛出的异常更有针对性。其往往是从exception派生出来的。


异常关键字

try catch throw throws finally

其中throw用于方法内部,用来抛出一个Throwable类型的异常。如果抛出的是非运行时异常,则必须在方法定义的部分声明该方法可能向外抛出的异常,该方法的调用者也必须处理抛出的异常。或者在方法内部用try catch捕获这个异常。如果所有方法都层层向外抛出异常,最终JVM会处理,就是打印异常消息和堆栈信息。

throws关键字用在方法声明部分,用来声明方法可能会抛出的异常。


最后来做一道题来检验一下刚才学到的知识。

下面4段代码中,哪些编译不能通过?

程序1

import java.io.*;public class Testing {public static void main(String[] args) {try {test();} catch (Exception ex) {ex.printStackTrace();}}static void test() {try {throw new Exception("test");} catch (Exception ex) {ex.printStackTrace();}}}

程序2

import java.io.*;public class Testing {public static void main(String[] args) {try {test();} catch (Exception ex) {ex.printStackTrace();}}static void test() {throw new Exception("test");}}

程序3

import java.io.*;public class Testing {public static void main(String[] args) {try {test();} catch (Exception ex) {ex.printStackTrace();}}static void test() throws Exception {throw new Exception("test");}}

程序4

import java.io.*;public class Testing {public static void main(String[] args) {try {test();} catch (IOException ex) {ex.printStackTrace();}}static void test() throws Exception {}}

答案 :2和4不能通过编译。





原创粉丝点击