《疯狂Java讲义(第4版)》-----第4章【流程控制与数组】

Java7增强后的switch语句

switch后的控制表达式只能是byte、short、char、int、枚举类型和java.lang.String类型。

char c = 'A';
switch(c){
	case 'A':
		System.out.println("Excellent");
		break;
	case 'B':
		System.out.println("Pass");
		break;
	default:
		System.out.println("Fail");
}

Break和Continue操作外层循环

public class HelloWorld{
	
	public static void main(String[] args){
		out://这个out用来标记下面的这个for循环
		for(int i=1;i<=3;i++){
			for(int j=1;j<=3;j++){
				if(j==2){
					break out;//结束out下面的那个for循环
				}
				System.out.println("i="+i+",j="+j);
			}
		}
		
	}
}

输出:
i=1,j=1

continue有类似用法,不再赘述。

数组

定义数组

//定义数组方式一(推荐使用这种方式):
int[] a;

//定义数组方式二:
int a[];

注意:上面是在定义数组,[]里面一定不要有数字!定义数组不可指定长度。

数组初始化

数组初始化,就是为数组元素分配内存空间,并为每个元素赋初始值。

静态初始化

//先定义一个数组a
int[] a;
//静态初始化
a = new int[]{1,2,3};

上面代码可以简化为:int[] a = new int[]{1,2,3};
上面代码可以进一步简化为:int[] a = {1,2,3};

动态初始化

int[] a = new int[6];//定义和初始化简化在一起完成
数组元素类型数组元素初始值
byte,short,int,long0
float,double0.0
char‘\u0000’
booleanfalse
引用类型(类、接口、数组)null

Java的增强for循环过程中,试图修改数组元素的值,其实并修改不了!!如下:

public class HelloWorld{
	
	public static void main(String[] args){
		
		String[] fruits = {"apple","pear","banana"};
		
		//尝试在增强for循环的过程中改变fruits的元素的值
		for(String fruit : fruits){
			fruit = "fruit";
			System.out.print(fruit+" ");
		}
		System.out.println();
		
		//发现上面并没有改变fruits数组中的元素值,说明for循环过程中,
		//fruit指向的仅仅是一个临时变量,并不是对fruits数组元素的引用
		for(String fruit : fruits){
			System.out.print(fruit+" ");
		}
	}
}

输出:
fruit fruit fruit
apple pear banana

数组的内存分配

数组是一种引用数据类型,数组引用变量只是一个引用,数组引用变量在栈内存中,而数组元素在堆内存里。

实例一

public class HelloWorld{
	
	public static void main(String[] args){
		
		int[] a = {1,2,3};
		int[] b = new int[4];
		
		for(int i=0;i<a.length;i++){
			System.out.print("a["+i+"]="+a[i]+" ");
		}
		System.out.println();
		
		for(int i=0;i<b.length;i++){
			System.out.print("b["+i+"]="+b[i]+" ");
		}
		System.out.println();
		
		b=a;
		for(int i=0;i<b.length;i++){
			System.out.print("b["+i+"]="+b[i]+" ");
		}
	}
}

输出:

a[0]=1 a[1]=2 a[2]=3
b[0]=0 b[1]=0 b[2]=0 b[3]=0
b[0]=1 b[1]=2 b[2]=3

上述程序的内存分配及变化情况:
在这里插入图片描述

在这里插入图片描述
实例二(引用类型的数组)

public class HelloWorld{
	
	public static void main(String[] args){

		//定义一个数组		
		Person[] students = new Person[2];

		//定义一个lisi
		Person lisi = new Person();
		lisi.setName("lisi");
		lisi.setSex("mlae");
		
		//定义一个zhangsan
		Person zhangsan = new Person();
		zhangsan.setName("zhangsan");
		zhangsan.setSex("female");
		
		students[0] = lisi;
		students[1] = zhangsan;

		students[0].info();
		lisi.info();
	
		students[1].info();
		zhangsan.info();
		
	}
}

class Person{
	private String name;
	private String sex;

	public void setName(String name){
		this.name = name;
	}
	public String getName(){
		return this.name;
	}

	public void setSex(String sex){
		this.sex = sex;
	}	
	public String getSex(){
		return this.sex;
	}

	public void info(){
		System.out.println("My name is "+name+". And I am "+sex+".");
	}
}

输出:
My name is lisi. And I am mlae.
My name is lisi. And I am mlae.
My name is zhangsan. And I am female.
My name is zhangsan. And I am female.

内存分配如下:
在这里插入图片描述
实例三(二维数组的真实内存情况)
二维数组本质是一维数组,数组元素是一维数组。

int[][] a = new int[3][];
a[1] = new int[2];
a[1][1] = 666;

在这里插入图片描述

java.util.Arrays

Java8在java.util.Arrays工具类里增强了很多用于并行的函数,这里不会看这些,仅仅关注常用的几个函数。具体看官方文档,通俗易懂。

示例:

import java.util.Arrays;

public class HelloWorld{

	public static void main(String[] args){
		
		int[] a = {4,1,3,2,6,5};
		//快速排序,并输出结果
		Arrays.sort(a,0,a.length);
		for(int x : a){
			System.out.print(x+" ");
		}
		System.out.println();
		
		//二分查找6所在数组a的位置(数组下标)
		System.out.println(Arrays.binarySearch(a,0,a.length,6));

		//复制a[1]到a[3]给数组b,注意下面函数左闭右开
		int[] b = Arrays.copyOfRange(a,1,4);
		for(int x : b){
			System.out.print(x+" ");
		}
		System.out.println();

		
		int[] c = new int[6];
		//数组c全部赋值为6
		Arrays.fill(c,0,c.length,6);
		for(int x : c){
			System.out.print(x+" ");
		}
		System.out.println();
		

		//判断数组c与数组a是否相等
		System.out.println(Arrays.equals(a,c));

		//把数组a也全部赋值为6,再和c比较是否相等
		Arrays.fill(a,0,a.length,6);
		System.out.println(Arrays.equals(a,c));
		
		//把数组a转换为字符串输出
		System.out.println(Arrays.toString(a));
	}
}

输出:
1 2 3 4 5 6
5
2 3 4
6 6 6 6 6 6
false
true
[6, 6, 6, 6, 6, 6]

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值