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());这个语句了。
你的程序中的语句在一些特殊情况下会抛出例外。例如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());这个语句了。
你的程序是没有抛出异常,但是是可能抛出异常的。就象try...catch...一样,写了try...catch...并不代表你的程序就一定有异常,只是在没有异常的情况下执行try的语句,在有异常的情况下执行catch的语句。同哩,当你使用throws语句时,也并不代表你的程序一定抛出异常。在没有异常的情况下程序会顺利的执行,在有异常的情况下才有执行throws这个动作,将出现的异常抛出,这个时候就不会出现你想输出的结果了。