Java内部循环中断外部循环

本文介绍了Java中如何使用标签控制循环,包括break和continue的用法,如break label1可以中断内外部循环,而continue label1则会跳过剩余循环并回到外层循环起点。

这两天看《Java编程思想》,看到一个比较少见的但感觉有用的点,在这里记录一下:

Java 中没有 goto 语句进行任意跳转,但是 Java 有一种跟 goto 相似的跳转,也是通过标签,但只能针对循环使用。

使用方式:

label1:
outer-iteration {
	inner-iteration {
		//...
		break;            //(1)
		//...
		continue;       //(2)
		//...
		continue label1;     //(3)
		//...
		break label1;    //(4)
	}
}

在 (1) 中,break 中断内部循环,回到外部循环。
在 (2) 中,continue 使执行点移回内部迭代的起始处。
在 (3) 中,continue label1 同时中断内部循环以及外部循环,直接转到 label1 处,随后继续循环。
在 (4) 中,break label1 同时中断内部循环以及外部循环,直接转到 label1 处,但不重新进入迭代。

下面是一个例子:

public class Main {
   
   
    public static void main(String[] args) {
   
   
        int i = 0;
        outer:
        for (;true
### STM32 定时器循环中断的实现方式及问题解决 在 STM32 中,定时器循环中断是一种常见的机制,用于周期性执行某些任务。为了确保定时器能够按照设定的时间间隔正常工作而不发生异常行为(如立即触发),需要正确配置定时器的相关寄存器以及处理好中断标志位。 #### 配置定时器以支持循环中断 要实现定时器的循环中断功能,需完成以下几个关键步骤: 1. **初始化定时器参数** 设置自动重装载模式(Auto Reload Mode)。这种模式下,当计数器达到最大值后会重新加载预设值并继续计数。这可以通过设置 TIMx_CR1 寄存器中的 ARPE 位来启用向上计数模式下的自动重载缓冲区[^1]。 2. **使能更新事件和中断请求** 更新事件会在每次计数值被重置到初始状态时产生;而允许该类型的中断则可通过写入 TIMx_DIER 的 UIE 位置真来进行操作[^2]。 3. **编写中断服务函数 (ISR)** 当指定条件满足时,处理器跳转至对应的 ISR 来响应此特定硬件信号的到来。下面给出一个简单的例子展示如何定义这样的回调逻辑: ```c void TIM2_IRQHandler(void){ if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET){ // 检查是否发生了溢出中断 TIM_ClearITPendingBit(TIM2, TIM_IT_Update); // 清除中断标志位以防再次误触 // 用户自定义代码放置处... } } ``` 4. **启动定时器** 最后一步就是实际激活这个外设本身及其内部时钟供应链路以便它开始运作起来。通常这是通过调用 `TIM_Cmd()` 函数并将第二个参数设为 ENABLE 来达成目标。 #### 常见问题分析与对策 - **问题描述**: 开启定时器之后立刻进入了第一次中断。 - **原因解释**: 如果没有先清零当前的状态标记或者错误地设置了初值,则可能导致上述现象的发生。 - **解决方案**: 如前述代码片段所示,在进入任何可能引起额外开销的操作之前务必确认所有的相关联待决项已被妥善处置完毕。 另外值得注意的是,对于不同系列型号之间可能存在细微差异之处,请参照官方数据手册获取最精确的信息指导实践应用过程之中遇到的具体状况做出相应调整优化措施。 --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值