try{
output.format("%d %s %s %.2f%n", input.nextInt(),
input.next(),input.next(),input.nextDouble());
} catch(FormatterClosedException formatterClosedException){
System.err.println("Error writing to file. Terminating.");
break;
} catch(NoSuchElementException noSuchElementException){
System.err.println("Invalid input. Please try again.");
input.nextLine();
}
format(String format, Object... args)
课程中的方法Formatter
会抛出两个exception
:IllegalFormatException
和FormatterClosedException
,但在我的书中,上面的代码会捕获NoSuchElementException
和FormatterClosedException
。
NoSuchElementException
但没有捕获IllegalFormatException
? NoSuchElementException
,我们怎么知道是否需要捕获{{1}}?答案 0 :(得分:1)
Document:
java.util.NoSuchElementException
是RuntimeException
,可以是 由Java中的不同类引发,如Iterator,Enumerator, Scanner 或StringTokenizer。
在您的情况下,它是Scanner
。它不是来自format
方法。
它只是为了更安全一面(如果没有给出下一个输入,则抛出此异常)。
显示演示的示例代码
public class NoSuchElementExceptionDemo{
public static void main(String args[]) {
Hashtable sampleMap = new Hashtable();
Enumeration enumeration = sampleMap.elements();
enumeration.nextElement(); //java.util.NoSuchElementExcepiton here because enumeration is empty
}
}
Output:
Exception in thread "main" java.util.NoSuchElementException: Hashtable Enumerator
at java.util.Hashtable$EmptyEnumerator.nextElement(Hashtable.java:1084)
at test.ExceptionTest.main(NoSuchElementExceptionDemo.java:23)
答案 1 :(得分:0)
在Java中,异常用于标记意外情况。例如,将非数字String
解析为数字(NumberFormatException
)或在null
引用(NullPointerException
)上调用方法。你可以通过多种方式捕捉它们。
try{
//some code
} catch (FormatterClosedException e1) {
e.printStackTrace() //very important - handles the Exception but prints the information!
} catch (NoSuchElementException e2) {
e.printStackTrace();
}
或使用这一事实,他们都扩展Exception
:
try {
//somecode
} catch (Exception e) {
e.printStackTrace;
};
或者自Java 7以来:
try {
//somecode
} catch (FormatterClosedException | NoSuchElementExceptione) {
e.printStackTrace;
};
你必须抓住所有checked exceptions
。这是由于语言语法。另一方面,unchecked exceptions
并不一定需要被抓住。
IllegalArgumentException
是未经检查的例外,因此无需捕获。
NoSuchInputException
可以抛出input.next()
。这就是为什么它被宣告被抓住了。
所以:
Exception
。 input.next()
可以throw NoSuchElementException
format
可以throw FormatterClosedException
答案 2 :(得分:-1)
使用$("input[name='hello']").click(function(){
var v=$("input[name='hello']:checked").val();
alert("you clicked on"+v);
});
类添加另一个catch
。那是父类。
Exception
您可以为代码抛出的每个catch(Exception e){
//your message or
System.out.print(e.getMessage());
}
添加catch
,最后使用此Exception父类添加此catch。如果exception
没有被exception
抓住,那么这将抓住您的例外。
它将捕获您的程序引发的所有异常。