`
renlei413326889
  • 浏览: 75626 次
  • 性别: Icon_minigender_1
  • 来自: 岳阳
社区版块
存档分类
最新评论

Java中的"goto"实现(转)需修改...

    博客分类:
  • J2SE
阅读更多
Java中的"goto"实现

本文出自http://lavasoft.blog.51cto.com/"熔 岩"博客
原博文地址:http://lavasoft.blog.51cto.com/62575/178997/

Java语言中goto是保留关键字,没有goto语句,也没有任何使用goto关键字的地方。

Java中也可在特定情况下,通过特定的手段,来实现goto的功能。显然Java不愿意开发者随意跳转程序。下面解释两个特定:
特定情况:只有在循环体内,比如for、while语句(含do...while语句)中。
特定手段:语句标签和循环控制关键字break、continue,语法格式是:break/continue 语句标签。

一、break、continue和语句标签

1、语句标签
语句标签的语法是:标签名:
语句标签可以定义在方法体内的最后一条语句之前即可。但是语句标签实际使用的机会是与break和continue结合使用的,而break和continue是和循环语句结合使用的,因此实际上语句标签的使用也是和循环紧密结合的。

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

因此,有意义、可使用的标签含义是:指定循环语句的标识!

2、break、continue语句单独使用
单独使用情况下:break语句作用是结束当前的循环迭代体,进而执行剩余的语句。
continue语句的作用是结束本次迭代过程,继续执行下一轮迭代。

3、break、continue语句结合语句标签的使用
为什么需要语句标签呢?
原因是因为程序可能有循环的嵌套,当多层循环嵌套时候,有时候需要一次跳出多级循环,这种情况下就需要结合语句标签才能实现此功能了。

带标签使用情况下:break中断并跳出标签所指定循环,continue跳转到标签指定的循环处,并继续执行该标签所指定的循环。

为了说明情况,看看下面的例子:
import java.util.Random; 

/** 
* 语句标签测试 
* 
* @author leizhimin 2009-7-16 11:43:08 
*/ 
public class TestLable { 
        public static void main(String[] args) { 
                outer: 
                for (int i = 0; i < 10; i++) { 
                        System.out.println("\nouter_loop:" + i); 
                        inner: 
                        for (int k = 0; i < 10; k++) { 
                                System.out.print(k + " "); 
                                int x = new Random().nextInt(10); 
                                if (x > 7) { 
                                        System.out.print(" >>x == " + x + ",结束inner循环,继续迭代执行outer循环了!"); 
                                        continue outer; 
                                } 
                                if (x == 1) { 
                                        System.out.print(" >>x == 1,跳出并结束整个outer和inner循环!"); 
                                        break outer; 
                                } 
                        } 
                } 
                System.out.println("------>>>所有循环执行完毕!"); 
        } 
}

执行结果:
outer_loop:0 
0 1 2 3 4 5 6 7 8 9    >>x == 8,结束inner循环,继续迭代执行outer循环了! 
outer_loop:1 
0 1 2 3 4 5    >>x == 9,结束inner循环,继续迭代执行outer循环了! 
outer_loop:2 
0 1 2 3 4 5 6 7 8 9    >>x == 8,结束inner循环,继续迭代执行outer循环了! 
outer_loop:3 
0 1 2 3 4    >>x == 9,结束inner循环,继续迭代执行outer循环了! 
outer_loop:4 
0 1 2 3 4 5 6 7 8 9 10    >>x == 8,结束inner循环,继续迭代执行outer循环了! 
outer_loop:5 
0    >>x == 1,跳出并结束整个outer和inner循环!------>>>所有循环执行完毕! 



这个执行结果是随机的。

下面给个图看看:

二、switch语句

switch语句是一个条件选择语句,这个语句有“goto”的味道,但是限制也很多,因此,实际中使用较少。

switch语句的结构如下:
switch(intvar){
        case intval: 语句代码;break;
        case intval: 语句代码;break;
        case intval: 语句代码;break;
        case intval: 语句代码;break;
        default:
                 语句代码;
}

switch(intval){...}语句中,小括号中intvar是一个整数条件因子变量,这个变量只能为:byte、char、short、int和enum(枚举类型)几种类型,本质上都是整形数字。intval是匹配的条件因子值,当匹配时,执行其下的语句。其中所有的break语句都是可选的。当执行了break语句后,就跳出整个switch语句,否则,还会继续往下匹配别的条件。当intvar不能匹配所有的给定条件值时候,就执行default语句,如果没有default语句,则跳出switch语句。

switch语句的条件因子变量只能作为整型数字或者字符型、枚举类型,这个限制太严格了,使得switch语句的实际用途不是很大。

下面是一个汉语金额数字转换程序:

/** 
* 汉语金额数字转换程序 
* 
* @author leizhimin 2009-7-16 13:28:05 
*/ 
public class TestSwitch { 

        /** 
         * 数字转换为汉语金额数字 
         * 
         * @param num 数字 
         * @return 汉语金额数字 
         */ 
        public static String genCnNum(Long num) { 
                StringBuffer sb = new StringBuffer(); 
                String snum = String.valueOf(num); 
                for (char c : snum.toCharArray()) { 
                        sb.append(num2Cn(c)); 
                } 
                return sb.toString(); 
        } 

        /** 
         * 字符数字转换为汉语金额数字 
         * 
         * @param c 字符数字 
         * @return 汉语金额数字 
         */ 
        private static String num2Cn(char c) { 
                String res = null; 
                switch (c) { 
                        case '0': 
                                res = "零"; 
                                break; 
                        case '1': 
                                res = "壹"; 
                                break; 
                        case '2': 
                                res = "貮"; 
                                break; 
                        case '3': 
                                res = "叁"; 
                                break; 
                        case '4': 
                                res = "肆"; 
                                break; 
                        case '5': 
                                res = "伍"; 
                                break; 
                        case '6': 
                                res = "陆"; 
                                break; 
                        case '7': 
                                res = "柒"; 
                                break; 
                        case '8': 
                                res = "捌"; 
                                break; 
                        case '9': 
                                res = "玖"; 
                                break; 
                        default: 
                                System.out.println("您的输入有误,请重试!"); 
                } 
                return res; 
        } 

        public static void main(String[] args) { 
                System.out.println(genCnNum(4523586022L)); 
        } 
}


运行结果:
肆伍貮叁伍捌陆零貮貮 


Process finished with exit code 0
  • 大小: 138.1 KB
分享到:
评论

相关推荐

    java关键字............

    Java中的关键字是预定义的保留字,具有特殊的意义和用途,不能用作标识符(如变量名、类名等)。在给定的部分内容中列出了众多Java关键字,接下来我们将逐一进行详细介绍。 #### 关键字列表 - `abstract` - `...

    Java面试宝典2013_PDF版.pdf

    Java中有两种方法可以实现线程:继承Thread类和实现Runnable接口。关键字synchronized用于声明同步方法。不推荐使用stop()和suspend()方法是因为它们会导致死锁、资源不释放等问题。 47. sleep()和wait()有什么...

    Java经典理论面试100题.pdf

    50. **goto语句**:Java中不支持goto语句。 51. **Collection与Collections**:Collection是所有集合接口的父接口,Collections是工具类,提供集合操作的静态方法。 52. **接口特征**:接口是完全抽象的,只能包含...

    java面试题_(精典).doc

    ### Java面试题精典知识点详解 #### 1. super()与this()的区别? - `super()`:用于调用父类的构造方法或...Java中没有`goto`关键字,这是C语言的一个特性,被Java设计者排除在外,以增强语言的健壮性和可维护性。

    JAVA面试题及答案.doc.doc

    Java 面试题涵盖了许多核心概念,以下是这些题目所涉及的知识点详解: 1. **final, finally, finalize**: - `final`:用于声明不可变的类、变量或方法,确保它们不会被修改。 - `finally`:在异常处理中确保某些...

    Java程序的设计课后练习答案.docx

    - D: `goto` — 虽然在Java中`goto`是保留字,但实际上并没有作为关键字使用。 3. **参数传递** - B: `双引号` — 如果参数中包含空格,则需要用双引号引起来。 4. **标识符** - B: `$x` — 在Java中,标识符...

    Java软件开发工程师面试题宝典.doc

    2. **`goto`关键字**:Java中并没有传统的`goto`关键字,它被视为保留关键字,但在实际编程中并不使用。 3. **`&`和`&&`的区别**:`&`是位运算符,用于按位与操作;同时也可以用于逻辑与操作,此时会检查两边的操作...

    王者归来之JAVA2核心技术第1卷.基础知识7thJoin4.pdf

    基础知识7thJoin4.pdf》是深入理解和掌握Java基础知识的宝贵资源,尤其是对JDK5.0特性的介绍和JDK1.4兼容性修改指南,有助于读者在不同版本的Java环境中编写和维护代码。文档内容的深度和广度,使其成为Java程序员在...

    50个关键字_3个直接量_JAVA的五十个关键词_.zip.zip

    22. `goto` - Java中不支持,但在其他语言中常见。 23. `if` - 条件语句的开始。 24. `implements` - 实现接口的关键字。 25. `import` - 引入其他包的类或接口。 26. `instanceof` - 检查对象是否属于特定类或接口...

    教主Java面试题汇总(2019).pdf

    - Java保留了`goto`关键字,但在目前版本的Java中并未使用该关键字。这是为了兼容未来可能的变化或者与其他语言保持一定的兼容性。 以上知识点涵盖了Java面试中常见的基础概念和技术要点,对于初学者和有一定经验的...

    Java面试宝典2018版

    在Java中,goto从未实现,也没有相应的替代机制,因此在编程中不能使用goto。 3. Java中逻辑运算符&与&&的使用及区别: &和&&都可以作为逻辑与运算符,它们表示逻辑与(and)关系。当运算符两边的表达式结果都为...

    2020最新BAT java经典必考面试题.pdf

    - **goto**:Java中预留但未使用的关键字,目前无法在代码中使用。 了解这些知识点对于准备Java面试至关重要,因为它们是构建和理解Java应用程序的基础。掌握这些概念和机制,不仅可以帮助你在面试中表现出色,也...

    JAVA与C#相同与区别.pdf

    12. Java和C#中的异常处理对比:C#使用“try-catch-finally”,Java也有相似的结构,但在C#中“goto”语句的使用场景被详细说明,Java中也有“goto”,但使用较少。 13. .NET框架和Win32 COM:文档中提到C#可以使用...

    java经典面试题.doc

    在Java中,如果一个类可以被序列化,它需要实现`Serializable`接口。 - **实现序列化**: - 使类实现`Serializable`接口; - 使用`ObjectOutputStream`类将对象写入流; - 使用`ObjectInputStream`类从流中读取...

    Java面试宝典Beta5.0.pdf

    4. Java的goto语句:Java语言中没有goto语句,这是设计者有意为之,以避免程序结构变得复杂。 5. 逻辑运算符&和&&的区别:&是按位与运算符,对操作数的每一位执行逻辑AND运算;&&是逻辑与运算符,只对操作数的布尔...

Global site tag (gtag.js) - Google Analytics