例外是程序执行期间发生的问题(运行时错误)。当发生异常时,程序会突然终止,并且生成异常的行之后的代码将永远不会执行。每个异常由其各自的类表示。
这是运行时异常,即它在执行时发生。
如果您尝试从空对象获取元素,或者使用Enumeration,Iterator或tokenizer的访问器方法(例如next()或nextElement())访问集合,数组或其他对象的内容,则尝试在到达对象(集合,数组或其他对象)的末尾后获取下一个元素,将生成NoSuchElementException。
Enumeration的nextElement()方法-Vector,HashTable等集合具有名为elements()的方法,该方法返回包含集合中所有元素的Enumeration(接口)对象。
使用此对象,可以使用nextElement()方法一个接一个地获取元素。
如果在空集合上调用此方法,或者在到达集合末尾后,将在运行时生成NosuchElementException。
import java.util.Enumeration; import java.util.Vector; public class EnumExample { public static void main(String args[]) { //实例化向量 Vector<Integer< vec = new Vector<Integer>( ); //填充向量 vec.add(1254); vec.add(4587); //使用枚举检索元素 Enumeration<Integer> en = vec.elements(); System.out.println(en.nextElement()); System.out.println(en.nextElement()); //到达末尾后检索下一个元素 System.out.println(en.nextElement()); } }
1254 4587 Exception in thread "main" java.util.NoSuchElementException: Vector Enumeration at java.util.Vector$1.nextElement(Unknown Source) at MyPackage.EnumExample.main(EnumExample.java:18)
StringTokenizer的nextElement()和nextToken()方法 -StringTokenizer类接受String和delimiter作为其构造函数之一的参数,每次出现给定的定界符时,将给定的String拆分为几个小标记。
此类的nextToken()和nextElement()方法返回令牌生成器中的下一个令牌。如果在空的Tokenizer对象上调用这些方法,或者在结束时调用NoSuchElementException,则在运行时将生成NoSuchElementException。
import java.util.StringTokenizer; public class StringTokenizerExample{ public static void main(String args[]) { String str = "Hello how are you"; //实例化StringTokenizer类 StringTokenizer tokenizer = new StringTokenizer(str, " "); //打印所有令牌 System.out.println(tokenizer.nextToken()); System.out.println(tokenizer.nextToken()); System.out.println(tokenizer.nextToken()); System.out.println(tokenizer.nextToken()); //到达终点后获得下一个令牌 tokenizer.nextToken(); tokenizer.nextElement(); } }
Hello how are you Exception in thread "main" java.util.NoSuchElementException at java.util.StringTokenizer.nextToken(Unknown Source) at MyPackage.StringTokenizerExample.main(StringTokenizerExample.java:16)
Iterator的next()方法 -Java提供了Iterator和ListIterator类来检索集合对象的元素。Iterator和ListIterator的next()方法返回集合的下一个元素。
如果在空集合上调用这些方法,或者在结束时调用NoSuchElementException,则在运行时生成。
同样,如果在空对象上或在其声明位置调用此方法,则ListIterator的previous()方法将返回集合的前一个元素,并在运行时生成NoSuchElementException。
import java.util.ArrayList; import java.util.Iterator; public class NextElementExample{ public static void main(String args[]) { //实例化ArrayList对象 ArrayList<String> list = new ArrayList<String>(); //填充ArrayList list.add("apples"); list.add("mangoes"); list.add("oranges"); //获取ArrayList的Iterator对象 Iterator it = list.iterator(); System.out.println(it.next()); System.out.println(it.next()); System.out.println(it.next()); //到达末尾后检索下一个元素 it.next(); } }
apples mangoes oranges Exception in thread "main" java.util.NoSuchElementException at java.util.ArrayList$Itr.next(Unknown Source) at MyPackage.NextElementExample.main(NextElementExample.java:19)
import java.util.ArrayList; import java.util.ListIterator; public class NextElementExample{ public static void main(String args[]) { //实例化ArrayList对象 ArrayList<String> list = new ArrayList<String>(); //填充ArrayList list.add("apples"); list.add("mangoes"); list.add("oranges"); //获取ArrayList的Iterator对象 ListIterator<String> it = list.listIterator(); it.next(); it.next(); it.next(); System.out.println(it.previous()); System.out.println(it.previous()); System.out.println(it.previous()); System.out.println(it.previous()); } }
输出结果
oranges mangoes apples Exception in thread "main" java.util.NoSuchElementException at java.util.ArrayList$ListItr.previous(Unknown Source) at MyPackage.NextElementExample.main(NextElementExample.java:22)