碰到一个java异常的问题

周智超 发布于 2014/04/17 16:01
阅读 342
收藏 0
public class List<T>
{
	private Object[] elemdata;
	private int size; 
	private int cursor ;
	public List(int size) {
		elemdata = new Object[size];
		this.size = size;
		cursor = 0;
	}
	public void add(T elem) {
		rangeCheckForAdd();
		elemdata[cursor++] = elem; 
	}
	
	public T get(int index) {
		rangeCheck(index);
		return (T)elemdata[index];
	}
	private void rangeCheck(int index) {
		if(index < 0 || index >= size) {
			throw new MyException("Out of bounds :" + index);
		}
	}
	private void rangeCheckForAdd() {
		if(cursor < 0 || cursor >= size) {
			throw new MyException("Out of bounds :" + cursor);
		}
	}
}

错误如下

我实在是搞不清楚,谁能帮助解释下



加载中
0
CloudArchitect
CloudArchitect

两种方式:

private void rangeCheck(int index) {
		if(index < 0 || index >= size) {
			try {
				throw new Exception("Out of bounds :" + index);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	private void rangeCheckForAdd() throws Exception {
		if(cursor < 0 || cursor >= size) {
			throw new Exception("Out of bounds :" + cursor);
		}
	}



周智超
周智超
哦,没问题,成功了,谢谢
周智超
周智超
第一种可以,但是第二次我用了还是报错
0
我擦_得弄个昵称
我擦_得弄个昵称

学习, 建议使用eclipse 工具.

0
loyal
loyal

当抛出一个异常时,需要捕获或方法外抛出异常.

0
周智超
周智超

引用来自“程序猿可爱多”的评论

两种方式:

private void rangeCheck(int index) {
		if(index < 0 || index >= size) {
			try {
				throw new Exception("Out of bounds :" + index);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	private void rangeCheckForAdd() throws Exception {
		if(cursor < 0 || cursor >= size) {
			throw new Exception("Out of bounds :" + cursor);
		}
	}



可是我看ArrayList的源码有这样的函数:
private void rangeCheck(int index) {
            if (index < 0 || index >= this.size)
                throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
        }

        private void rangeCheckForAdd(int index) {
            if (index < 0 || index > this.size)
                throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
        }

为什么这里可以
CloudArchitect
CloudArchitect
异常分为checked 和 unchecked两种,checked需要捕获或者上抛;但是unchecked属于运行期异常,捕获与否都行,很显然,数组越界、分母不能为0等异常是运行期才能够出现的,而文件IO、网络之类需强制。
返回顶部
顶部