异常-java

检测性异常:编译程序的时候会进行检测,如果没有进行处理,不能通过编译。
非检测性异常:编译程序的时候能够通过检测,通常是外部环境(硬盘或者系统故障)等不可检测预见的Error和内部环境(逻辑错误等)的RuntimeException。
三种异常
1:检测性异常
(Checked Exception):
一些写的好的程序应该提前考虑到这些异常,这种异常通常出现在写好的程序的内部,应用程序能够提前预测覆盖和捕获这种异常并从中恢复。例如:假设一个应用程序中需要用户输入文件名,然后通过传递这个文件名字到java.io.FileReader类中的构造方法中 打开这个文件,正常情况下,用户提供存在的文件名称,可读性的文件,因此FileReader的对象能够构造成功,这个应用程序能够正常的执行,但是有时用户提供了不存在的用户名称, 这个构造方法会抛出一个FileNotFoundException,一个好的应用程序应该捕获这个异常,通知用户这个错误,有可能提示输入正确的文件名。
检测性异常是Catch or Specify Requirement主题,除了Error , RuntimeException以及它们的子类,所有的其他异常都是检测性异常(Checked Exception)。

2:error
第二种异常是error,这种异常通常出现在应用程序的外部,不能够进行提前预测和从中恢复。例如,假设一个应用程序成功的打开一个文件,但是因为硬盘或者系统故障问题,会出现读取文件不成功将抛出一个java.io.IOError,应用程序可能为了通知用户出现了问题选择捕获这个异常,但是打印一个堆栈信息并退出也许会更有意义。
Errors不是Catch or Specify Requirement的主题,Error是一种异常表示Error和它的子类。

3:运行时异常
第三种异常时运行时异常,这种异常时应用程序的内部的异常,应用程序通常不能够预测和从中恢复。这通常表明程序的bug,例如逻辑错误或者不正确的使用了API等,例如考虑上面的传递文件名到java.io.FileReader类的构造方法中创建对象的FileReader对象的例子,如果因为逻辑错误传递给构造方法一个null,构造方法将抛出一个NullPointException空指针异常,应用程序能够捕获这个异常,但是消除出现异常的这个bug也许更有意义。
运行时异常不是一种Catch or Specify Requirement的主题。运行时异常显示RuntimeException以及它的子类。

Error和runtime exception(运行时异常) 都叫做非检测性异常(unchecked exceptions)。

注意:当try或者catch块在执行的时候,JVM退出了,finally块也许不执行,同样的,如果执行try或者catch块的线程是中断了或者被killed了,即使整个应用程序继续执行,finally块也许不执行。


异常的第一种方式是try  catch捕获,第二种方式是抛出异常,抛出异常是由调用这个方法的那个方法对这个异常进行处理,它的处理方式也是有两种,要么捕获,要么继续抛出,继续抛给调用它的方法,就这样一层一层的网上抛。最后,main方法是我们的最后一个方法,如果main方法我们也声明为抛出的方式,那么最后异常就会抛给Java虚拟机了,由虚拟机自己去处理。


package day09;

public class ExceptionDemo {

	public static void main(String[] args) {
		Demo d = new Demo();
		try {// 把有可能抛出异常的代码块写在try块中
			int x = d.div(5, -3);
			System.out.println(" x= " + x);
		} catch (FuShuException e) {// 把有可能抛出异常的代码块写在try块中,一个try可以有多个catch块
			System.out.println(e.toString());
			System.out.println("这个是针对性的处理。" + e.getNum());
			System.out.println(e.getMessage());

		} finally {//把清除代码(最后必须执行的代码)放入finally块中是一个很好的选择
		}
		System.out.println("over");
	}

}

class Demo {
	int div(int a, int b) throws FuShuException {
		if (b < 0)
			throw new FuShuException("这个是出现负数作为除数的情况", b);// 抛出一个自定义异常,该异常继承了Exception
		return a / b;
	}
}

class FuShuException extends Exception {// 自定义异常继承Exception
	private int num;

	FuShuException(String msg, int num) {
		super(msg);
		this.num = num;
	}

	public int getNum() {
		return this.num;
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值