Java总结之异常处理

异常--运行期出现的错误。
观察错误的名字和行号最重要。
【异常的概念】
Java异常是Java提供的用于处理程序中错误的一种机制。
所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0移除,数组下标越界,所要读取的文件不存在)。
涉及良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的


结果。
Java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并将被提交


给Java运行时系统,这个过程称为抛出(throw)异常。
当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前一场对象交给其处理,这一过程称为捕


获(catch)异常。
【异常的概念】
public void someMethod() throws SomeException {//声明该方法可能抛出的异常
if(someCondition()) {
throw new SomeException("错误原因");//构造并抛出异常对象
}
... ... ...
}


... ... ...
try { //调用该方法时视图捕获异常
someMethod();
} catch (SomeException e) {
//异常处理代码;  -->定义处理异常的代码
}
... ... ...
【异常的分类】
J2SDK中定义了很多异常类,这些类对应了各种各样可能出现的异常事件。
Throwable,Error,Exception.RuntimeException
【异常的捕获和处理】
try {
//可能抛出异常的语句
} catch (.SomeException1 e) {
... ... ...
}
catch (someException2 e) {
... ... ...
}
finally { 
... ... ...
}
finally段的代码无论是否发生异常都有执行。
在catch中声明的一场对象(catch(SomeException e))封装了异常事件发生的信息,在catch语句块中可以使用这个对


象的一些方法获取这些信息。
例如:
getMessage()方法,用来得到有关异常事件的信息。
printStackTrace()方法,用来跟踪异常事件发生实质性堆栈的内容。
finally语句:
  finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其他部分以前,能够对程序的状态做统一


的管理。
  无论try所指定的程序块中是否抛出例外,finally所指定的代码都要被执行。
  通常finally语句中可以进行资源的清除工作,如:
    关闭打开的文件
    删除临时文件
Java的里外处理机制使得里外时间,沿着被调用的顺序往前寻找,只要找到符合该例外种类的例外处理程序。
readFile() throws IOException{...}
method() throws IOException{//当method方法调用readFile方法时,也要抛出想相应异常
readFile();
}
public static void main(Sting[] args) {
try {
method();
} catch(IOException e) {...}
}
在一个try语句块中,基类异常的捕获语句不可以写在子类异常捕获语句的上面。
【使用自定义的异常】
使用自定义的异常一般有如下步骤:
1.通过继承java.lang.Exception类声明自己的异常类。
2.在方法适当的位置生成自定义异常的实例,并用throw语句抛出。
3.在方法的声明部分有throws语句声明该方法可能跑出的异常。
【声明并抛出异常】
注意:重写方法需要抛出与原方法所抛出异常类型一致异常或不抛出异常。
【总结】
一个图
五个关键字 try,catch,finally,throw,throws
先逮小的,再逮大的
异常和重写的关系

class MyException extends Exception {
	private int id;
	public MyException(String message,int id) {
		super(message);
		this.id = id;
	}
	public int getId() {
		return id;
	}
}
public class Test {
	public void regist(int num) throws MyException {
		if(num < 0) {
			throw new MyException("人数为负值,不合理", 3);
		}
		System.out.println("登记人数 " + num);
	}
	public void manager() {
		try {regist(100);}
		catch (MyException e) {
			System.out.println("登记失败,出错类型码=" + e.getId());
			e.printStackTrace();
		}
		System.out.println("操作结束");
	}
	public static void main(String[] args) {
		Test t = new Test();
		t.manager();
	}
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值