try catchネスト実行順序テスト
2585 ワード
テストtry catchの実行順序とコードの後続の実行を共有すると、実行されないコード:
コメントでInteger.parseInt(null); 自分が異常を走りたいポイントをクリアし、その後の処理の順番を見ます.
まとめ:異常な点を投げ出して、後続のコードは実行しないで、それから最近のcatchを探して、catchとfinallyを実行して、それから外層に実行します.
しかし、catch内部に再び異常が発生すると、最近のcatchが見つかるまで外層に放出されます.ネストされたtrycatchを使用するときに注意しなければならないのは、異常、異常の順序がどこに投げ出され、その後は実行されない可能性があるかということです.
springのコードをもう1段共有します
最後に個人的な観点を述べ,ネストされた異常処理作業をできるだけ避ける.論理が簡単でない限り、一定の可読性がある場合、可読性に大きな影響を及ぼし、また、後続の処理論理異常を避けることができます.
@Test
public void testTryCatch(){
try {
System.out.println(" try !" );
//Integer.parseInt(null);
try {
System.out.println(" try try " );
Integer.parseInt(null);
}
catch (Exception ex2) {
Integer.parseInt(null);
System.out.println(" try catch " );
}
finally {
Integer.parseInt(null);
System.out.println(" try finally");
}
System.out.println(" try !");
Integer.parseInt(null);
}
catch (Exception ex) {
try {
System.out.println(" try " );
Integer.parseInt(null);
}
catch (Exception ex2) {
System.out.println(" catch " );
}
finally {
System.out.println(" finally");
}
System.out.println(" catch " );
}
finally {
System.out.println(" finally!");
}
}
コメントでInteger.parseInt(null); 自分が異常を走りたいポイントをクリアし、その後の処理の順番を見ます.
まとめ:異常な点を投げ出して、後続のコードは実行しないで、それから最近のcatchを探して、catchとfinallyを実行して、それから外層に実行します.
しかし、catch内部に再び異常が発生すると、最近のcatchが見つかるまで外層に放出されます.ネストされたtrycatchを使用するときに注意しなければならないのは、異常、異常の順序がどこに投げ出され、その後は実行されない可能性があるかということです.
springのコードをもう1段共有します
if (this.registrar.hasTasks() && this.registrar.getScheduler() == null) {
Assert.state(this.beanFactory != null, "BeanFactory must be set to find scheduler by type");
try {
// Search for TaskScheduler bean...
this.registrar.setTaskScheduler(this.beanFactory.getBean(TaskScheduler.class));
}
catch (NoSuchBeanDefinitionException ex) {
logger.debug("Could not find default TaskScheduler bean", ex);
// Search for ScheduledExecutorService bean next...
try {
this.registrar.setScheduler(this.beanFactory.getBean(ScheduledExecutorService.class));
}
catch (NoSuchBeanDefinitionException ex2) {
logger.debug("Could not find default ScheduledExecutorService bean", ex);
// Giving up -> falling back to default scheduler within the registrar...
}
}
}
最後に個人的な観点を述べ,ネストされた異常処理作業をできるだけ避ける.論理が簡単でない限り、一定の可読性がある場合、可読性に大きな影響を及ぼし、また、後続の処理論理異常を避けることができます.