菜鸟学Java(十八)——异常
每个学编程的人在编程的过程中都会遇到各种异常。那么当我们遇到异常的时候该怎么处理呢?针对不同的异常我们又该采取什么具体的处理方式呢?这些问题在我开始学编程的很长一段时间里我都不太清楚,还好随着不断的学习,慢慢地对它有了一些了解。下面我们一起看看Java中的各种异常。
 
	
我们先看下面这张图:
	
	
	
	
	
	
	
	
如图所示,Java中所有的异常都是从Throwable继承而来,Throwable被定义在jave.lang包中,并且有两个直接子类——Exception和Error。其中Error指的是Java虚拟机的内部系统错误,而且通常情况下我们无法处理此类错误。今天我们主要讨论Exception,所有其他的异常都是Exception的子类,而且只有这些异常才是程序员可以处理的。
	
	
如上图所示,Exception有两个重要的直接子类,分别是IOException和RuntimeException。IOException类用于处理程序的输入输出异常,包括键盘锁定或文件异常等;RuntimeException类用于处理从程序逻辑中产生的错误,例如访问数组下标越界、空指针异常等。
	
	
常见异常:
| 
 异常类名称  | 
 异常类含义  | 
   
			
| 
 ArithmeticException  | 
 算术异常类  | 
   
			
| 
 ArrayIndexOutOfBoundsException  | 
 数组下标越界异常类  | 
   
			
| 
 ArrayStoreException  | 
 将与数组类型不兼容的值赋值给数组元素时抛出的异常  | 
   
			
| 
 ClassCastException  | 
 类型强制转换异常类  | 
   
			
| 
 ClassNotFoundException  | 
 未找到相应类异常  | 
   
			
| 
 EOFException  | 
 文件已结束异常类  | 
   
			
| 
 FileNotFoundException  | 
 文件未找到异常类  | 
   
			
| 
 IllegalAccessException  | 
 访问某类被拒绝时抛出的异常  | 
   
			
| 
 InstantiationException  | 
 试图通过newInstance()方法创建一个抽象类或抽象接口的实例时抛出的异常  | 
   
			
| 
 IOException  | 
 输入输出异常类  | 
   
			
| 
 NegativeArraySizeException  | 
 建立元素个数为负数的数组异常类  | 
   
			
| 
 NullPointerException  | 
 空指针异常类  | 
   
			
| 
 NumberFormatException  | 
 字符串转换为数字异常类  | 
   
			
| 
 NoSuchFieldException  | 
 字段未找到异常类  | 
   
			
| 
 NoSuchMethodException  | 
 方法未找到异常类  | 
   
			
| 
 SecurityException  | 
 小应用程序(Applet)执行浏览器的安全设置禁止的动作时抛出的异常  | 
   
			
| 
 SQLException  | 
 操作数据库异常类  | 
   
			
| 
 StringIndexOutOfBoundsException  | 
 字符串索引超出范围异常  | 
   
			
| 
 IndexOutOfBoundsException  | 
 当某对象(如数组或字符串)的索引超出范围时抛出该异常  | 
   
			
	
	
1、如果无法处理某个异常,那就不要捕获它;
2、捕获异常要按照从小到大的顺序(例如应该先捕获NullPointerException,然后RuntimeException,最后Exception);
3、尽量在靠近异常被抛出的地方捕获异常;
4、在捕获异常的地方将它记录到日志中,除非您打算将它重新抛出;
5、按照您的异常处理必须多精细来构造您的方法;
	6、需要用几种类型的异常就用几种,尤其是对于应用程序异常。 
	
	
	捕获适当的异常 
	正确地处理异常并不是一项轻松的任务,这是因为异常的处理有时会导致程序出现其他不明行为。不过,以下三条规则可以帮助你避免错误处理异常所可能遭遇的风险。 
	
	规则 #1: 总是捕获扔出异常的类型而不要理睬异常的超类。 为了遵守通常的代码习惯,你可以采用Exception类的大写字母作为变量名,如下所示:   
	    catch(FileNotFoundException fnfe)   
	以及 
	    catch(SQLException sqle) 
	
	规则 # 2: 决不让catch块留空。在很多情况下虽然确实编写了try/catch块但在代码的catch部分却什么都没有做。或者,如果采用了日志API(Logging API),那么请编写代码把异常写到日志中。 
	
	规则 # 3: 决不扔出Exception基类的实例。开发人员应当总是扔出自己创建的异常类。 
	
	
OK,以上就是我总结整理的关于Java异常的一些学习心得,希望能够给看这篇文章的人一点点帮助。
	
	
	
	
                    
                
                
            
        
浙公网安备 33010602011771号