《疯狂java讲义》第4章 流程控制与数组

第4章 流程控制与数组

4.1 循序结构

  • 循序结构:程序从上到下逐行执行,中间没有任何判断和跳转。

4.2 分支结构

if语句和switch语句

4.2.1 if条件语句

if ( xx ){
	xxx;
}

if ( xx ){
	xxx;
}else{
	xx;
}

if ( xx ){
	xxx;
}else if ( xxx ){
	xx;
}
  • 花括号括起来的多行代码称为代码块,也称为条件执行体。
  • 代码块,以分号结束的一行语句,空语句,都可以为条件执行体。
  • else的含义是“否则”,else的隐含条件是对前面条件的取反。
  • 使用if…else语句时,一定要先处理包含范围更小的情况。

4.2.2 switch分支语句

switch ( expressiion ){
	case condition1:{
		statement(s)
		break;
	}
	case condition2:{
		statement(s)
		break;
	}
	...
	default:{
		statement(s)
	}
}
  • switch语句后的expression表达式的数据类型只能是byte,short,char,int四种整数类型,String,枚举类型。
  • 如果省略了case后代码块的break;,将引入一个陷阱。

4.3 循环结构

循环语句包括:初始化语句,循环条件,循环体,迭代语句。

4.3.1 while循环语句

[init_statement]
while (test_expression){
	statement;
	[inreation_statement]	
}

4.3.2 do while 循环语句

do while循环的循环体至少执行一次,循环条件后面必须有一个分号。

[init_statement]
do{
	statement;
	[inreation_statement]	
}while (test_expression);

4.3.3 for 循环

for ([init_statement]; [test_expression]; [iteration_statement]){
	statement
}
  • 循环条件总比循环体要多执行一次。
  • for循环的循环迭代语句没有与循环体放在一起,不管是否使用continue语句来结束本次循环,循环迭代语句一样会获得执行。
  • 建议不要在循环体内修改循环变量,建议重新定义一个临时变量。
  • for循环圆括号中只有两个分号是必需的,其他都是可以省略的。
  • 如果要在for循环以外的地方使用初始化语句的值,可以额外定义一个变量来保存这个循环变量的值。

4.3.4 嵌套循环

把一个循环放进另一个循环的循环体,可以多层循环嵌套。

4.4 控制循环结构

4.4.1 使用break结束循环

  • break可以在某种条件出现时强行终止循环,跳出循环体,开始执行循环之后的代码。
  • 还可以直接结束外层循环,导致结束outer标签指定的循环。必须是一个有效的标签(在break语句所在的循环之前定义,或在其所在循环的外层循环之前定义)
outer :
for(...){
	for(...){
		...
		break outer;
	}
}

4.4.2 使用continue忽略本次循环剩下语句

  • continue只是忽略本次循环剩下语句,接着开始下一次循环,并不会终止循环。
  • 也可以使用标签(有效标签),continue outer语句就结束了外层循环的当次循环,直接开始下一次循环,内层循环没有机会执行完成。
outer :
for(...){
	for(...){
		...
		continue outer;
	}
}

4.4.3 使用return结束方法

return不是专门结束循环的,是结束一个方法的。

4.5 数组类型

4.5.1 理解数组:数组也是一种类型

  • Java的数组要求所有的数组元素具有相同的数据类型。
  • 一旦数组的初始化完成,数组在内存中所占空间将被固定下来,数组的长度不可变。
  • java的数组可以存储基本类型数据,也可以存储引用类型数据。它本身是引用类型。
  • 定义数组:定义一个变量时,仅仅定义了一个引用变量(一个指针),只有对数组进行初始化之后才可以使用。
  • 定义数组时不能指定数组的长度。
  • 数组的初始化:静态、动态初始化。
int[] intArr;//定义一个int数组类型的变量,变量名为intArr
intArr = new int[]{5,6,8,20};//静态初始化,指定数组元素的初始值,由系统决定长度
Object[] books = new String[4];//动态初始化,只指定数组的长度,由系统分配初始值
  • 不要同时使用静态初始化和动态初始化。
  • 使用数组:数组索引是从0开始的,都提供一个length属性,访问数组的长度。
for (int i = 0; i < price.length; i++){	//遍历
	System.out.println(prices[i]);
}

4.5.5 foreach循环

  • foreach循环可以循环遍历数组和集合。
String[] books = {"疯狂""java","讲义"}for (String b : books){//foreach自动迭代数组的每个元素
	System.out.println(b);
}
  • foreach中的循环变量相当于一个临时变量,一次赋值给这个临时变量,这个临时变量不识数组元素,只是保存了数组元素的值。(如果希望改变数组元素的值,则不能使用foreach循环)
  • foreach循环迭代数组元素时,并不能改变数组元素的值,因此不要对foreach的循环变量进行赋值。

4.6 深入数组

数组元素和数组变量在内存里是分开存放的。

4.6.1 内存中的数组

  • 数组引用变量是一个局部变量时,它被存储在栈内存中。
  • 数组对象被存储在堆内存中。
  • 引用变量是访问真实对象的根本方式。
  • 只有当一个对象没有任何引用变量引用它时,系统的垃圾回收器才会在合适的时候回收它。为了让垃圾回收机制回收一个数组所占的空间,可以将该数组变量赋为null。
  • 数组要看成两个部分:数组引用,引用变量;实际的数组对象,堆内存里运行,不法直接访问,只能通过数组引用变量来访问。
  • 二维数组:实质上还是一维数组,只是其数组元素也是引用指向一维数组。
int[][] a;
a = new int[4][];

int [][] b = new int[3][4];
//使用静态初始化一个二维数组
String[][] str1 = new String[][]{new String[3], new String[]{"hello"}};
  • 工具类Arrays:包含一些static修饰的方法可以直接操作数组。
 Arrays.equals(a,a2);//两个数组相同,返回true
 Arrays.sort(b);//对数组b进行排序
 Arrays.toString(b);//将一个数组转化为一个字符串
  • 如果程序中有多个类型相同的变量,且具有逻辑的整体性,则可以定义为一个数组。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值