黑马程序员 java知识点分享_异常

来源:互联网 发布:php资源网源码 编辑:程序博客网 时间:2024/04/30 14:41

------- android培训、java培训、期待与您交流! ----------

java(SE)异常

1.异常简介

Throwable 类是 Java 语言中所有错误或异常的超类(这就是一切皆可抛的东西)。它有两个子类:Error和Exception。

Error:用于指示合理的应用程序不应该试图捕获的严重问题。这种情况是很大的问题,大到你不能处理了,所以听之任之就行了,你不用管它。比如说VirtualMachineError:当 Java 虚拟机崩溃或用尽了它继续操作所需的资源时,抛出该错误。好吧,就算这个异常的存在了,那么应该何时,如何处理它呢??交给JVM吧,没有比它更专业的了。

Exception:它指出了合理的应用程序想要捕获的条件。Exception又分为两类:一种是CheckedException,一种是UncheckedException。这两种Exception的区别主要是CheckedException需要用try...catch...显示的捕获,而UncheckedException不需要捕获。通常UncheckedException又叫做RuntimeException。《effective java》指出:对于可恢复的条件使用被检查的异常(CheckedException),对于程序错误(言外之意不可恢复,大错已经酿成)使用运行时异常(RuntimeException)。

2.异常的处理
对应非运行时异常,必须对其进行处理。处理方式有两种:

使用try…catch…finally语句块进行捕获
在产生异常的方法所在的方法声明throws Exception,直接抛出给上一级。

对于运行时异常,可以不对其进行处理,也可以对其进行处理。一般情况下都不对其进行处理。

3.捕获异常
第一种方式是try、catch语句捕捉

try {FileInputStream fs = new FileInputStream("D:\\demo.txt");} catch (FileNotFoundException e) {   //打印出异常e.printStackTrace();} 
第二种是直接抛出,交给jvm进行处理

public static void getName() throws Exception {
    System.out.println("name:");    throw new Exception();}
public static void main(String[] args) throws Exception { execute();}
对于有关调用资源的类来说,关闭资源是至关重要的。但此时若有异常发生,资源容易关闭失败,此时,可以使用finally语句处理。无论程序怎样运行最后都会执行finally语句。
try {   FileInputStream fis = new FileInputStream("D:\\demo.txt");} catch (FileNotFoundException e1) {    //异常转型:将异常以新的类型的异常再抛出,这样做一般为了异常的信息更直观throw new Exception();} finally {fis.close();}
4.自定义异常
自定义异常通常是定义一个继承自Exception类的子类。一般情况下我们都会直接继承自Exception类,而不会继承某个运行时的异常类。
public class MyException extends Exception{    public MyException(){        super();    }    public MyException(String msg){        super(msg);    }}
5.总结
对于异常语句块的使用要注意
1、避免过大的try块,不要把不会出现异常的代码放到try块里面,尽量保持一个try块对应一个或多个异常。
   2、细化异常的类型,不要不管什么类型的异常都写成Excetpion。
   3、catch块尽量保持一个块捕获一类异常,不要忽略捕获的异常,捕获到后要么处理,要么转译,要么重新抛出新类型的异常。
   4、不要把自己能处理的异常抛给别人。
   5、不要用try...catch参与控制程序流程,异常控制的根本目的是处理程序的非正常情况。

------- android培训、java培训、期待与您交流! ----------

原创粉丝点击