exception处理:抛出,抛出和Throwable
你们能解释throw
, throws
和Throwable
之间的区别和什么时候使用哪一个?
-
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虚拟机抛出,或者可以由Javathrow
语句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。
列出几个…
扔
- Java
throw
关键字用于显式throw
exception。 - 检查exception无法使用仅传播进行传播。
-
Throw
后面是一个实例。 -
Throw
在方法内使用。 - 你不能
throw
多个exception。
抛出
- Java
throws
关键字用于声明exception。 - 检查的exception可以通过
throws
传播。 -
Throws
之后是类。 -
Throws
与方法签名一起使用。 - 你可以声明多个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; } }