你们能解释什么是throw
,throws
和Throwable
之间的差异以及何时使用哪个?异常处理:抛出,抛出和抛出
回答
throws
:编写方法时,用于申报有问题的方法抛出指定的(检查)异常。与检查异常相反,可能会抛出运行时异常(NullPointerExceptions等),而无需声明方法声明
throws NullPointerException
。throw
:指示实际抛出异常。 (或者更具体地说,Throwable)。该throw关键字后面跟着一个
Throwable
(通常是一个例外)的引用。
例子:
Throwable
:你必须为了创建自己的,定制的,抛出扩展类。
例子:
Throw
用于抛出异常,throws
(如果我猜对了),用来表示该方法可以抛出特定的异常,而Throwable
类是所有错误和异常的在Java
掷 - 它是用来抛出Exception.The throw语句需要一个参数:可抛出类对象
抛出 - 这是用来指定方法可以抛出异常
Throwable - 这是Java语言中所有错误和异常的超类。您只能抛出从Throwable类派生的对象。抛出包含在其创建
throw
时间的线程的执行堆栈的快照:声明抛出对象t
其中t instanceof java.lang.Throwable
必须是真实的。throws
:通过该方法指定检查异常的方法签名令牌throw
。java.lang.Throwable
:可以引发(并捕获)的所有对象的父类型。
+1为胶囊答案。 – 0x6900 2014-10-13 09:33:02
这很容易理解。
的java.lang.Throwable的:
的
Throwable
类是 所有错误,并在Java语言 异常的超类。只有 对象是此类 类(或其某个子类)的实例为 的Java虚拟机或 可引发的Javathrow
语句。 类似地,只有这个类或其中的一个 其子类可以是catch
子句中的参数 类型。 More
的关键词抛出在方法声明中使用,这说明什么样的异常[Throwable的类]我们可能期望从这一方法。
关键词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()
,我们不得不照顾它在特定的方式,因为我们有它抛出的东西,在这种情况下,我们有三个选择的信息。
第一种选择:
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
那些不需要声明。这是异常使用方面的另一个故事。
很好的例子。感谢您花时间和精力向我解释这一点。 – Sumithra 2010-10-15 09:00:38
投掷:
用于实际抛出异常,而抛出是声明的方法。它们不可互换。
throw new MyException("Exception!);
抛出:
这是当你没有在你的代码中使用的try catch语句中使用,但你知道,这个特殊的类是能够投掷某某异常(只检查例外)。在这里,你不使用try catch块,而是在你的代码的适当位置使用throw子句来写入,并且抛出异常给方法的调用者并由它处理。当函数可能抛出检查异常时,也会使用throws关键字。
public void myMethod(int param) throws MyException
相同的答案同上,但与复制粘贴乐趣:
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;
}
}
在Java中Throwable :
,所有的错误的和execption的类是从java.lang.Throwable的类drieved。它是错误和例外类的层次结构的顶部。只有作为此类(或其某个子类)的实例的对象由Java虚拟机抛出,或者可以由Java throw语句抛出。
Throws:
是post-method修饰符,并指定该方法可能抛出哪些执行选项。如果它们是检查异常,编译器将保证调用该方法的代码必须捕获这些检查的异常。
Throw:
语句用于引发错误或异常。 throw语句需要一个参数:Throwable类或Throwable类的任何子类的实例。执行throw语句会触发JVM引发此异常并导致发生异常。
列出几个...
掷
- 的Java
throw
关键字用来明确throw
异常。 - 只有使用
throw
才能传播检查异常。 Throw
后面是一个实例。Throw
在该方法内使用。- 您不能
throw
多个例外。
抛出
- 的Java
throws
关键字来声明一个例外。 - 检查异常可以用
throws
传播。 Throws
其次是类。Throws
与方法签名一起使用。- 您可以声明多个例外
public void method()throws IOException,SQLException
有两种主要类型的例外:
运行时例外(未选中):例如。 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;
}
然而,对于检查异常,在JVM希望你来处理它,并给编译错误,如果没有处理好,所以你声明它抛出作为clone()方法在下面看到,异常的类型。
Class Employee{
public Employee clone() throws CloneNotSupportedException{
Employee copy = (Employee)super.clone();
copy.hireDate = (Date)hireDate.clone();
return copy;
}
}
1. throw keyword used to throw user defined exceptions.(we can throw predefined exception too).
2. Using throws keyword we can explicitly provide the information about unhand-led exceptions of the method to the end user, Java compiler, JVM.
掷VS抛出
http://www.instanceofjava.com/2016/04/exception-handling-interview-questions.html
- 1. 抛出异常不抛出
- 2. 魔术异常抛出抛出异常
- 3. 抛出异常抛出异常
- 4. 抛出异常
- 5. 异常抛出
- 6. 抛出异常
- 7. 抛出异常
- 8. 抛出异常
- 9. 抛出异常
- 10. 抛出异常
- 11. 抛出异常
- 12. GridMVC网格抛出抛出异常?
- 13. LINQ查询抛出抛出异常
- 14. 抛出或重新抛出异常?
- 15. 对象类抛出类抛出异常
- 16. 从列表中抛出抛出异常时抛出IndexOutOfBoundsException:Java-> Kotlin
- 17. @ControllerAdvice不处理抛出的异常
- 18. Wcf异常处理抛出错误
- 19. 处理onSubmitAction后抛出异常
- 20. 处理IntList.remove()抛出的ArrayIndexOutOfBounds:10异常
- 21. 断言处理的异常被抛出
- 22. 尝试抛出异常处理
- 23. 处理由QPluginLoader :: load()抛出的异常:
- 24. 处理(毕加索)抛出的异常
- 25. 未处理的异常抛出PhotoChooserTask
- 26. 处理属性值,抛出异常
- 27. LLVM异常抛出
- 28. socket.connect抛出异常
- 29. 类抛出异常
- 30. os.getcwd()抛出异常
Java有没有。它有一个Throwable类的'throw'方法,它在方法头部有一个'throws'关键字。他们是两个完全不同的东西。首先忘掉“抛出”,然后找出抛出的东西。 'throws'只是为了让编译器保持高兴。 – 2015-01-09 18:26:16