口水:java lable使用

本文探讨了Java中的标签(Label)与C语言中的Goto的相似性,指出虽然Java保留了Goto关键字,但在面向对象编程中较少使用,通常通过异常处理或标记实现控制。作者强调在算法编程中Goto可能提升可读性
摘要由CSDN通过智能技术生成

今天无意中看到一段代码,觉得挺有意思

lable:while (en.hasMoreElements()) {
			type type = (type) en.nextElement();
			continue lable;
		}

这个·lable·我一时间竟然不知道是什么,查了一下才知道是java循环控制里的东西
在循环前边加上一个标签,循环里就可以continue或break来控制语句的跳转了
看完之后大腿都拍青了,这不就是c语言里的goto嘛
(白学java了)

	fuck:
		while(true) {
			while(true) {
				break fuck;
			}
		}

在循环嵌套内使用可以直接break掉fuck对应的循环体

我不禁思考java有这个东西,那为什么不叫goto
神差鬼使地敲下goto

goto

!!
goto竟然也是关键字,变色就可以体现出来
编译一下

public class java_lable {

	public static void main(String[] args) {
		int a = 0;
        fuck:
	        for (int i = 0; i < 10; i++) {
	            for (int j = 0; j < 10; j++) {
	                a = j * i;
	                if (a == 300) {
	                    break fuck;
	                }
	            }
	        }
		System.out.println("goto!");
	}

}

class文件:

// Compiled from java_lable.java (version 1.8 : 52.0, super bit)
public class luogu.cn.Study.java_lable {
  
  // Method descriptor #6 ()V
  // Stack: 1, Locals: 1
  public java_lable();
    0  aload_0 [this]
    1  invokespecial java.lang.Object() [8]
    4  return
      Line numbers:
        [pc: 0, line: 3]
      Local variable table:
        [pc: 0, pc: 5] local: this index: 0 type: luogu.cn.Study.java_lable
  
  // Method descriptor #15 ([Ljava/lang/String;)V
  // Stack: 2, Locals: 4
  public static void main(java.lang.String[] args);
     0  iconst_0
     1  istore_1 [a]
     2  iconst_0
     3  istore_2 [i]
     4  goto 38
     7  iconst_0
     8  istore_3 [j]
     9  goto 29
    12  iload_3 [j]
    13  iload_2 [i]
    14  imul
    15  istore_1 [a]
    16  iload_1 [a]
    17  sipush 300
    20  if_icmpne 26
    23  goto 44
    26  iinc 3 1 [j]
    29  iload_3 [j]
    30  bipush 10
    32  if_icmplt 12
    35  iinc 2 1 [i]
    38  iload_2 [i]
    39  bipush 10
    41  if_icmplt 7
    44  getstatic java.lang.System.out : java.io.PrintStream [16]
    47  ldc <String "goto!"> [22]
    49  invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]
    52  return
      Line numbers:
        [pc: 0, line: 6]
        [pc: 2, line: 8]
        [pc: 7, line: 9]
        [pc: 12, line: 10]
        [pc: 16, line: 11]
        [pc: 23, line: 12]
        [pc: 26, line: 9]
        [pc: 35, line: 8]
        [pc: 44, line: 16]
        [pc: 52, line: 17]
      Local variable table:
        [pc: 0, pc: 53] local: args index: 0 type: java.lang.String[]
        [pc: 2, pc: 53] local: a index: 1 type: int
        [pc: 4, pc: 44] local: i index: 2 type: int
        [pc: 9, pc: 35] local: j index: 3 type: int
      Stack map table: number of frames 6
        [pc: 7, append: {int, int}]
        [pc: 12, append: {int}]
        [pc: 26, same]
        [pc: 29, same]
        [pc: 38, chop 1 local(s)]
        [pc: 44, chop 1 local(s)]
}

原来goto在jvm里是有的,在日常的使用里,goto作为保留关键字
不过在面向对象中,goto的使用频率相当低,更多的会抛出异常或使用标记来达到相同的目的
不过我觉得在面向过程式编程(算法)时,goto会帮助阅读和降低编写时的乏味

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值