流程控制和数组(上)

文章目录

  • 顺序结构
  • 分支结构
  • 循环结构
  • 控制循环结构
  • 数组类型
    • 数组的初始化
    • foreach循环(没什么实际意义)
    • 数组在内存中的运行机制
      • 内存中的数组
      • 基本类型数组的初始化
      • 引用类型的初始化

顺序结构

    在任何编程语言中最常见的程序结构就是顺序结构。顺序结构就是程序从上到下逐行的执行,中间没有任何判断和跳转。

分支结构

    Java提供了两种常见的分支控制结构:if语句和switch语句,其中if语句使用布尔表达式或布尔值作为分支条件来进行分支控制;而switch语句则用于对多个整型值进行匹配,从而实现分支控制。

循环结构

循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段代码被重复执行的代码称为循环体。当反复执行这个循环体时,需要在合适的时候把循环条件改为假,从而结束循环,否则循环体将一直执行下去,形成死循环。

控制循环结构

break和continue的区别:

  • 使用break结束循环
  • continue忽略本次循环剩下的语句

    return关键字,return关键字并不是专门用于结束循环体的,return的功能是结束一个方法。Java中的大部分循环都在方法中执行,一旦在循环体内执行到一个return语句,return语句就会结束该方法,循环自然也随之结束。

数组类型

Java 的数组要求所有数组元素具有相同的数据类型。因此,在一个数组中,数组元素的类型是唯一的,即一个数组里只能存储一种数据类型的数据,而不能存储多种数据类型的数据。
Java支持两种语法格式来定义数组:

type [] arrayName;(通常推荐使用这种)
type arrayName[];

数组是一种引用类型的变量,因此使用它定义一个变量时,仅仅表示定义了一个引用变量(也就是定义了一个指针),这个引用变量还未指向任何有效的内存因此定义数组时不能指定数组的长度。而且由于定义数组只是定义了一个引用变量,并未指向任何有效的内存空间,所以还没有内存空间来存储数组元素,因此这个数组也不能使用,只有对数组进行初始化后才可以使用。

数组的初始化

数组初始化有两种方式:

  • 静态初始化:初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组长度
  • 动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值
/**静态初始化*/
int [] intArr;//定义一个int数组类型的变量,变量名为intArr
intArr= new int []{5,6,7,8};
/*动态初始化*/
int [] prices=new int [];

foreach循环(没什么实际意义)

    使用foreach循环,这种循环遍历数组和集合更加简洁。使用foreach循环遍历数组和集合元素时,无须获得数组和集合长度,无须根据索引来访问数组元素和集合元素,foreach循环自动遍历数组和集合的每个元素。
foreach循环的语法格式如下:

for(type variableName:array|collection)
{
  //type 数组元素或者集合元素的类型,variableName是一个形参名,foreach循环将自动将数组元素、集合元素赋给该变量
  // variableName自动迭代每个元素
}

示例:

public class ForEachTest
{
	public static void main(String[] args)
	{
		String [] books={"Java EE 企业应用实战","疯狂的Java讲义""疯狂英语"};
		for (String book:books)
		{
			System.out.println(book);
		}
	}
}

数组在内存中的运行机制

内存中的数组

数组引用变量只是一个引用,这个引用变量可以指向任何有效的内存,只有当该引用指向有效内存后,才可通过该数组变量来访问元素。
实际的数组对象被存储在堆(heap)内存中:如果引用该数组对象的数组引用变量是一个局部变量,那么它被存储在栈(stack)内存中。数组在内存中的存储示意图如图4.2所示:
流程控制和数组(上)_第1张图片
注意:定义并初始化一个数组后,在内存中分配了两个空间,一个用于存放数组的引用变量,另一个用于存放数组本身。

public class ArrayInRam
{
	public static void main(String [] args)
	{
		//定义并初始化数组,使用静态初始化
		int [] a={5,6,7};
		//定义并初始化数组。使用动态初始化
		int [] b=new int [4];
		//输出b数组的长度
		System.out.println("b数组的长度为:"+b.length);
		//循环输出a数组的元素
		for(int i=0,len=a.length;i<len;i++)
		{
			System.out.println(a[i]);
		}
		//循环输出b数组的元素
		for(int i=0,len=b.length;i<len;i++)
		{
			System.out.println(b[i]);
		}
		//因为a是int[]类型,b也是int[]类型,所以可以将a的值赋给b,也就是让b引用指向a引用指向的数组
		b=a;
		//再次输出b数组的长度
		System.out.println("b数组的长度为:"+b.length);
	}
}

输出
流程控制和数组(上)_第2张图片
下面将结合示意图说明上述程序的运行过程:
流程控制和数组(上)_第3张图片

基本类型数组的初始化

public class PrimitiveArrayTest
{
	public static void main(String [] args)
	{
		//定义一个int[]类型的数组变量
		int [] iArr;
		//动态初始化数组,数组长度为5
		iArr=new int[5];
		//采用循环方式为每个数组元素赋值
		for(int i=0;i<iArr.length;i++)
		{
			iArr[i]=i+10;
		}
	}
}

流程控制和数组(上)_第4张图片
流程控制和数组(上)_第5张图片

引用类型的初始化

class Person
{
	public int age;
	public double height;
	public void info()
	{
		System.out.println("我的年龄是:"+age+",我的身高是:"+height);
	}
}
public class ReferenceArrayTest
{
	public static void main(String[] args)
	{
		//定义一个students数组变量,基本类型是Person
		Person [ ] students;
		students=new Person[2];
		Person zhang=new Person();
		zhang.age=15;zhang.height=158;
		Person lee=new Person();
		lee.age=16;
		lee.height=161;
		students[0]=zhang;
		students[1]=lee;
		lee.info();
		students[1].info();
	}
}

流程控制和数组(上)_第6张图片
流程控制和数组(上)_第7张图片

你可能感兴趣的:(Java学习总结)