try .... catch 就是用catch 捕获 try 中的异常,并处理;
throw 就是不处理异常,直接抛出异常,由调用此方法的地方处理抛出的异常。

解决方案 »

  1.   

    那 if(...)
       throw
    和 try{ }
       catch
    不是一回事吗?
      

  2.   

    catch是捕获异常。也就是说某一个操作有可能会抛出什么异常。
    而throw 就是抛出一个异常。
      

  3.   

    调用一个会throws exception的方法(在方法定义的时候可以用throws实现)时,需要把这个方法放在try里,然后用catch破获这个exception,做相应的处理。
    throw new exception()是抛出一个exception,由别的method来破获它。也就是说try....catch是为破获别人的exception用的,而throw是自己抛出exception让别人去破获的。
      

  4.   

    up!!!
    public void input() throws Exception
    {  }
    public void outputException()
    {
      try { input();}
      catch(Exception e)
      { System.out.println("Exception"); }
    }
    如果input()出现异常,在input()中不处理,在outputException()中处理
      

  5.   

    感谢大家说了这么多,我搜索了论坛里有关这方面的内容,也看了书上的论述。
    可还是不太明白,
    到底写在方法名后面的 throws和写在方法里面的try{} catch{}有什么区别啊
    我也不知道什么时候要在方法名后写上throws
      

  6.   

    如果你在方法名后面throws了异常,那么你在方法体中可以不用try,catch语句把可能抛出异常的语句{}起来,try,catch可以让你进行异常处理,比如你在抛出异常之后由自己去打印自己的信息,并可以进行其他的出来,但是如果你不用try,catch语句的话,则由系统来处理啦。
      

  7.   

    先看如下的代码:
    1.
     public void getconnect() throws Exception //抛出的异常 
     {
       throws new exception();
     }
    2.
     如果在调用这个方法的时候就必须用
      try{ 
           getconnect()
         }catch(Exception e)
         {
          //出现异常DO ANYTHING
         }
    在第一中情况中的throws new exception可以跟任何的信息,这样就可以把在CATCH是获得的信息转化为自己定义的信息,但是缺点就是在你捕获的时候可
    能会落掉一些更详细的错误、异常的信息
      

  8.   

    那为什么我下面这段代码,我已经在方法里面写了try{} catch{}
    但还是不行,编译出错,必须在方法名后面加入 throws SQLException才行
    public void executeInsert(String sql)
     // throws SQLException
      {
       try
        {
         //conn = DriverManager.getConnection("jdbc:mysql://192.168.100.1:3306/test?, "test", "test");
         conn.setAutoCommit(false);
         stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
         stmt.executeUpdate(sql);
         conn.commit();
        }
        catch(SQLException ex)
         {ex.printStackTrace(System.err);
          conn.rollback();}
        finally
         {
          stmt.close();
          conn.close();
         }
      }
      

  9.   

    简单的说,如果一个方法中用了throw,那么这个方法会向上抛出一个异常,那么在调用这个方法的时候必须把这个调用放在try...catch块里处理这个异常。
      

  10.   

    try...catch 是捕获异常的,而throws是抛出异常的
      

  11.   

    谢谢! redkey(谁与比笨) 
    如果我不写throws,
    try...catch到哪里去捕获异常呢?异常如何被抛出呢?
      

  12.   

    try...catch就是自己处理异常,外人无需知道。
    throws就是抛出异常给别人处理。
      

  13.   

    很简单的东西,你可以定义你自己的异常,然后用throws抛出多个异常,当然也可以抛出系统定义的异常;而try-catch块则在调用一个抛出了异常的方法是使用,就是如果一个方法抛出了至少一个的异常,你在调用该方法时,就必须用try-catch块捕获所有抛出的异常;而throw则是指定抛出一个特定的异常。
      

  14.   

    可能是那位小兄弟的finally块中的两条语句会抛出异常
    小兄弟,请把它放在
          stmt.close();
          conn.close();
          catch(SQLException ex){}中试试
    对于异常有两种处理方法
    1、要么声明异常,也就是在方法名后面加上throws exceptionname,...,
       方法本身只是抛出异常,由函数调用者来捕获异常。
       若产生异常,异常会沿着调用栈下移,一直找到与之匹配的处理方法,若到达调用栈底仍未找到,程序终止。
    2、要么捕获异常。通过try catch方法,catch子句中放置处理异常的语句。
        
    你可以选择声明异常而不去捕获它,那样交给调用者来处理异常;
    也可以选择捕获异常,捕获try块中可能产生的异常。那位小兄弟,在方法后加了throws就可以了。
    实际上你是声明异常,当其他方法调用你所定义的executeInsert()方法时,必须有其中一个方法(调用栈中)来捕获它。你的代码中肯定还有可能产生异常的语句没有全部放到try{}块中,既然你打算在executeInsert()方法中处理异常,那么就不要再往更大的context传递了。        
      

  15.   

    谢谢!caiweihe(行者双) 
       请问什么是:“再往更大的context传递了。”