JAVA异常处理

异常处理


一个良好的程序,应当包括防止错误和其他异常情况出现的代码。这种代码应当从最初的开发阶段就与程序合为一体。异常处理方法,一种把一个程序常规代码与他的处理错误的代码分开的分治的方法。



其中,error是有一些硬件引起的异常,不是程序员能控制的;

运行时异常JVM会自动处理的异常;编程人员主动处理这类异常的理由是:处理并更着它,使得程序更友好。

检查性异常就是必须要处理的异常,在API文档中都有明确的规定。

Eg:  public FileReader(File file) throws FileNotFoundException

如果不处理编译会报错的!

 

Thedifferences between checked and unchecked exceptions are:

(1)Checked exceptions mustbe explicitly caught or propagated as described in Basic try-catch-finallyException Handling. Unchecked exceptions do not have this requirement. Theydon't have to be caught or declared thrown.

(2)Checked exceptions inJava extend the java.lang.Exception class. Unchecked exceptions extend thejava.lang.RuntimeException.

 

checked exception还是uncheckedexception?—实践之后再回看

我个人是支持unchecked exception, 尽量在程序中避免使用checked exception

Checked exception确实可以帮助程序员避免发生很多错误,相当于提前给你提个醒:某处可能发生异常,但是我们常常的做法是要么随便处理下,要么继续抛。

异常处理的作用是让程序更健壮,但事实上很多时候没有达到预期。

应该来说,checked exception最大的缺点就是异常的传播性(exceptiondeclaration aggregation up the call stack of an application

相应的也有比较流行的解决办法就是create anapplication base exception.这样可以统一风格处理。

package cisco.learn;

public class TestException {

	public String readDataFromUrl(String s) throws BadUrlException {

		if (s == null)
			throw new BadUrlException();

		String dataReturn = "test data";
		return dataReturn;

	}

	/* if do not want to process the exception, continue throw */
	public void readNumberFromUrl(String url) throws MyException {
		if (url == null) {
			throw new MyException("test");
		}

	}
//if you donot use this method, you need to throws MyException and BadUrlException


	public void storeDataFromUrl(String url) throws ApplicationException{
		
			readDataFromUrl(url);
		
			readNumberFromUrl(url);
		

	}

}
//ApplicationException extends the cheked exception
public class ApplicationException extends Exception{ }
public class MyException extends ApplicationException {}
public class BadUrlException extends ApplicationException {}</span></span>


 

异常处理的一般原则(参考)

    1、能处理就早处理,抛出不去还不能处理的就想法消化掉或者转换为RuntimeException处理。因为对于一个应用系统来说,抛出大量异常是有问题的,应该从程序开发角度尽可能的控制异常发生的可能。

    2、对于检查异常,如果不能行之有效的处理,还不如转换为RuntimeException抛出。这样也让上层的代码有选择的余地――可处理也可不处理。

3、对于一个应用系统来说,应该有自己的一套异常处理框架,这样当异常发生时,也能得到统一的处理风格,将优雅的异常信息反馈给用户。


Best Practices for Exception Handling

http://archive.oreilly.com/pub/a/onjava/2003/11/19/exceptions.html


最后,异常发生后,我们需要怎么做呢?--如何做?

 

异常处理一般有三种方法来处理异常:1)报告异常并且终止程序;2)修复异常程序并继续执行;3)报告异常到一个日志并继续运行。如果一个不可修复的异常出现在一个不能合理终止的程序中,那么该异常应该被报告并且程序应该继续执行。

 


可以参考

http://tutorials.jenkov.com/java-exception-handling/checked-or-unchecked-exceptions.html

 

http://ispring.iteye.com/blog/222680

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值