JAVA跳转语句
2.3.5 跳转语句
除了if语句、switch语句、for语句和while/do-while语句之外,Java还支持另外两种跳转语句:break语句和continue语句。之所以称其为跳转语句,是因为Java中通过这两个语句使程序摆脱顺序执行转移到其他部分。还要注意的是,Java中没有goto语句,程序的跳转是通过break和continue实现的。
1.break语句
在switch语句中我们已经接触了break语句,就是它使得程序跳出switch语句,而不是顺序的执行后面case中的程序。
在循环语句中,使用break语句直接跳出循环,忽略循环体的任何其他语句和循环条件测试。在循环中遇到break语句时,循环终止,程序从循环后面的语句继续开始执行。
与C、C++不同,Java中没有goto语句来实现任意的跳转,因为goto语句破坏程序的可读性,而且影响编译的优化。但Java可用break来实现goto语句所特有的一些优点。Java定义了break语句的一种扩展形式来处理这种情况,即带标签的break语句。这种形式的break语句,不但具有普通break语句的跳转功能,而且可以明确的将程序控制转移到标签指定的地方。应该强调的是,尽管这种跳转在有些时候会提高程序的效率,但还是应该避免使用这种方式。带标签的break语句形式为:
break 标签;
请看下面这个例子,仔细体会一下break语句的使用:
int x = 0;
enterLoop://标签
while (x < 10){
x++;
System.out.println (" 进入循环,x的初始值为:" + x);
switch (x){
case 0 :
System.out.println(" 进入switch语句,x=" + x);
break;
case 1 :
System.out.println(" 进入switch语句,x=" + x);
break;
case 2 :
System.out.println(" 进入switch语句,x=" + x);
break;
default:
if(x = = 5){
System.out.println(" 跳出switch语句和while循环,x=" + x);
break enterLoop;
}
break;
}
.out.println(" 跳出switch语句,但还在循环中。x=" + x); System
}
2.continue语句
continue语句只可能出现在循环语句(while、do-while和for循环)的循环体中,
作用是跳过当前循环中continue语句以后的剩余语句,直接执行下一次循环。同
break语句一样,continue语句也可以跳转到一个标签处。请看下面的例子,注意其
中continue语句与break语句在循环中的区别。
【例2(12】 break语句和continue语句的使用示例。
public class LabeledWhile {
public static void main(String[] args) {
int i = 0;
outer:
while(true) {
System.out.println ("Outer while loop");
while(true) {
i++;
System.out.println ("i = " + i);
if(i = = 1) {
System.out.println ("continue");
continue;
}
if(i = = 3) {
System.out.println ("continue outer");
continue outer;
}
if(i = = 5) {
System.out.println ("break");
break;
}
if(i = = 7) {
System.out.println ("break outer");
break outer;
}
}
}
}
}
运行结果:
Outer while loop
i = 1
continue
i = 2
i = 3
continue outer
Outer while loop
i = 4
i = 5
break
Outer while loop
i = 6
i = 7
break outer
通过这个例子我们可以清楚看到:在没有标签时,continue语句只是跳过了一次循环;而break语句跳过了整个循环。当循环中有标签时,带有标签的continue会到达标签的位置,并重新进入紧接在那个标签后面的循环;而带标签的break会中断当前循环,并移到由那个标签指示的循环的末尾。
2.4 数组
数组是由一组类型相同的元素组成的有顺序的数据集合。数组中每个元素的数据类型都相同,它们可以是基本数据类型、复合数据类型和数组类型。数组中所有元素都共用一个数组名,因为数组中的元素是有序排列的,所以用数组名附加上数组元素的序号可惟一地确定数组中每一个元素的位置,我们称数组元素的序号为下标。
Java数组是一个独立的对象,要经过定义、分配内存及赋值后才能使用。
2.4.1 一维数组
1.数组的定义与创建
Java语言中,在能够使用数组元素(访问)之前,要做两方面的工作:定义一维数组变量(声明)、为数组分配内存单元(创建)。可以通过如下三种方式之一定义数组变量并创建数组对象:
方式一:先定义数组变量,再创建数组对象,为数组分配存储空间。其中,一维数组的定义可以采用如下两种
之一:
数组元素类型数组名[ ];
数组元素类型[ ]数组名;
对已经按上述格式定义的数组,进一步地通过new运算符创建数组对象分配内存空间,格式是:
数组名=new 数组元素类型[数组元素个数];
例如:
int a[]; //定义一个整型数组a
double [] b; //定义一个双精度型数组b
a=new int[3]; //为数组a分配3个元素空间
b=new double[10];//为数组b分配10个元素空间
在没有给各个数组元素赋值前,Java自动赋予它们默认值:数值类型为0,逻辑类型为false,字符型为'\0',对象类型初始化为null。请注意:Java关键字null指的是一个null对象(可以用于任何对象引用),它并不像在C中的NULL常量一样等于零或者字符'\0'。
方式二:同时定义数组变量并创建数组对象,相当于将方式一中的两步合并,格式是:
数组元素类型数组名[ ]=new 数组元素类型[数组元素个数];
数组元素类型[ ]数组名=new 数组元素类型[数组元素个数];
例如:
int x[]=new int[3];
double y[]=new double[10];
前者定义了具有3个元素空间的int型数组x;后者定义了具有10个元素空间的double型数组y。
方式三:利用初始化,完成定义数组变量并创建数组对象。此时不用new运算符。格式是:
数组元素类型数组名[ ]={值1,值2,…};
例如:
int a[ ]={11,12,13,14,15,16};
double b[ ]={1.1,1.2,1.3,1.4,1.5,1.6,1.7};
前者定义了int型数组a并对其初始化,共有6个元素;后者定义了double型数组b并对其初始化,共有7个元素。
另外,可以使用new运算符扩大已经创建了的数组的空间,例如:
int x[]=newint[3];
x=new int[5];
数组元素的类型,也是数组的类型,它可以是基本数据类型,也可以是对象类型,下面的定义都是合法的:
char cs[]={'j','i','n','a','n'};
Integer ix[] =new Integer [5];
String ss[ ]={"I","you ","Chinese"};