Tag: 抛出

抓住Throwable进行清理是否可以?

举个这样的例子: public List readThings(List files) throws IOException { ImmutableList.Builder things = ImmutableList.builder(); try { for (File file : files) { things.add(readThing(file)) } return things.build(); } catch (Throwable t) { for (CloseableThing thing : things.build()) { thing.close(); } throw t; } } 代码审查评论的出现是因为通常有一条规则不能捕获Throwable。 执行此类仅故障清理的旧模式是: public List readThings(List files) throws IOException { ImmutableList.Builder things = ImmutableList.builder(); boolean […]

我应该在函数中抛出IllegalArgumentException吗?

我正在构建一个包含大量计算的科学软件,当然参数可能有错误的长度等…所以我使用了IllegalArgumentException类,因为它似乎是问题的正确名称,但是我应该在函数定义中throws IllegalArgumentException吗? 我问这个是因为在我写完之后,Eclipse编辑器没有让我用try和catch来包围这个函数。 我认为这是强制执行尝试和捕获的方式。 我已经阅读了Java.com上的exception处理教程,但我不确定我是否理解了有关我的问题的部分。

inheritance,方法签名,方法重写和throws子句

我的Parent课是: import java.io.IOException; public class Parent { int x = 0; public int getX() throws IOException{ if(x<=0){ throw new IOException(); } return x; } } 我extend这个类来编写一个子类Child : public class Child1 extends Parent{ public int getX(){ return x+10; } } 请注意,在覆盖 Child类中的getX方法时,我已从方法定义中删除了throws子句。现在,它会导致编译器出现exception行为,这是预期的: new Parent().getX() ; 如果没有将其包含在try-catch块中,则无法编译。 new Child().getX() ; 编译时不将其封闭在try-catch块中。 但是下面的代码行需要try-catch块。 Parent p = new Child(); […]

java – 在重写方法中检查’throws’的exception

我正在实践exception处理机制,方法覆盖java …我的代码如下: class base { void show() { System.out.println(“in base class method”); } } class derived extends base { void show() throws IOException { System.out.println(“in derived class method”); throw new IOException(); } } class my { public static void main(String[] args) { try { base b = new derived(); b.show(); } catch (IOException e) { […]

如果方法抛出未在方法声明中使用“throws”指定的exception,会发生什么情况

我从来没有使用过“throws”子句,今天一个伙伴告诉我,我必须在方法声明中指定方法可能引发的exception。 但是,如果不这样做,我一直在使用exception而没有问题,那么,实际上,为什么需要它呢?

在Java中抛出exception

我有一个关于在Java中抛出exception的问题,这似乎是我身边的一种误解,我想为自己澄清一下。 我一直在阅读处理exception代码的两种基本方法是: 1.)在一个带有“throw new …”的try-block中抛出exception,然后立即在catch-block中捕获它 – 即所谓的try-throw-catch机制。 2.)在一个带有“throw new …”的方法中抛出一个exception,然后在方法的标题中声明这个方法可能会抛出一个带有“throws …”的exception – 即所谓的pass-the-buck。 我最近读到“抛出一个exception然后用相同的方法捕获它没有任何意义”,这让我想到我是否以错误的方式理解了这个东西,或者写了这个东西的人有什么东西别的想法。 第一种处理exception的方法是不是就是这样(try-throw-catch机制)? 我的意思是,它抛出exception并以相同的方法捕获它。 我已经读过,在一个方法中抛出exception并在另一个方法中捕获它是一个更好的做法,但这只是一种(可能更好)的方法。 另一种方式也是合法和正确的,不是吗? 请你对此发表评论吗? 非常感谢你。

我应该在throws规范中声明未经检查的exception吗?

我知道必须处理或指定已检查的exception,但未经检查的exception是可选的。 如果由于某种原因我可以合理地期望在方法中发生未经检查的exception,我应该将它添加到throws规范吗? 或者我应该尽可能缩短规格?

抛出的Java抽象类

如果我有一个具有以下function的抽象类 – abstract class A{ void foo(String s) throws Exception{ throw new Exception(“exception!”); } } 然后是另一个扩展抽象类并实现自己的foo版本的类 – class B extends A{ void foo(String s){ //do stuff that does *not* throw an exception } } 这会产生问题吗? 具体在以下测试案例中 – Collection col = new Collection(); B b = new B(); col.add(b); for(A a : col){ a.foo(); } 我做了一些测试,似乎没有什么破坏,但我不明白为什么B的foo被调用而不是A的

如何为整个类抛出exception而不是按方法执行方法

我正在用Java编写程序,几乎我的一个类中的每个方法都写成: public void doStuff() throws AWTException{} 有没有办法让我摆脱为每个方法输入抛出AWTException的额外步骤,并以某种方式为整个类做它?

Java未选中/已检查exception澄清

我一直在阅读关于未经检查和已检查的问题,没有一个在线资源真正清楚这些差异以及何时使用这两者。 根据我的理解,它们都会在运行时抛出,它们都代表超出逻辑预期范围的程序状态,但必须明确捕获已检查的exception,而未经检查的exception则不会。 我的问题是,假设为了论证我有一个方法来划分两个数字 double divide(double numerator, double denominator) { return numerator / denominator; } 以及需要在某处使用divison的方法 void foo() { double a = divide(b, c); } 谁负责检查分母为零的情况,是否应该检查或取消检查exception(忽略Java内置的分区检查)? 那么,除法方法是否被声明为或 double divide(double numerator, double denominator) throws DivideByZeroException { if(denominator == 0) throw DivideByZeroException else … } void foo() { try{ double a = divide(b, c); } catch(DivideByZeroException e) {} […]