Java中与异常相关的其它说明

一、在方法中抛出异常

若某个方法可能会发生异常,但不想在当前方法中处理这个异常,则可以使用throws、throw关键字在方法中抛出异常

1、使用throws关键字抛出异常

throws关键字通常被应用在声明方法中,用来指定方法可能抛出的异常。多个异常可使用逗号分割。示例如下:

public class Shoot {
	static void pop() throws NegativeArraySizeException{
		//定义方法并抛出异常
		int[] arr = new int[-3];		//创建数组
	}
	public static void main(String[] args) {
		try {
			pop();
		}catch (NegativeArraySizeException e) {
			// TODO: handle exception
			System.out.println("pop()方法抛出的异常");
		}
	}
}
/*输出结果如下:
pop()方法抛出的异常
*/

使用throws关键字将异常抛给上一级后,如果不想处理该异常,可以继续向上抛出,但最终要有能够处理该异常的代码。

 

2、使用throw关键字抛出异常

throw关键字通常用于方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即终止,它后面的语句都不执行。通过throw抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throw关键字在方法的声明中指明要抛出的异常;如果要捕捉throw抛出的异常,则必须使用try-catch语句块,通过下面的示例来说明throw的使用:

public class MyException extends Exception {	//创建自定义异常,继承Exception
	String message;								//定义String类型变量
	public MyException(String ErrorMessage) {	//构造方法
		message = ErrorMessage;					//父类构造方法
	}
	public String getMessage() {
		return message;
	}
}
public class Captor {
	static int quotient(int x,int y) throws MyException{
		if(y<0) {
			throw new MyException("除数不能为负数!");
		}
		return x/y;
	}
	public static void main(String args[]) {
		try {
			int result = quotient(3,-1);
		}catch(MyException e) {
			System.out.println(e.getMessage());
		}catch(ArithmeticException e) {
			System.out.println("除数不能为0");
		}catch(Exception e) {
			System.out.println("程序发生了其它异常");
		}
	}
}
/*输出结果如下:
除数不能为负数!
*/


二、运行时异常

RuntimeException异常时程序运行过程中产生的异常。Java类库的每个包中都定义了异常类,所有这些类都是Throwable类的子类。Throwable类派生了两个子类,分别是Exception和Error类。

Java中提供了常见的RuntimeException异常,这些异常可以通过try-catch语句捕获,如下表所示:

RuntimeException异常的种类
种类 说明
NullPointerException 空指针异常
ArrayIndexOutOfBoundsException 数组下标越界异常
ArithmeticException 算术异常
ArrayStoreException 数组中包含不兼容的值抛出的异常
IllegalArgumentException 非法参数异常
SecurityException 安全性异常
NegativeArraySizeException 数组长度为负异常

 

 

 

 

 

 

 

 

 

 

三、异常的使用原则

Java异常强制用户去考虑程序的强健性和安全性。异常处理不应用来控制程序的正常流程,其主要作用是捕获程序在运行时发生的异常并进行相应处理。编写代码处理某个方法可能出现的异常时,可遵循以下几条原则:

1、在当前方法声明中使用try-catch语句捕获异常

2、一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类

3、如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子集,不能抛出新异常

发布了61 篇原创文章 · 获赞 1 · 访问量 1337

猜你喜欢

转载自blog.csdn.net/qq_29440983/article/details/103659910