exception处理:抛出,抛出和Throwable

你们能解释throwthrowsThrowable之间的区别和什么时候使用哪一个?

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

    与检查exception相反,可能会抛出运行时exception(NullPointerExceptions等),而不会导致方法声明throws NullPointerException

  • throw :抛出exception的指令。 (或更具体地说, Throwable )。

    throw关键字后面跟Throwable的引用(通常是一个exception)。

例:

在这里输入图像描述


  • Throwable :一个你必须扩展的类来创build你自己的,自定义的,可抛出的。

例:

在这里输入图像描述


  • 官方的exception教程
  • throw :语句抛出对象t其中, t instanceof java.lang.Throwable必须为true。
  • throws :一个方法签名标记来指定检查的exceptionthrow n该方法。
  • java.lang.Throwable :可以引发(并捕获)的所有对象的父types。

请参阅这里了解使用exception的教程。

这真的很容易理解。

java.lang.Throwable

Throwable类是Java语言中所有错误和exception的超类。 只有该类(或其某个子类)的实例的对象由Java虚拟机抛出,或者可以由Java throw语句throw 。 同样,只有这个类或其中的一个子类可以是catch子句中的参数types。 更多

关键字抛出在方法声明中使用,这指定了什么样的exception[Throwable类]我们可以期望从这个方法。

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


以免看到一些例子:

我们创build一个例外类

 public class MyException super Exception { } 

我们创build一个方法,从我们的exception类创build一个对象,并使用关键字抛出

 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()方法的throwMeAException() ,我们不得不以特定的方式来处理它,因为我们有它抛出的东西的信息,在这种情况下,我们有三个选项。

第一个选项是使用块try和catch处理exception:

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

第二个select是通过例外

  private void passException() throws MyException { throwMeAException(); // we call the method but as we throws same exception we don't need try catch block. } 

第三种select是捕捉并重新抛出exception

 private void catchException() throws Exception { try { throwMeAException(); } catch(Exception e) { throw e; } } 

恢复,当你需要停止一些行动,你可以抛出exception,将返回,直到不是服务器通过一些try-catch块。 无论何处使用引发exception的方法您应该通过try-catch块来处理它,或者将声明添加到方法中。

这个规则的例外是不需要声明的java.lang.RuntimeException 。 这是exception使用方面的另一个故事。

throw – 用于抛出Exception。throw语句需要一个参数:一个可抛出的类对象

抛出 – 这是用来指定该方法可以抛出exception

Throwable – 这是Java语言中所有错误和exception的超类。 您只能抛出从Throwable类派生的对象。 throwable在创build时包含线程执行堆栈的快照

Throw用于抛出exception, throws (如果我正确猜测)用来表示该方法可以抛出特定的exception,而Throwable类是Java中所有错误和exception的超类

如何抛出exception

投掷:

用于实际抛出exception,而抛出对于方法是声明式的。 它们不可互换。

 throw new MyException("Exception!); 

抛出:

当你在你的代码中没有使用try catch语句,但是你知道这个特殊的类能够引发exception(只检查exception)时,就可以使用它。 在这里你不使用try catch块,而是在你的代码中的适当的位置使用throw子句来写,exception被抛出到方法的调用者,并由它来处理。 当函数可能抛出一个检查的exception时,也会使用throws关键字。

 public void myMethod(int param) throws MyException 

Throwable :在Java中,所有错误和Execute类都从java.lang.Throwable类中消失。 它是错误和exception类的层次结构的顶部。 只有该类(或其某个子类)的实例的对象由Java虚拟机抛出,或者可以由Java throw语句抛出。

Throws:是一个post-method修饰符,并指定该方法可能抛出哪些可执行文件。 如果他们是检查exception,编译器将保证调用该方法的代码必须捕获这些检查的exception。

Throw:语句用于抛出一个错误或exception。 throw语句需要一个参数:Throwable类或Throwable类的任何子类的实例。 执行throw语句会触发JVM抛出这个exception并导致发生exception。

列出几个…

  1. Java throw关键字用于显式throwexception。
  2. 检查exception无法使用仅传播进行传播。
  3. Throw后面是一个实例。
  4. Throw在方法内使用。
  5. 你不能throw多个exception。

抛出

  1. Java throws关键字用于声明exception。
  2. 检查的exception可以通过throws传播。
  3. Throws之后是类。
  4. Throws与方法签名一起使用。
  5. 你可以声明多个exception, 例如 public void method()throws IOException,SQLException

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

 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; } }