throws是java的错误处理机制的一部分。java是用Exception(例外)来做错误处理机制的。
你的程序中的语句在一些特殊情况下会抛出例外。例如Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");这一句,当JVM寻找不到sun.jdbc.odbc.JdbcOdbcDriver这个类时,它就会抛出一个ClassNotFoundException的例外到你的程序中(准确的说是main方法中),你的程序对于这个例外有两种处理方法:第一,用try...catch...语句将这个例外捕获;第二向main方法的调用者抛出这个例外,让它来处理这个例外,throws语言就是用了抛出例外的。所以你的程序要用到throws这个关机字。当然,你可以试用try...catch...语句,就象这样:
import java.sql.*;
import java.io.*;
public class data
{
public static void main(String[] args)
{
try
{
                  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");    
                           Connection cn = DriverManager.getConnection ("jdbc:odbc:javadb", "", "");
                  Statement st = cn.createStatement();
                           ResultSet rs = st.executeQuery("SELECT name FROM Table1");
         while (rs.next())
         {
        String s = rs.getString("name");
        System.out.println(s);
          }
        }
        catch(SQLException e1)
        {
         System.out.println(e1.toString());
        }
        catch(ClassNotFoundException e2)
        {
         System.out.println(e2.toString());
        }
        }
}
这样,当JVM找不到sun.jdbc.odbc.JdbcOdbcDriver类而抛出ClassNotFoundException例外的时候就会被catch(ClassNotFoundException e2)捕获,而继续执行System.out.println(e2.toString());这个语句了。

解决方案 »

  1.   

    但是如果我加上throws SQLException,ClassNotFoundException程序就能运行正常,就说明我的程序是没有抛出异常的,如果抛出异常,那程序肯定是不能出结果的,是不是?就象TRY CATCH 一样,如果不出错就不会被CATCH捕获到,我已经非常明白TRY CATCH,但THROWS一直是不太明白
      

  2.   

    throws 可以作为方法声明的一部分,目的是告诉使用者调用这个方法的时候可能会产生异常,以便于使用者捕捉异常并进行处理。java的编译器对这个规则进行强制性检查,如果使用了throws声明的方法而没有使用try ..catch机制捕捉异常的话就会提示出错。在你的程序中的几个方法比如Class.forName()都是怠throws声明的。楼主那样处理编译是可以通过了,但是你的代码并没有对异常进行处理而是有jre来处理了。正确的处理 alphafish(alphafish)已经说了,就不多说了。
      

  3.   

    简单的说: throws是提醒别人“调用我这个方法可能会产生某某某意外的情况,请你捕捉这个意外并进行处理”。try catch结构则是对可能有意外发生的代码进行“监控”并进行处理。
      

  4.   

    to duan17(Swing) :
      你的程序是没有抛出异常,但是是可能抛出异常的。就象try...catch...一样,写了try...catch...并不代表你的程序就一定有异常,只是在没有异常的情况下执行try的语句,在有异常的情况下执行catch的语句。同哩,当你使用throws语句时,也并不代表你的程序一定抛出异常。在没有异常的情况下程序会顺利的执行,在有异常的情况下才有执行throws这个动作,将出现的异常抛出,这个时候就不会出现你想输出的结果了。
      

  5.   

    今天装了eclipse,看了它的提示,才搞明白了,原来这是JAVA的规则,和.NET是不太一样,在.NET里如果一段可能出现异常是可以不加TRY CATCH的多谢各位