java.lang.IndexOutOfBoundsException

java.lang.IndexOutOfBoundsException这是我参与8月更文挑战的第17天,活动详情查看:8月更文挑战 IndexOutOfBoundsException 我们举个最常见出现错误的例子 错误复现 运行结果 为什么会抛出这个异常呢?

这是我参与8月更文挑战的第17天,活动详情查看:8月更文挑战

各位小伙伴对IndexOutOfBoundsException是不是很熟悉,是不是经常遇到,其实我们还会遇到他的子类ArrayIndexOutOfBoundsExceptionStringIndexOutOfBoundsException,那么为什么会跑出这个异常呢?其实是某种索引(例如数组,字符串或向量)的索引超出范围。

IndexOutOfBoundsException

我们举个最常见出现错误的例子
错误复现

public static void main(String[] args) {
    List<String> x = new ArrayList<>();
    x.add("0");
    x.add("1");
    int y = 2;
    x.get(y);
}

运行结果

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
	at java.util.ArrayList.rangeCheck(ArrayList.java:657)
	at java.util.ArrayList.get(ArrayList.java:433)

为什么会抛出这个异常呢?我们来看源码。

public E get(int index) {
    rangeCheck(index);

    return elementData(index);
}

private void rangeCheck(int index) {
    if (index >= size)
        throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}

你看到了源码在取元素的时候都做的检查,我们在取的时候也要去做。

public static void main(String[] args) {
    List<String> x = new ArrayList<>();
    x.add("0");
    x.add("1");
    int y = 2;
    if (x.size() > y) {
        System.out.println(x.get(y));
    }
}

这样就可以避免这种问题。这个只是示例,现实中有的比这复杂多了,但是每个都肯定有其对应的解决方案。

ArrayIndexOutOfBoundsException

关于ArrayIndexOutOfBoundsException异常,看其前缀就知道是Array抛出来的异常。
我们举个最常见出现错误的例子和上面都是雷同的
错误复现

public static void main(String[] args) {
    int[] x = {1,2};
    int y = 2;
    System.out.println(x[y]);
}

运行结果

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2

其解决办法也是雷同

public static void main(String[] args) {
    int[] x = {1,2};
    int y = 2;
    if (x.length > y){
        System.out.println(x[y]);
    }
}

StringIndexOutOfBoundsException

哈哈这个不用说了,肯定和String脱不了关系了。
举一个最常见的例子
错误复现

public static void main(String[] args) {
    String x = "你好";
    System.out.println(x.substring(3));
}

原因则是截取字符是字符串数组下表越界。

一个简单的问题

下面这段代码抛什么异常。

public static void main(String[] args) {
    List<String> x = Arrays.asList("0","1");
    int y = 2;
    System.out.println(x.get(y));
}

总结

关于IndexOutOfBoundsException这个异常我们都可以避免的,我们在操作字符串数组集合都去仔细的做一次判断,这样我们就不会为出现这个BUG再次梳理代码了。其实有很多操作不当都会引起这个错误,我们要做的就是仔细,不要因为漏了一个小小的判断又要重新修改一次代码。

今天的文章java.lang.IndexOutOfBoundsException分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/16286.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注