欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【JAVA】Java中goto语句的简介与使用

程序员文章站 2022-03-15 13:29:30
...

【JAVA】Java中goto语句的简介与使用

1.概述

这是我在看公司代码的时候发现,居然有一个goto语句的使用,所以来学习一下

goto语句在java中作为保留字,并没有实现它。但在其他语言中(c语言),goto是个合法的关键字
java中支持的break和continue虽然能实现goto语句的功能但是我个人总结他们的用法大同小异

首先在java中对标号的要求非常严格

标号必须在一个循环的前面,意思是这个循环的名字叫outer(假设标号名为outer),并且这一行后面不能有任何语句了

而break和continue是和循环语句结合使用的,因此实际上语句标签的使用也是和循环紧密结合的。

语句标签在被使用的情况,只能定义在循环迭代语句之前,否则编译出错

因此带标号的break、continue 只能在循环体或者选择体(if等)之中跳转

而(c语言)goto的用法则比较灵活,(c语言)中的标号可以在任意一个合法语句的前面
因此goto可以在一个函数(c语言)中任意位置跳转(当然不能违反goto语句的合理用法例如不能再嵌套之间跳转等)

因此 个人总结

  1. 带标号的break、continue局限于循环体中跳转
  2. 带标号的goto 可以在整个方法中(c语言函数)跳转
  3. goto比带标号的break、continue用法灵活 正因为太灵活了,使程序的逻辑结构变的复杂,流程不够清晰,程序的可读性下降,所以java中把goto 保留了

2.案例

package com.java.keyword;

import org.junit.Test;

import static org.junit.Assert.*;

public class GoToDemoTest {


    /**
     * 1:0
     * 1:1
     * 1:2
     * 1:3
     * 1:4
     * 2:0
     * 2:1
     * 3:0
     * 3:1
     * 3:2
     * 3:3
     * 3:4
     * 4:0
     * 4:1
     * 4:2
     * 4:3
     * 4:4
     */
    @Test
    public void gotoTest(){
        for (int i = 1; i <5; i++) {
            for (int j = 0; j < 5; j++) {
                if(i == 2 && j == 2){
                    break;
                }else {
                    System.out.println(i+":"+j);
                }
            }
        }
    }

    /**
     * 1:0
     * 1:1
     * 1:2
     * 1:3
     * 1:4
     * 2:0
     * 2:1
     */
    @Test
    public void goto1Test(){
        WAF_LOOP_ONE:
        for (int i = 1; i <5; i++) {
            for (int j = 0; j < 5; j++) {
                if(i == 2 && j == 2){
                    break WAF_LOOP_ONE;
                }else {
                    System.out.println(i+":"+j);
                }
            }
        }
    }

}