void doRead() throws IOException{//这里的throws 表示该方法可能会抛出异常,
int c = System.in.read();
}
也就是说System.in.read()方法可能会有异常发生,但是你并不想再这里对出现的异常作处理,因为你希望通过抛出异常通知上层有错误,所以再 调用doRead()方法的时候 需要对throws 的异常进行try catch 来进行对异常的错误处理,例子中是打印出来。throw 的语法 是可以 手工抛出异常 比如 在System.in.read()方法里面有可能会在某些错误的情况下throw new IOException();
int c = System.in.read();
}
也就是说System.in.read()方法可能会有异常发生,但是你并不想再这里对出现的异常作处理,因为你希望通过抛出异常通知上层有错误,所以再 调用doRead()方法的时候 需要对throws 的异常进行try catch 来进行对异常的错误处理,例子中是打印出来。throw 的语法 是可以 手工抛出异常 比如 在System.in.read()方法里面有可能会在某些错误的情况下throw new IOException();
int c = System.in.read()
出现错误后。系统还是继续执行void doRead()中剩下的语句(尽管后面没有语句了),执行完doRead()这个方法之后才执行catch中的语句???而如果不是throws方式。如果int c = System.in.read()出现异常,系统就立即执行catch的语句,而不管int c = System.in.read()之后的语句(假如后面还有),也就是不用把doRead()这个方法执行完之后才执行catch?????
所以要用try catch来处理,但是如果你不想在这里处理,你可以让void doRead()通过throws抛出异常由上层调用来处理。即
try {
doRead();
}
catch (IOException e){
System.out.println(e.getMessage());
}
你的理解有误,即使是throws语句,也是遇到错误以后立即就离开,后门的语句不执行,这个异常,它自己申明了不捕获,而叫给调用它的函数来捕获,在调用函数执行到这一部的时候,就会调到catch中捕获异常鳓。 这里的区别就是把异常自己来出来还是给别人处理的差别。
所以要用try catch来处理,但是如果你不想在这里处理,你可以让void doRead()通过throws抛出异常由上层调用来处理。即
try {
doRead();
}
catch (IOException e){
System.out.println(e.getMessage());
}
在int c = System.in.read();出现异常时,doRead();会抛出异常,由catch块来处理