Java 编程语言中很少被人了解的特性-statement label

下面的语句会编译报错或者打印什么?

        System.out.print("baidu site :");
        https://www.baidu.com;
        System.out.println(" format");

很多人会说:会编译出错,中间那行是什么鬼?

其实,不会报错,会打印出:

baidu site : format

如果改成这样的语句,是不是就不会觉得编译报错了?

        System.out.print("baidu site :");
        https :
            //www.baidu.com;
        System.out.println(" format");

像不像switch语句中的case

int q = (n+7)/8;
switch (n%8) {
 case 0: do { foo(); // Great C hack, Tom,
 case 7: foo(); // but it‘s not valid here.
 case 6: foo();
 case 5: foo();
 case 4: foo();
 case 3: foo();
 case 2: foo();
 case 1: foo();
 } while (--q > 0);
}

上面的语句,":" 是statement label 翻译成标号语句。

其语法如下:

LabeledStatement: Identifier : StatementLabeledStatementNoShortIf: Identifier : StatementNoShortIf

与c和c++不同,java中没有goto语句;标号语句用于出现在标号语句内任何地方的break或者continue语句之上。

再来一个标句语句作为结尾的练习吧

class Test {
 char[] value;
 int offset, count;
 int indexOf(TestString str, int fromIndex) {
 char[] v1 = value, v2 = str.value;
 int max = offset + (count - str.count);
 int start = offset + ((fromIndex < 0) ? 0 : fromIndex);
 i:
 for (int i = start; i <= max; i++) {
 int n = str.count, j = i, k = str.offset;
 while (n-- != 0) {
 if (v1[j++] != v2[k++])
 continue i;
 }
 return i - offset;
 }
 return -1;
 }
}

参考资料

【1】https://docs.oracle.com/javase/specs/jls/se12/html/jls-14.html#jls-14.7

原文地址:https://www.cnblogs.com/davidwang456/p/11505556.html

时间: 2024-08-04 10:41:43

Java 编程语言中很少被人了解的特性-statement label的相关文章

12个很少被人知道的CSS事实

之前没有认真的研究过,padding-bottom的值如果是百分比,那么它的实际值是根据父类的宽度来调整的.我还以为是根据这个元素的本身的宽度来定义呢?汗..padding-top/padding-left/padding-right也是一样算. 不过现在有一个CSS3属性叫box-sizing,可以取值 box-sizing:content-box | border-box content-box: padding和border不被包含在定义的width和height之内.对象的实际宽度等于设

Java中很少用的CopyOnWriteArrayList

类注释 /** * A thread-safe variant of {@link java.util.ArrayList} in which all mutative * operations ({@code add}, {@code set}, and so on) are implemented by * making a fresh copy of the underlying array. * 一个线程安全的ArrayList变量, 其中所有的可变操作(如add, set...) 都会

为什么要重写hashcode和equals方法?初级程序员在面试中很少能说清楚。

我在面试 Java初级开发的时候,经常会问:你有没有重写过hashcode方法?不少候选人直接说没写过.我就想,或许真的没写过,于是就再通过一个问题确认:你在用HashMap的时候,键(Key)部分,有没有放过自定义对象?而这个时候,候选人说放过,于是两个问题的回答就自相矛盾了. 最近问下来,这个问题普遍回答不大好,于是在本文里,就干脆从hash表讲起,讲述HashMap的存数据规则,由此大家就自然清楚上述问题的答案了. 1 通过Hash算法来了解HashMap对象的高效性 我们先复习数据结构里

java程序中的多线程(转)

为什么会排队等待? 下面的这个简单的 Java 程序完成四项不相关的任务.这样的程序有单个控制线程,控制在这四个任务之间线性地移动.此外,因为所需的资源 ― 打印机.磁盘.数据库和显示屏 -- 由于硬件和软件的限制都有内在的潜伏时间,所以每项任务都包含明显的等待时间.因此,程序在访问数据库之前必须等待打印机完成打印文件的任务,等等.如果您正在等待程序的完成,则这是对计算资源和您的时间的一种拙劣使用.改进此程序的一种方法是使它成为多线程的. 四项不相关的任务 class myclass { sta

写了10年JAVA代码,为何还是给人一种乱糟糟的感觉?

接触过不少号称写了10多年代码的程序员,可经常还是会发现他们的代码给人一种乱糟糟的感觉,那么如何才能写出让同事感觉不那么乱的代码呢? 一.为什么要写这篇文章 在开篇之前先说明下为什么要写这篇文章?在Java的世界里MVC软件架构模式绝对是经典的存在(PS:MVC是一种软件架构方式并不只有Java有),如果你是在最近十年前后进入Java的编程世界,那么你会发现自己这些年似乎从来没有逃离MVC架构模式的牢笼,只不过换着使用了不同的MVC框架,如早期的Struts1.Struts2以及现在几乎一统江湖

java高新技术中《九》

一:注解 1.注解(Annotation) 注解相当一个类或接口,每一个注解都是一个实例对象    注解的使用形式:@interface即@注解类名 定义注解类: @interface A {…} 使用了“注解类”的类: @A class B{} 对“使用了注解类的类”进行反射操作: class C { B.class.isAnnotationPresent(A.class); A a=(A)B.class.getAnnotation(A.class); } 2.注解类的生命周期 源文件(.ja

JAVA IO中的设计模式

在java语言 I/O库的设计中,使用了两个结构模式,即装饰模式和适配器模式.       在任何一种计算机语言中,输入/输出都是一个很重要的部分.与一般的计算机语言相比,java将输入/输出的功能和使用范畴做了很大的扩充.因此输入输出在java语言中占有极为重要的位置.       java语言采用流的机制来实现输入/输出.所谓流,就是数据的有序排列,流可以是从某个源(称为流源,或者 Source of Stream)出来,到某个目的(Sink of Stream)地去.根据流的方向可以将流分

位运算 , 补码 ----在开发中比较少用

如果要想进行位操作,则需要先将十进制的数据变为二进制数据(除2,求余). 例如:int x=-3; //以补码的形式存在,补码=反码+1 左移和右移 <<:左移操作是将运算数的二进制码整体左移指定位数,左移后的空位使用“0”来填充. >>:右移操作是将运算数的二进制码整体右移,右移后空出来的位置以符号位来填充.如果是正数使用“0”填充,负数用“1”填充 左移操作 int x=3; x<<2; 右移操作 int x=3,y=-3; x>>2; y>>

总结Java学习中64例重点、难点等 - 朴人博客移动版

body { font-family: 微软雅黑,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5; } html, body { } h1 { font-size:1.5em; font-weight:bold; } h2 { font-size:1.4em; font-weight:bold; } h3 { fon