⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exceptiontips.java

📁 本代码以J2SE 5.0为开发环境
💻 JAVA
字号:
package book.exception;

import java.util.Date;
import java.util.EmptyStackException;
import java.util.Stack;

/**
 * 使用异常的几点注意
 */
public class ExceptionTips {

	public static void main(String[] args) {

		//(1)尽量避免使用异常,将异常情况提前检测出来。
		Stack stack = new Stack();
		try {
			stack.pop();
		} catch (EmptyStackException e){
			//...
		}
		//应该使用下面的方式,以避免使用异常
		if (!stack.isEmpty()){
			stack.pop();
		}
		
		//(2)不要为每个可能会出现异常语句都设置try和catch。
		try {
			stack.pop();
		} catch (EmptyStackException e){
			//...
		}
		String data = "123";
		try {
			Double.parseDouble(data);
		} catch (NumberFormatException e){
			//...
		}
		//应该使用下面的方式,将两个语句放在一个try块中
		try {
			stack.pop();
			Double.parseDouble(data);
		} catch (EmptyStackException e){
			//...
		} catch (NumberFormatException e){
			//...
		}
		
		//(3)避免在方法中throw或者捕获运行时异常RuntimeException,比如内存错误等。
		//避免出现下面的情况
		String[] array;
		try {
			array = new String[1000];
			//array = new String[10000000];此时会出现OutOfMemoryError异常
		} catch (OutOfMemoryError e){
			throw e;
		}
		//直接用下面的代码
		array = new String[1000];
		
		//(4)避免总是catch Exception或Throwable,而要catch具体的异常。这样可以根据不同的异常做不同的处理,是程序更加清晰。
		try {
			stack.pop();
			Double.parseDouble(data);
		} catch (Exception e){
			//应该避免catch Exception!!!
		}
		//(5)不要压制、隐瞒异常。将不能处理的异常往外抛,而不是catch住之后随便处理。
		try {
			Double.parseDouble(data);
		} catch (NumberFormatException e){
			//...
			throw e; //抛出不能处理的异常,而不是隐瞒。
		}
		//(6)不要在循环中使用try catch,尽量将try catch放在循环外或者避免使用try catch。
		//请看下面的例子,在循环中使用try和catch将耗费更多的时间,尽管没有异常发生
		int i = 0;
		int ntry = 1000000;
		Stack s = new Stack();
		long s1;
		long s2;
		System.out.println("Testing for empty stack");
		s1 = new Date().getTime();
		for (i = 0; i <= ntry; i++){
			if (!s.empty()){
				s.pop();
			}
		}
		s2 = new Date().getTime();
		System.out.println((s2 - s1) + " milliseconds");

		System.out.println("Catching EmptyStackException");
		s1 = new Date().getTime();
		for (i = 0; i <= ntry; i++){
			try {
				s.pop();
			} catch (EmptyStackException e){
			}
		}
		s2 = new Date().getTime();
		System.out.println((s2 - s1) + " milliseconds");
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -