流程控制与数组
##switch
switch语句中只能是byte,short int, char,枚举类型和String。
StringBuffer等不可以
例如 String season=“夏天”; switch(“season”) //是可以的
##循环结构
1 可以使用break控制循环结束
2 break 不止可以结束其所在循环,还可以直接结束其外层循环,需要在break后面紧跟一盒标签,这个标签用于标识一个外层循环
例如
public class BreakTest
{
public static void main(String[] args)
{
//外层循环,outer作为标识符
outer:
for(int i=0;i<5;i++)
{
//内层循环
for(int j=0;j<3;j++)
{
System.out.println("今天不开心");
if(j==1)
{
//跳出外层循环
break outer;
}
}
}
}
}
3 使用continue作用是忽略本次循环剩下语句。和break一样也可以跟标签。
4 return用来结束整个方法·。
数组
1 定义数组
type[] aeeayname; //推荐使用
type arrayname[];
2 数组的初始化
静态初始化:指定每个数组元素的初始值,系统决定数组长度
//第一种:一个int类型数组
int[] intArr;
intArr=new int[]{5,6,8,20};
//第二种,简写
type[] arrayName={element1,element2};
int[] a={5,8,12}; //将数组定义和初始化同时进行
动态初始化
动态初始化只需要指定数组长度。
int[] price=new int[5];
3 使用数组
foreach循环
介绍:使用foreach循环遍历数组和集合的时候,无需获得数组和集合的长度,无需根据索引来访问数组元素和集合元素,foreach循环自动遍历数组和集合的每个元素。
语法格式:
for(type variableName:array|collection)
{
//variableName自动迭代的访问每个元素
}
//示范
public class FoeeachTest
{
public static void main(String[] args)
{
String[] books={"jaba大全","死神来了"};
//其中book将会自动迭代每个元素
for(String book:books)
{
System.out.println(book);
}
}
}
注意:使用foreach迭代数组的时候,并不能改变数组元素的值,因此不要对foreach循环变量进行赋值。
4 深入数组
1 数组是一种引用数据类型。
其中数组的引用存储在栈内存中,真实的数组存储在堆内存中。
注意:在jvm中栈存储的是对象的引用和局部变量,堆中存储的是对象,垃圾回收就是发生在堆中。
下面举个例子说明了数组在内存中的变化。
public class ArrayInRam
{
public static void main(String[] args)
{
//定义数组a,并且进行静态初始化
int[] a={5,7,20};
//定义数组b,并且进行动态初始化
int[] b=new int[4];
//输出b的长度
System.out,printlb("b的长度是"+b.length);
//输出a元素
for(int i=0;i<a.length;i++)
{
System.out.println(a[i]);
}
for(int i=0;i<b.length;i++)
{
System.out.println(a[i]);
}
//因为a,b都是int类型的数组,所以可以将a的值复制给b,也就是让b引用指向a引用指向的数组
b=a;
System.out.println("b的长度为"+b.length); //此时长度变为3;
}
}
解释:创建两个数组并且初始化就是产生了4个内存区,堆两个栈两个,执行代码块b=a时,系统将会把a的值赋值给b。
a,b都是引用类型的变量,存储的是地址,因此就是让b指向a所指向的地址,也就是指向堆中的内存,**由此对内存中的b数组对象就成了垃圾**,等待垃圾回收。
2 引用类型数组初始化
这种情况应对的是引用类型的数组元素是引用的情况。
class Person // 先定义一个Person类,注意:所有的类都是引用类型
{
public int age;
public double height;
public void info()
{
System.out.println("我的年龄是:"+age+"。我的身高是:"+height);
}
}
下面定义一个Person数组,动态初始化这个数组
public class ReferenceArrayTest
{
public static void main(String[] args)
{
//定义一个students数组变量,类型是Person[]
Person[] students;
//进行动态初始化
students=new Person[2];
//创建一个person实例zhang
Person zhang=new Person();
//为zhang所引用的Person对象赋值
zhang.age=15;
zhang.height=165;
//再次创建一个Person实例lee
Person lee=new person();
lee.age=58;
lee.age=198;
//将zhang变量的值赋值给第一个数组元素
students[0]=zhang;
//将lee变量1值赋值给第二个数组元素
students[1]=lee;
//下联两行代码结果完全一样,因为lee和students[1]指向的是同一个Person实例
lee.info();
students[1].info();
}
}
内存解释图:
3 多维数组
注意:java支持多维数组语法,但是内存上来看并没有多维数组,只是数组变量是引用,指向真实的数组内存也可以是引用,如果数组元素的引用再次指向真实的数组内存,这种情况看上去很像多维数组。
初始化方法
int[][] b=new int[3][4];