4
回答
碰到一个java异常的问题
华为云4核8G,高性能云服务器,免费试用   
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);
		}
	}
}

错误如下

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



举报
周智超
发帖于4年前 4回/299阅
共有4个答案 最后回答: 4年前

两种方式:

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);
		}
	}



--- 共有 2 条评论 ---
周智超哦,没问题,成功了,谢谢 4年前 回复
周智超第一种可以,但是第二次我用了还是报错 4年前 回复

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

两种方式:

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));
        }

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