java

Java - Exception

Java - Exception

一、简介

我们看看异常处理的一些类的结构组成:

从根部开始分为两大类: Error和Exception 。Error是程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等。这些异常发生时,Java虚拟机(JVM)一般会选择线程 终止 。Exception是程序本身可以处理的异常,这种异常分两大类: 非运行时异常 (发生在编译阶段,又称checkException)和 运行时异常 (发生在程序运行过程中,又叫uncheckException)。非运行时异常一般就是指一些没有遵守Java语言规范的代码,容易看的出来,并且容易解决的异常,运行时异常是那些在程序运行过程中产生的异常,具有不确定性,如空指针异常等,造成空指针的原因很多,所以运行时异常具有不确定性,往往难以排查,还有就是程序中存在的逻辑错误,光从一段代码中看不出问题,需要纵观全局才能发现的错误,也会造成运行时异常,这就要求我们在写程序时多多注意,尽量处理去处理异常,当异常发生时,希望程序能朝理想的方面运行!

二、异常的类型

一方面我们可以将异常分为受控异常和不受控异常,其实一般来讲,受控异常就是非运行时异常,不受控异常就是运行时异常和Error。另一方面,我们直接将异常分为非运行时异常和运行时异常。

三、异常处理的过程

使用try/catch/finally语句块安装异常处理程序,每个try块中包含可能出现异常的语句,每个catch块中包含处理异常的程序 :

public static void main(String[] args) {
        String filename = "/Users/wenbin/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!");
        }
    }

如果目录下 没有test.txt 的话,该程序抛出异常:

this is finally block!
java.io.FileNotFoundException: /Users/wenbin/test.txt (系统找不到指定的文件。)
 at java.io.FileInputStream.open(Native Method)

 at java.io.FileInputStream.(FileInputStream.java:106)
 at java.io.FileInputStream.(FileInputStream.java:66)
 at java.io.FileReader.(FileReader.java:41)
 at Test.main(Test.java:10)

但是finally块中的语句却输出了,这个暂且不谈,先记着,在目录下下新建文件test.txt,并输入内容2232,再来观察下:

输出:

2322
this is finally block!

finally块中的语句依然输出,说明: 不论程序有无异常,finally块中的语句都会执行 。因此finally块中一般放一些关闭资源的语句。

四、常见异常

NullPointerException 空指针:

空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等

ClassNotFoundException  找不到类:

找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。

ClassCastException   类型转换:

ArithmeticException   算数条件:

算术条件异常。譬如:整数除零等。

ArrayIndexOutOfBoundsException  数组越界:

五、异常和错误

异常: 在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是JVM(Java虚拟机)通知你的一种方式,通过这种方式,JVM让你知道,你已经犯了个错误,现在有一个机会来修改它。Java中使用异常类来表示异常,不同的异常类代表了不同的异常。但是在Java中所有的异常都有一个基类,叫做Exception。

错误:它指的是一个合理的应用程序不能截获的严重的问题,大多数都是反常的情况,错误是JVM的一个故障(虽然它可以是任何系统级的服务)。所以,错误是很难处理的,一般的开发人员是无法处理这些错误的,比如内存溢出。


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!
文章若有侵权请立即与我联系, 我将及时处理
微信扫一扫,向我赞赏

微信扫一扫,向我赞赏

微信扫一扫,向我赞赏

支付宝扫一扫,向我赞赏

回复

This is just a placeholder img.
Title - Artist
0:00