「リソースを試してみよう」のトピックに疑問を呈しました。リソースを試してみてください
プログラムコード:
public class Suppressed_Exception_Eg03
{
public static void main(String[] args)
{
try (Wolf obj = new Wolf(); Deer obj1 = new Deer();)
{
//Both close statements are executed .
//Therefore , we see two closing stmts
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
static class Wolf implements AutoCloseable
{
@Override
public void close() throws Exception
{
System.out.println("Closing Wolf !");
throw new RuntimeException("In Wolf !");
}
}
static class Deer implements AutoCloseable
{
@Override
public void close() throws Exception
{
System.out.println("Closing Deer !");
throw new RuntimeException("In Deer !");
}
}
出力:
Closing Deer !
Closing Wolf !
In Deer !
・ダウト:我々は、すべての鹿クラスのcloseメソッドが最初に、ウルフクラスのものであろう次閉鎖されることを知っています。したがって、Wolfクラスによってスローされた例外は、Deerクラスによってスローされた例外を抑制するはずです。 したがって、catchブロックでWolfクラスの例外を捕捉する必要があります。しかしここでは出力で見ることができます、Deerクラスの例外が捕捉され、印刷されます。何人かはなぜそれが説明できますか?
同じブロックまたは同じブロックレベルの各行が他のブロックと同じ量だけインデントされていることを確認して、各ブロックに4つのスペースをインデントするようにコードをフォーマットしてください。はい、これはちょっとした要求ですが、私たちはボランティアであり、他の人があなたを助けてくれるように努力したいと思っています。 –
実行時例外により、ユーザーがtryブロックから起動します。これが私のコードと問題であれば、私はバイトコードをチェックします。 –
documenationをリードすると常にとても便利です:[*「資源のcloseメソッドは、その作成の逆の順序で呼び出されることに注意してください。」*](https://docs.oracle.com/javase/tutorial/essential/exceptions/ tryResourceClose.html)... – Tom