一、流程控制
在循环中, break语句不仅可以结束其所在的循环,还可以直接结束其外层循环,此时需要在break后紧跟一个标签,这个标签用于表标识一个外层循环。
Java中标签就是一个紧跟着英文冒号(:)的标识符,与其他语言不同,Java中的标签只有放在循环语句之前才有作用。
代码示例:
public class Demo
{
public static void main()
{
outer:
for(int i=0;i<5;i++)
{
for(int j=0;j<3;j++)
{
System.out.println("i的值为:"+i+"ji的值为:"+j);
if(j==1)
break outer;
}
}
}
}
通常紧跟break之后的标签,必须在break所在循环的外层循环之前定义才有意义。
与break类似,continue之后也可以紧跟一个标签,用于直接跳过标签所标识循环的当次循环的剩下语句,重新开始下一次循环。
通过return语句也可以结束一个循环,与continue和break不同的是,return将直接结束整个方法,不管这个return处于多少层循环之内。
二、数组类型
(1)数组的定义
Java语言支持两种语法格式来定义数组:
type[] arrayName;
type arrayName[];
推荐使用第一种。
数组是一种引用类型的变量,因此使用它定义一个变量时,仅仅表示定义了一个引用变量(也就是定义了一个指针),这个引用变量还未指向任何有效的内存,因此定义数组时不能指定数组的长度。
(2)数组的初始化
Java中对数组进行初始化,就是为数组的数组元素分配内存空间,并为每个数组元素赋初值,不能只分配内存空间不赋初值。
静态初始化:arrayName = new type [] {element1,element2,element3...} ; 也可以在定义数组的同时完成初始化。
动态初始化:只指定数组的长度,由系统为每个数组元素指定初始值,arrayName = new type [length] ;
(3)foreach循环
foreach循环遍历数组和集合元素,无需获得数组和集合长度,无需根据索引来访问数组元素和集合元素,foreach循环将自动遍历数组和集合的每个元素。
foreach循环的语法格式如下:
for(type variableName:array|collection)
{
variableName自动迭代访问每个元素...
}
其中,type是数组元素或集合元素的类型,variableName是一个形参名,foreach循环将自动将数组元素、集合元素依次赋给该变量。
使用foreach循环迭代数组元素时,并不能改变数组元素的值,foreach中的循环变量相当于一个临时变量,因此不要对foreach的循环变量进行赋值。
(4)深入数组
实际的数组对象被存储在堆内存中,如果引用该数组对象的数组引用变量是一个局部变量,那么它被存储在栈内存中。
数组引用变量时访问堆内存中数组元素的根本方式。
如果堆内存中数组不再有任何引用变量指向自己,则这个数组将成为垃圾,该数组所占的内存将会被系统的垃圾回收机制回收。
Java语言里的数组类型是引用类型,因此数组变量其实是一个引用,这个引用指向真实的数组内存。