1
public void init(Config config)throws IOException{
    XXXXXX
}2
public void init(Config config){
   try{    
      XXXXXX
   }catch(IOException){
   }
}原理上有什么不同?

解决方案 »

  1.   


    public   void   init(Config   config)throws   IOException{ 
            XXXXXX 

    该方法声明一个异常,表该方法有可能出现的异常
    如果要使用该方法,必须放到try块内,或继续声明一个异常来传递该异常例:
    public void init1()throws IOException{
      xxx.init(config);
    }

    public void init1(){
      try{
        xxx.init(config);
      }catch(IOException e){
      }
    }
    ---------------------------------------------------------

    public   void   init(Config   config){ 
          try{         
                XXXXXX 
          }catch(IOException){ 
          } 

    try块内出现异常,则执行catch块内语句
    其他方法调用该方法不用声明异常
      

  2.   

    结合楼上二位的,我了解了,大概是这个意思,当用一些基础类的时候,有些类编译器要求必须要catch异常,你可以做两种操作:
    1、写try\catch捕捉它,处理
    2、暂时不理它,把其throw掉,如果将来有方法调用这个方法的话你可以在那个方法里再捕捉,或者选择继续扔掉,就这样一直扔下去最终会扔到main()函数里,或者系统的某个地方(比如上文初始化函数在对象创建的时候被调用),对象创建可能是由虚拟机或者中间件运行时完成的,那么如果一直不catch的话最终由虚拟机或者中间件完成,反正一个有可能出现异常的方法,早晚要被catch的。
      

  3.   

    那么什么样方法应该用throws IOException,我觉得应该在一类异常处理可能终结的时候。比如
    public void test1(){
      try{
         XXX
      }catch(IOException){  }
    }public void test2(){
      test1();
      try{
         YYY
      }catch(IOException){  }
    }在上面情况下两个相互调用的方法都用了IOException,那么完全可以把第一个方法的IOException throw到第二个方法里一起catch。public void test1()Throw IOException{
      try{
         XXX
      }catch(IOException){  }
    }public void test2(){
      
      try{
         test1();
         YYY
      }catch(IOException){  }
    }
    每次异常只在终端方法里catch一次,而如果还有一个方法test3()调用了test2而里面没有其他需要捕获的异常,那么完全没有必要把异常throw到test3()里
      

  4.   

    throws IOException 这种写法,是说明抛出异常的返回类型 ,可能回抛出这种异常
    catch(IOException i)抛出异常,捕获异常对象的信息
      

  5.   

    同意五楼的 
    推荐楼主去看看 CORE JAVA 里的异常处理那一章
      

  6.   

    比如说用struts的话,在action中写的代码应该用第二种方式,适当地处理并返回给客户友好的信息。
    action调用的方法就可以用第一种方式。
      

  7.   

    主角是Exception 针对它有很多动作1.throws
    是方法抛出 是第三人称 所以用单数
    声明块内(方法域内)可能会抛出的异常,抛给调用此方法的主体2.try catch
    确定对象后尝试捕捉,捕捉到后进行处理还有个题外话:throw
    是程序操作者主动抛出 第一人称 所以不加s
    throw new Exception();
      

  8.   

    如果用:public   void   init(Config   config)throws   IOException{ 
            XXXXXX 
    } 就必须在调用时用try{}catch捕捉,否则就会抛给java虚拟机,程序不能运行。如果用:public   void   init(Config   config){ 
          try{         
                XXXXXX 
          }catch(IOException){ 
          } 
    }就不会出现上面的情况了。
    我也不知道对不对,着是我自己对它的理解。 
      

  9.   

    可不可以这样理解
    public       void       init(Config       config)throws       IOException{   
                    XXXXXX   

    这样写的话,必然在某个调用该方法的地方有catch处理, init方法不做catch处理。
      

  10.   

    关于,throw和throws,不应理解为第一人称和第三人称。throws XXXException是方法声明的一部分,方法声明相当于一个陈述句,陈述当前方法有“抛出异常”这个特性,以提醒调用者做相应的处理,时态上用一般现在时表示这是一个惯常动作,所以是throws。throw new XXXException();是一个过程语句。过程语句都是命令,是祈使句,命令jvm做某事,所以用throw。任何过程语句都可以理解为祈使句,如do...while...中的do就是一个祈使命令,和这里的throw情形类似。