异常处理:抛出,抛出和Throwable

时间:2010-10-15 07:18:09

标签: java exception-handling throw throws throwable

你们是否可以解释throwthrowsThrowable之间的差异以及何时使用哪些?

8 个答案:

答案 0 :(得分:84)

  • throws:在编写方法时使用,声明有问题的方法抛出指定的(已检查)异常。

    与已检查的异常相反,如果没有方法声明throws NullPointerException,则可能抛出运行时异常(NullPointerExceptions等)。

  • throw:实际抛出异常的说明。 (或者更具体地说, Throwable )。

    throw关键字之后是对Throwable的引用(通常是例外)。

示例:

enter image description here


  • Throwable:您必须扩展的类才能创建自己的,自定义的,可抛出的。

示例:

enter image description here


答案 1 :(得分:9)

  • throw:抛出对象t的语句,t instanceof java.lang.Throwable必须为真。
  • throws:一种方法签名令牌,用于通过该方法指定已检查的异常throw n。
  • java.lang.Throwable:可以抛出(并捕获)的所有对象的父类型。

See here for a tutorial on using exceptions.

答案 2 :(得分:5)

这真的很容易理解。

java.lang.Throwable

  

Throwable类是   所有错误的超类和   Java语言中的异常。只要   作为此实例的对象   class(或其子类之一)是   由Java虚拟机抛出或   可以被Java抛出   throw声明。   同样,只有这个类或其中之一   它的子类可以是参数   输入catch子句。   More

关键字 throws 用于方法声明,这指定了我们可以从这个方法中得到的异常类[Throwable class]。

关键字 throw 用于抛出一个Throwable类实例的对象。


以免看到一些例子:

我们创建了自己的异常类

public class MyException super Exception {

}

我们创建了一个从异常类创建对象的方法,使用关键字 throw 抛出

private  void throwMeAException() throws MyException //We inform that this method throws an exception of MyException class
{
  Exception e = new MyException (); //We create an exception 

  if(true) {
    throw e; //We throw an exception 
  } 
}

当我们要使用方法throwMeAException()时,我们被迫以特定的方式处理它,因为我们有它抛出的信息,在这种情况下我们有三个选项。

第一个选项是使用块try和catch来处理异常:

private void catchException() {

   try {
     throwMeAException();
   }
   catch(MyException e) {
     // Here we can serve only those exception that are instance of MyException
   }
}

第二个选项是传递异常

   private void passException() throws MyException {

       throwMeAException(); // we call the method but as we throws same exception we don't need try catch block.

   }

第三个选项是捕获并重新抛出异常

private void catchException() throws Exception  {

   try {
     throwMeAException();
   }
   catch(Exception e) {
      throw e;
   }
}

恢复,当你需要停止一些动作时,你可以抛出异常,直到某个try-catch块不再是服务器。无论何时使用抛出异常的方法您都应该通过try-catch块处理它或将声明添加到您的方法中。

此规则的例外情况是java.lang.RuntimeException,不必声明这些规则。这是异常使用方面的另一个故事。

答案 3 :(得分:2)

throw - 用于抛出异常.sturn语句需要一个参数:一个可抛出的类对象

throws - 用于指定该方法可以抛出异常

Throwable - 这是Java语言中所有错误和异常的超类。你只能抛出从Throwable类派生的对象。 throwable包含其创建时线程执行堆栈的快照

答案 4 :(得分:1)

Throw用于抛出异常,throws(如果我猜错了)用于表示该方法可以抛出特定异常,Throwable类是所有错误的超类和Java中的例外

How to Throw Exceptions

答案 5 :(得分:1)

投掷:

用于实际抛出异常,而throws是该方法的声明。它们不可互换。

throw new MyException("Exception!);

<强>抛出:

当您在代码中没有使用try catch语句但是您知道此特定类能够抛出异常(仅检查异常)时,可以使用此方法。在这里你不使用try catch块,而是在代码中的适当位置使用throw子句写入,并且异常被抛出给方法的调用者并由它处理。当函数可能抛出一个已检查的异常时,也会使用throws关键字。

public void myMethod(int param) throws MyException 

答案 6 :(得分:0)

有两种主要类型的例外:
运行时异常(未选中):例如。 NullPointerException,ClassCastException,..
已检查的例外:例如。 FileNotFoundException,CloneNotSupportedException,..

运行时异常是在运行时发生的异常,开发人员不应尝试捕获或停止它。只有在满足错误条件时,您才会编写代码来避免它们或发出命令 throw 。我们在方法体内使用throw。

public Rational(int num, int denom){
if(denom <= 0) {
  throw new IllegalArgumentException("Denominator must be positive");
}
this.num=num;
this.denom=denom;
}

但是对于Checked Exceptions,JVM希望您处理它并且如果不处理则会给编译器错误,因此您声明它会抛出该类型的异常,如下面的clone()方法所示。

Class Employee{
public Employee clone() throws CloneNotSupportedException{
    Employee copy = (Employee)super.clone();
    copy.hireDate = (Date)hireDate.clone();
    return copy;
}
}

答案 7 :(得分:-1)

与上述答案相同,但复制粘贴乐趣

public class GsonBuilderHelper {
    // THROWS: method throws the specified (checked) exception
    public static Object registerAndRun(String json) throws Exception {

        // registering of the NaturalDeserializer
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.registerTypeAdapter(Object.class, new NaturalDeserializer());
        Gson gson = gsonBuilder.create();

        Object natural = null;
        try {
            // calling the NaturalDeserializer
            natural = gson.fromJson(json, Object.class);
        } catch (Exception e) {
            // json formatting exception mainly
            Log.d("GsonBuilderHelper", "registerAndRun(json) error: " + e.toString());
            throw new Exception(e);  // <---- THROW: instance of class Throwable. 
        }
        return natural;
    }
}