我在链系统中使用异常处理的不同方法。
请在下面找到我的代码的结构:
mainflowMethod {
try{
outerMethod();
}
catch(SystemException se){
//handle exception here
}
catch(BusinessException be){
//handle exception here
}
}
outerMethod throws SystemException, BusinessException {
try{
innerMethod();
if(some_condition_matched){
throw new SystemException(errcode1111);
}
}
catch (OTHERException) {
//some other exception handling
// but neither SystemException nor BusinessException
}
}
innerMethod throws SystemException, BusinessException {
doProcess();
}
doProcess throws SystemException, BusinessException {
throw new BusinessException(errcode2222);
}
现在的疑问是:
BusinessException(errcode2222)是否会到达mainFlowMethod()或者它会在任何地方丢失?
SystemException(errcode1111)是否会到达mainFlowMethod()或者它会在任何地方丢失?
请帮我摆脱这个疑问。在此先感谢!!
答案 0 :(得分:1)
你将在mainFlowMethod()中获得两个例外,因为你不会在你的方法中捕获它们:doProcess(),innerMethod()和outerMethod()。
答案 1 :(得分:0)
在你的例子上;
doProcess始终抛出BusinessException,因此永远不会if(some_condition_matched){
行运行。
在mainFlowMethod上捕获了抛出的BusinessException。
如果doProcess不抛出BusinessException和condition_matched,则outermethod抛出SystemException并被mainFlowMethod捕获。
您想要查看Checked和unchecked exception
已检查的例外情况受Catch或Specify Requirement的约束。 除了表示的异常外,所有异常都是经过检查的异常 Error,RuntimeException及其子类。
因此检查过的异常永远不会丢失,你必须抓住它们,否则你的代码永远不会编译。
但未经检查的异常可能会导致您的应用程序崩溃。
答案 2 :(得分:0)
如果实际抛出了这些异常中的任何一个,那么它们将传播到import {Component, OnInit, Input, DynamicComponentLoader, ElementRef} from 'angular2/core';
import {Condition} from './condition';
import {DateCondition} from './datecondition.component';
import {StringCondition} from './stringcondition.component';
import {SelectCondition} from './selectcondition.component';
import {ConditionBuilderComponent} from "./conditionbuilder.component";
@Component({
selector: 'condition-detail',
template: '<div #child></div>'
+ '<a class="btn btn-danger" (click)="deleteCondition()"><i class="glyphicon glyphicon-minus"></i></a>'
})
export class ConditionDetailComponent implements OnInit {
@Input() condition: Condition;
dcl:DynamicComponentLoader;
elementRef:ElementRef;
constructor(dcl: DynamicComponentLoader, elementRef: ElementRef) {
this.dcl = dcl;
this.elementRef = elementRef;
}
ngOnInit() {
this.dcl.loadIntoLocation(this.condition, this.elementRef, 'child');
}
deleteCondition() {
HOW CAN I DELETE THE CONDITION ROW HERE?
}
并将被捕获。
如果两个实例都没有被抛出,那么这个问题就没有用了。
您的代码没有显示抛出mainFlowMethod()
的位置,但可能会在BusinessException
中抛出,或者可能会在innerMethod()
的未来版本中抛出它。如果它是在一个单独的类中实现的。
一般情况下,例外不会丢失。它们要么被抓住要么被传播。