java之break解析

在java中,break语句有3种作用。

第一,在switch语句中,它被用来终止一个语句序列。

第二,它能被用来退出一个循环。(一系列的循环嵌套时,只跳出做里面的一层)

第三,它能作为一种“先进”的goto 语句来使用。

下面对最后 2种用法进行解释。

class BreakLoop {

public static void main(String args[]) { 
for(int i=0; i<100; i++) { 
if(i == 10) break; // terminate loop if i is 10 
System.out.println("i: " + i); 

System.out.println("Loop complete."); 

}

结果:

i: 0 
i: 1 
i: 2 
i: 3 
i: 4 
i: 5 
i: 6 
i: 7 
i: 8 
i: 9 
Loop complete.

class BreakLoop3 {

public static void main(String args[]) {

for(int i=0; i<3; i++) { 
System.out.print("Pass " + i + ": "); 
for(int j=0; j<100; j++) { 
if(j == 10) break; // terminate loop if j is 10 
System.out.print(j + " "); 

System.out.println(); 

System.out.println("Loops complete."); 

}

结果:

Pass 0: 0 1 2 3 4 5 6 7 8 9 
Pass 1: 0 1 2 3 4 5 6 7 8 9 
Pass 2: 0 1 2 3 4 5 6 7 8 9 
Loops complete.

从中可以看出,在内部循环中的break语句仅仅终止了该循环,外部的循环不受影响。

关于break ,在这里要记住两点。

首先,一个循环中可以有一个以上的break 语句。

其次,switch语句中的break仅仅影响该switch 语句,而不会影响其中的任何循环。

标签break语句的通用格式如下所示:

break label;

标签label是标识代码块的标签。当这种形式的break执行时,控制被传递出指定的代码快。被加标签的代码必须包围break语句。

要指定一个代码块,在其开头加一个标签即可。标签(label )可以是任何合法有效的Java 标识符后跟一个冒号。一旦你给一个块加上标签后,你就可以使用这个标签作为break 语句的对象了。这样做会使执行在加标签的块的结尾重新开始class Break { public static void main(String

class Break{

public static void main(String[] args)

{ boolean t = true;

first: { 

  second: { 

    third: {  

       System.out.println("Before the break.");

      if(t) break second;

      // break out of second blockSystem.out.println("This won‘t execute");

        } //third

  System.out.println("This won‘t execute");

      }//second

    System.out.println("This is after second block.");

    } //first
}

}

结果:

Before the break.
This is after second block.  

标签break 语句的一个最普遍的用法是退出循环嵌套。例如,下面的程序中,外层的循环只执行了一次:

class BreakLoop4 {
public static void main(String args[]) {

outer: for(int i=0; i<3; i++) {

System.out.print("Pass " + i + ": ");

for(int j=0; j<100; j++) {

if(j == 10) break outer; // exit both loops

System.out.print(j + " ");

}
System.out.println("This will not print");

}

System.out.println("Loops complete.");

}

}

结果:

 Pass 0: 0 1 2 3 4 5 6 7 8 9 Loops complete.

记住如果一个标签不在包围break的块中定义,你就不能break 到该标签。例如,下面的程序就是非法的,且不会被编译:

class BreakErr {
public static void main(String args[]) {
one: for(int i=0; i<3; i++) {

System.out.print("Pass " + i + ": ");

}
for(int j=0; j<100; j++) {

if(j == 10) break one; // WRONG

System.out.print(j + " ");

}

}

因为标签为one的循环没有包围break 语句,所以不能将控制传递到该块。

时间: 2024-08-27 00:40:44

java之break解析的相关文章

最全面的Java多线程用法解析

最全面的java多线程用法解析,如果你对Java的多线程机制并没有深入的研究,那么本文可以帮助你更透彻地理解Java多线程的原理以及使用方法. 1.创建线程 在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.在使用Runnable接口时需要建立一个Thread实例.因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例.Thread构造函数: public Thread( ); public Thread(Runnab

java笔试题解析

1.数组乱序 天天搞排序,今天遇到一道乱序的问题居然无从下手,知道random,然后想了很复杂的if条件判断. 其实,只要在数组里面依次拿出一个数,然后产生数组长度范围内的一个数作为下标,然后互换即可! public class RandomNumber { public static void main(String[] args) { int change = 6; int[] sequence = new int[change]; for (int i = 0; i < change; i

java中dom解析xml

从xml文件中得到某个节点中value的值,条件是已知道某一个子节点的参数,如下一片段, 已知 <name> 为 “Motor hand”的值,想从整个xml文件中得到此子节点的<value>所对应的值. “<field><name>Motor hand</name><value>Right</value><type>Dotted</type></field>” 此方法是dom 遍历,获

java class 文件解析

参考下面两个文章对一个class文件进行解析: http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.4.6 http://blog.163.com/hfut_quyouhu/blog/static/7847183520127214559314/ java的源代码如下: 1 package test.java.abs; 2 3 public class Abs { 4 5 /** 6 * @param args

javap -- Java 类文件解析器

参考文档 http://blog.chinaunix.net/uid-692788-id-2681132.html http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/javap.html 功能说明:Java 类文件解析器. 语法:javap [ 命令选项 ] class. . . 补充说明: javap 命令用于解析类文件.其输出取决于所用的选项.若没有使用选项,javap 将输出传递给它的类的 public 域及方法.ja

java使用dom4j解析xml

目标:将指定XML进行解析,以键=值的方式返回指定节点下的数据 所需要的jar包:dom4j1.6.1.jar.jaxen-1.1.jar <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://s

Java注解全面解析(转)

1.基本语法 注解定义看起来很像接口的定义.事实上,与其他任何接口一样,注解也将会编译成class文件. @Target(ElementType.Method) @Retention(RetentionPolicy.RUNTIME) public @interface Test {} 除了@符号以外,@Test的定义很像一个空的接口.定义注解时,需要一些元注解(meta-annotation),如@Target和@Retention @Target用来定义注解将应用于什么地方(如一个方法或者一个

java集合框架之java HashMap代码解析

 java集合框架之java HashMap代码解析 文章Java集合框架综述后,具体集合类的代码,首先以既熟悉又陌生的HashMap开始. 源自http://www.codeceo.com/article/java-hashmap-java-collection.html 签名(signature) public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Se

Java类加载原理解析

1       基本信息 摘要: 每个java开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这背后就涉及到了java技术体系中的类加载.Java的类加载机制是java技术体系中比较核心的部分,虽然和大部分开发人员直接打交道不多,但是对其背后的机理有一定理解有助于排查程序中出现的类加载失败等技术问题,对理解java虚拟机的连接模型和java语言的动态性都有很大帮助. 由于关于java类加载的内容较多,所以打算分三篇文章简述一下: 第一篇:java类