一、流程控制——结束循环的几种方式
1.break
break可以结束当前循环。
for(int i = 0; i<= 100;i++){
。。。。
if(i = 10) {
break;
}
}
这个for循环就结束了,不再循环。
或者配合标号使用 ,例如:
outer:
for(......;......;......){
for(....;.....;.....){
if(......){
break outer;
}
}
}
这样的操作就是结束outer下面这个双重循环体。(注意标号一定要写在循环体前面。)
2.continue
continue可以结束本次循环,忽略continue下面的语句,开启下一次循环。
例如:
for(int i = 0; i<= 100;i++){
。。。。
if(i = 10) {
continue;
int x = 0;//语句1
………………
}
语句1和下面的语句是执行不到的
continue也可以配合`outer使用
3.return
return的作用其实是结束一个方法。
无论return的位置在多少层循环里面,只要出现了return;整个方法结束。
二、数组
1.基本概念
数组是引用型数据类型。定义数组的时候是不能直接指定数组长度的。(因为定义数组时相当于在栈中开辟了一个空间给数组名,数组元素的存贮位置在堆中)
数组有两种初始化方法:静态初始化和动态初始化
静态初始化:int[] arr = new int[]{1,2,3};
动态初始化:int[] a = new int[20];(动态初始化中,这样程序员是没有对数组元素赋值的,而是系统给数组赋值。)
整型 系统赋值为 0
浮点型 系统赋值为 0.0
字符型 系统赋值为 ‘\u0000’
布尔型 系统赋值为 false
引用型 系统赋值为 null(null并不是不存在的值。)
注意:
int[] arr = new int[20];
左边是定义数组,右边是对数组的动态初始化,并不是在定义的同时定义了数组的长度。也就是说,int[2] arr;的写法是错误的。
数组索引越界异常:
java.lang.ArrayIndexOutOfBoundsException:N
N是程序员试图访问的数组下标。
数组有length属性。arr.length可以得到数组的长度。
Java5以后提供foreach循环,可以遍历数组或者集合中的元素格式为:
for(数据类型 变量名 : 数组/集合名称){
System.out.printf(变量名);
}
需要注意的是:foreach循环并不能改变数组或者集合元素的值,所以不要使用foreach循环来给数组或者集合的元素进行赋值。
2.内存中的数组
数组的变量名存在方法栈中,方法结束时发生销毁。数组元素存储在堆内存中(运行时数据区)运行结束不会被销毁。
Java的系统垃圾回收器会在一个变量没有任何引用的时候回收他。手动可以
变量 = null;
使系统回收
存放在栈中的数组名就相当于一个指针,指向了堆内存中的数组元素(个人认为可以这么理解,在栈中存放的数组名,其实是堆内存中第一个数组元素的地址。)
数组的长度一旦确定了就不会在发生改变了。
arr1 = arr2;
从表面上看似乎这样的操作会 使arr1的长度变得和arr2一样,但这个操作的本质是把arr2指向的地址赋值给arr1数组。而arr1数组的元素则不再有引用了。此时arr1和arr2都指向了 arr2的数组元素。
因此数组元素是不会变化的。
3.java中的二维数组
从内存中数组的存贮情况来看,java的二维数组其实是一维数组中存放的引用类型的一维数组。所以从这个角度上看Java是没有二维数组的。其余三维数组、多维数组同理。
4.Java8的增强工具类Arrays
包含了许多有用的方法。。。