void doRead() throws IOException{//这里的throws 表示该方法可能会抛出异常,
  int c = System.in.read();
}
也就是说System.in.read()方法可能会有异常发生,但是你并不想再这里对出现的异常作处理,因为你希望通过抛出异常通知上层有错误,所以再 调用doRead()方法的时候 需要对throws 的异常进行try catch 来进行对异常的错误处理,例子中是打印出来。throw 的语法 是可以 手工抛出异常 比如 在System.in.read()方法里面有可能会在某些错误的情况下throw new IOException();

解决方案 »

  1.   

    是不是说,如果throws中的
    int c = System.in.read()
    出现错误后。系统还是继续执行void doRead()中剩下的语句(尽管后面没有语句了),执行完doRead()这个方法之后才执行catch中的语句???而如果不是throws方式。如果int c = System.in.read()出现异常,系统就立即执行catch的语句,而不管int c = System.in.read()之后的语句(假如后面还有),也就是不用把doRead()这个方法执行完之后才执行catch?????
      

  2.   

    因为 int c = System.in.read();可能会抛出异常
    所以要用try catch来处理,但是如果你不想在这里处理,你可以让void doRead()通过throws抛出异常由上层调用来处理。即
    try {
      doRead();
    }
    catch (IOException e){
      System.out.println(e.getMessage());
    }
      

  3.   

    to 楼主:
      你的理解有误,即使是throws语句,也是遇到错误以后立即就离开,后门的语句不执行,这个异常,它自己申明了不捕获,而叫给调用它的函数来捕获,在调用函数执行到这一部的时候,就会调到catch中捕获异常鳓。 这里的区别就是把异常自己来出来还是给别人处理的差别。
      

  4.   

    因为 int c = System.in.read();可能会抛出异常
    所以要用try catch来处理,但是如果你不想在这里处理,你可以让void doRead()通过throws抛出异常由上层调用来处理。即
    try {
      doRead();
    }
    catch (IOException e){
      System.out.println(e.getMessage());
    }
    在int c = System.in.read();出现异常时,doRead();会抛出异常,由catch块来处理