java方法抛出了它的原型,但没有抛出它的主体

时间:2016-03-16 14:22:17

标签: java exception

我在链系统中使用异常处理的不同方法。

请在下面找到我的代码的结构:

 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);

   }

现在的疑问是:

  1. BusinessException(errcode2222)是否会到达mainFlowMethod()或者它会在任何地方丢失?

  2. SystemException(errcode1111)是否会到达mainFlowMethod()或者它会在任何地方丢失?

  3. 请帮我摆脱这个疑问。在此先感谢!!

3 个答案:

答案 0 :(得分:1)

你将在mainFlowMethod()中获得两个例外,因为你不会在你的方法中捕获它们:doProcess(),innerMethod()和outerMethod()。

答案 1 :(得分:0)

在你的例子上;

doProcess始终抛出BusinessException,因此永远不会if(some_condition_matched){行运行。

在mainFlowMethod上捕获了抛出的BusinessException。

如果doProcess不抛出BusinessException和condition_matched,则outermethod抛出SystemException并被mainFlowMethod捕获。

您想要查看Checkedunchecked 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()的未来版本中抛出它。如果它是在一个单独的类中实现的。

一般情况下,例外不会丢失。它们要么被抓住要么被传播。