Java常见的异常处理(Exception)

一、异常的定义
Java代码在运行时期发生的问题就是异常;常见的异常有:数组角标越界异常(ArrayIndexOfBoundsException)、空指针异常(NullPointerException)。

public static void main(String[] args) {
	int[] arr = new int[3];
	System.out.println(arr[0]);
	System.out.println(arr[3]);
// 该句运行时发生了数组索引越界异常ArrayIndexOutOfBoundsException,
					}

二、异常的结构
异常的继承结构:Throwable类是所有异常的根基,Error和Exception继承Throwable。异常主要分为三种类型:系统错误(Error)、异常(Exception)、运行时异常(RuntimeException)。
1、系统错误(Error):Error类描述的是内部系统的错误,由Java虚拟机抛出,只能通过修改源码。
2、异常(Exception):Exception类是由程序和外部环境所引起的错误,这些错误能被程序处理和捕获。如:ClassNotFoundException(试图使用一个不存在的类)、IoException(无效的输入、读文件时超过文件尾、打开一个不存在的文件)。
3、运行时异常(RuntimeException):通常是程序设计错误:错误的类型转换、访问一个越界数组或数值错误。

public class Test{
	public static void main(String[] args){
	System.out.printIn(1/0);
	// 该句运行时发生了运行时异常RuntimeException,
	}
}

三、异常的处理
1、声明异常(throws Exception):定义在方法的声明上,后面可以同时跟多个数据类型的异常。
**注:**如果方法没有在父类中声明异常,就不能在子类对其进行继承来声明异常。
2、抛出异常(throw Exception):定义在方法中,后面跟的是异常类型,且只能抛出一个异常。
3、捕获异常(try…catch…):分为单异常捕获、多异常捕获。

//1、单异常捕捉
try{
	//需要检测的语句,其可能产生错误代码
}
catch(异常类 变量){
	//产生异常,处理异常
}finally{
	//一定会执行的语句(有些异常会发生代码的跳转,导致finally语句不执行,就直接退出)
}	


//2、多异常捕捉
try{
	//需要检测的语句,其可能产生错误代码
}
catch(异常类1 变量1){
	//产生异常,处理异常
}
catch(异常类2 变量2){
	//产生异常,处理异常
}finally{
	//一定会执行的语句(有些异常会发生代码的跳转,导致finally语句不执行,就直接退出)
}		
	注:异常类2要是异常类1的子类或者声明父类,简而言之:异常类1的范围要比异常类2的范围要广。
	 

4、方法重写时的异常处理

A:方法重写时候异常的处理
	*1:子类覆盖父类方法时,如果父类的方法声明异常,子类只能声明父类异常或者该异常的子类,或者不声明。
		例如:
		class Husband{
			public void method () throws RuntimeException {
			}
		}
		class Son extends Husband {
			public void method() throws RuntimeException { }  //抛出父类一样的异常
			//public void method() throws NullPointerException{ } //抛出父类子异常
		}
	* 2:当父类方法声明多个异常时,子类覆盖时只能声明多个异常的子集。
		例如:
		class Husband {
			public void method () throws NullPointerException, ClassCastException{
			}
		}
		class Son extends Husband {
			public void method()throws NullPointerException, ClassCastException { }  		
			public void method() throws NullPointerException{ } //抛出父类异常中的一部分
			public void method() throws ClassCastException { } //抛出父类异常中的一部分
		}
	*3:当父类被覆盖的方法没有异常声明时,其继承的子类覆盖时无法声明异常的。
		例如:
		class Husband {
			public void method (){
			}
		}
		class Son extends Husband {
			public void method() throws Exception { }//错误的方式
		}

5、从异常中获取信息

  • 1、getMessage()方法
    返回该异常的简单信息
    2、toString()方法
    返回该异常的名称与详细信息字符串
    3、printStackTrace()方法
    在控制台输出该异常的名称与详细信息字符串、异常出现的代码位置(eclipse默认采用该方法获取异常信息)

你可能感兴趣的:(Java常见的异常处理(Exception))