目录
1. java.util.NoSuchElementException
1.1 含义
java.util.NoSuchElementException 是 Java 中的一个异常类,它是 RuntimeException 的子类。这个异常通常在尝试访问集合中的不存在的元素时抛出。
1.2 出现场景
当你试图从一个空的迭代器中获取下一个元素时,或者当你试图从一个空的列表中获取特定的元素时。
ArrayList<String> c = new ArrayList<>();
c.add("张三");
c.add("李四");
c.add("王五");
c.add("赵六");
c.add("田七");
System.out.println(c);
// 1. 创建迭代器对象
Iterator<String> iterator = c.iterator();
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next()); // 抛出异常:java.util.NoSuchElementException 没有此元素
1.3 解决方案
iterator.hasNext()询问当前位置是否有元素存在
ArrayList<String> c = new ArrayList<>();
c.add("张三");
c.add("李四");
c.add("王五");
c.add("赵六");
c.add("田七");
System.out.println(c);
// 1. 创建迭代器对象
Iterator<String> iterator = c.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
2. java.util.ConcurrentModificationException
2.1 含义
集合的并发修改异常
2.2 出现场景
private static void ConcurrentModification() {
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六");
list.add("田七");
System.out.println(list);
// 需求:找出集合中包含"李"的名字,并从集合中删除
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String name = iterator.next();
if (name.contains("李")) {
list.remove(name);
}
}
System.out.println(list);
}
2.3 解决方案
private static void ConcurrentModification() {
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("赵六");
list.add("田七");
System.out.println(list);
// 需求:找出集合中包含"李"的名字,并从集合中删除
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String name = iterator.next();
if (name.contains("李")) {
iterator.remove(); // 删除迭代器当前遍历到的数据,每删除一个数据后,相当于也在底层做了i--
}
}
System.out.println(list);
}
3. java.lang.StackOverflowError
3.1 含义
栈内存溢出
3.2 出现场景
public class FileTest {
public static void main(String[] args) {
Test5();
}
private static void Test5() {
System.out.println("====== Test5() ======");
Test5(); // 直接方法递归
}
}
3.3 解决方案
增加结束程序的代码。