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参与控制程序流程,异常控制的根本目的是处理程序的非正常情况。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值