在方法的声明中,在方法的名称和参数列表后的如果有throws  xxxException语句。
是不是在该方法体内一定要有throw xxxException语句。
例如:DriverManager类的getConnection()方法。其声明为:
public static Connection getConnection(String url)throws SQLException
是不是在该方法体内一定有throw SQLException
这条语句。

解决方案 »

  1.   

    不需得.方法体内不需要有throw SQLException了,
    那个代码得意思就是:我的方法内得代码可能在执行得时候抛出这个异常,这个异常我方法不处理.抛给上层处理.
      

  2.   

    不需要啊!throws SQLException 这个是将你方法体中的异常向外边抛!
    如果你方法体后边有throws SQLException 
    说明你方法里边有要处理的异常!
    下边2种情况如果有一个存在的话方法后边都可以写throws SQLException 
    1:比如你定义数据库连接呀,定义文件就会有异常抛出!
    2:throw SQLException  这句是表示你手动抛出异常~!如果方法里边2种情况都没的话你写throws SQLException 编译器就会抱错
      

  3.   

    发表于:2007-10-24 14:23:556楼 得分:0
    不需得.方法体内不需要有throw SQLException了,
    那个代码得意思就是:我的方法内得代码可能在执行得时候抛出这个异常,这个异常我方法不处理.抛给上层处理.---------------你这算是间接需要。总之是需要。当然,如果你的内部什么异常都没有,就是想在方法上抛个异常玩,也可以。就如同我上面说的。
      

  4.   

    除非要抛另外不同方法体定义时声明的异常才需要在方法体内另外定义,如果是同一种异常,没必要弄两次吧。例如,public static Connection getConnection(String url)throws SQLException ,方法体定义的时候已经声明了抛SQL异常,如果在方法处理过程中需要抛IO异常的话,那就需要在方法体内抛出IO异常了;如果都是抛SQL异常,就没必要重新声明了。
      

  5.   

    我做了一个自定义异常的一个例子:
    类MyException2
    package three;public class MyException2 extends Exception{
    private int x;
    public MyException2(){}
    public MyException2(String msg){super(msg);}
    public MyException2(String msg,int x){
    super(msg);
    this.x=x;
    }
    public int val()
    {
    return x;
    }
    }类ExtraFeatures:
    package three;public class ExtraFeatures {
    public static void f() throws MyException2{
    System.out.println("Throwing MyException2 from f()");
    throw new MyException2();
    }
    public static void g() throws MyException2{
    System.out.println("Throwing MyException2 from g()");
    throw new MyException2("Originated in g()");
    }
    public static void h() throws MyException2{
    System.out.println("Throwing MyException2 from h()");
        throw new MyException2("Originated in h()",47);
    }
    public static void main(String[] args){
    try{
    f();
    }catch(MyException2 e){
    e.printStackTrace();
    }
    try{
    g();
    }catch(MyException2 e){
    e.printStackTrace();
    }
    try{
    h();
    }catch(MyException2 e){
    e.printStackTrace();
    System.out.println("e.val()="+e.val());
    }
    }
    }执行类ExtraFeatures的时候,结果为:
    Throwing MyException2 from f()
    Throwing MyException2 from g()
    Throwing MyException2 from h()
    e.val()=47
    three.MyException2: Detail Message:0 null
    at three.ExtraFeatures.f(ExtraFeatures.java:6)
    at three.ExtraFeatures.main(ExtraFeatures.java:18)
    three.MyException2: Detail Message:0 Originated in g()
    at three.ExtraFeatures.g(ExtraFeatures.java:10)
    at three.ExtraFeatures.main(ExtraFeatures.java:23)
    three.MyException2: Detail Message:47 Originated in h()
    at three.ExtraFeatures.h(ExtraFeatures.java:14)
    at three.ExtraFeatures.main(ExtraFeatures.java:28)
    为什么在ExtraFeatures中
    throws MyException2和throw new MyException2两个缺少一个就错误。
      

  6.   

    可能大家误会我的意思了,我想请教的是:    在方法的声明中,在方法的名称和参数列表后的如果有throws  xxxException语句。 
    是不是在该方法体内一定要有throw xxxException语句。 
    例如:java.sql.*包的DriverManager类有getConnection()方法。
    也就是一定要这样写:
    public static Connection getConnection(String url)throws SQLException 
    {
     .
     .
     .
     throw SQLException;
    }