do{}while(false);在java中的妙用.

时间:2021-08-09 20:48:20

在以前写C程序中经常会有这样的情景.

 

打开一个资源的句柄.

 

在打开的这个资源上操作进行多次操作,每一步失败都要关闭这个资源句柄并摧毁它:

if(x1) { close(hd);destory(hd);}

if(x2) { close(hd);destory(hd);}

if(x3) { close(hd);destory(hd);}

等等,如果操作超过3条语句,比如有七八条头十头语句,第个条件分支中都写相同的代码,至少从视觉上感觉自己是一个入门者.

于是C程序会把这些操作写到一个地方加标号,然后每个条件分支中goto过去就行了.

 

但是在java中,goto肯定不行,有人会把相同的操作封装到一个方法中.每个条件分支中调用这个方法.这当然不失为为一个优雅的方法.

但是...............................

这些共同操作中所要操作的所有变量要作为参数传给方法.而有些参数传递并不是一件容易的事.特别是内部类的参数传递.

 

那么有什么方法可以象C的goto那样呢?在一定条件下跳过下面的操作直接转到共同的操作代码?

 

do{}while(false);就可以非常方便地解决这个问题,就实就是利用循环控制的break来跳过下面的操作直接转到循环外来操作.

而把不是循环的逻辑用循环封装起来,那么"只循环一次"就解决的方法,当然你用for(int i=0;i<1;i++){}也行.用

while(true){ }然后最后在{}里的最后一行加break也行,但从优雅的角度说do{}while(false);最好,好最符合它设计的"至少执行一次"

的原意.

 

 

do{

    其它运算语句;

    if(x1) break;

     其它运算语句;

    if(x2) break;  

}while(false);

共同操作语句;

 

 

如果满足x1条件,则流程直接转到共同操作语句执行.起到了goto的作用.