楼主理解反了
如果没有声明抛出, 这时候才会强制try 和 catch, 一旦方法已经声明, 那么代码中就不必要加try了如
    public void abc() throws IOException //可以编译通过
     {
           BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
           String s = input.readLine(); 
     }  而
    public void abc()
     {
           BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
           String b = input.readLine();  // complie error, 要加 try - catch
     }

解决方案 »

  1.   

    throws 相当于名词,跟在方法名后;try/catch 相当于动词,在方法内部;对于异常的处理,两者取其一即可;
      

  2.   

    java.lang.RuntimeException
    |_java.lang.IllegalArgumentException
      |_java.lang.NumberFormatException
    RunTimException及其子类无需捕捉.
      

  3.   

    如Saro(三生)所说,NumberFormatException是运行时异常,只有new Integer(arg)在运行之后
    才能知道是否抛出异常。>>为什么编译器不强制new Integer("s")要f写在try和catch里面
    如果真有某个编译器进行了这样的强制,那么这个编译器也太苦了,
    什么都要编译器来做是不可能的。要让编译器进行这样的强制,得给出具体的规则,当编译器发现代码违反了
    规则的时候才能要求其写在try catch之间。但是这个规则能不能给出?怎么给出?
    给出之后的规则对于编译器来说是否合理?是否是一个编译器应该做的事情?
    至少我觉得很难给出规则,即使能给出这样的规则,也不合理,也不应该由编译器来执行
    这个规则的检验,否则,天!宇宙浑浊起来。一般来说编译器的作用只是根据某一语法规则把某一段源代码转成中间码或目标码。
    当然也许有些编译器会顺带检查一些逻辑错误(如是否会有无限循环,是否有内存泄漏等等),
    但是这个不是编译器的主要功能。
      

  4.   

    Saro(三生) 说的对,RunTimException及其子类无需捕捉
      

  5.   

    http://dev.csdn.net/Develop/article/26/article/25/25082.shtm