面向对象 第三课

面向对象 第三课
数组
数组是存储在一个连续的内存块中的元素集合。
数组中的每个元素必须是相同的数据类型,并且通过索引进行区分。数组中的第一个元素的索引为0。


为什么要用数组
单一值类型变量有时候很难满足应用程序的设计需求。
数组类型变量可以同时存储多个同类型基础数据类型变量或对象。


创建数组有两个步骤:
1、声明一个数组变量;
语法:
数据类型[] 数组变量名;
或者
数据类型 数组变量名[];
例如:int[] sums;或int sums[];


2、使用new关键字初始化数组,并指定数组的大小。
语法:
数组变量 = new 数组类型[数组长度];
例如:sums = new int[20];


访问数组
数组中的元素通过用对该数组的变量名(引用)加上一个用于描述我们要访问数组哪一个元素的整型索引值来访问。


数组的引用
double[] rainfall = new double[12];


数组在内存中是地址连续的一串空间。


数组的长度
因为数组对象的内存空间是连续的。所以在分配空间的时候必须知道数组的长度。而一旦分配好后就不能修改了。


在使用访问数组元素时,特别要注意,不要超出数组所分配的空间,否则会出现运行时异常:ArrayIndexOutOfBoundsException


java语言的数组与其他语言的数组不同之处在于:java中的数组是对象,这样做的好处之一为java中的每个数组都有一个length属性来代表数组的大小,可以极大地减少数组访问越界的可能性。


引用数组
前面我们讨论的都是存放基本数据类型的数组,接下来我们看看引用类型的数组。


比如我们有一个Person类,现在利用Person类创建了20个不同的对象,我想把这些对象装在一个数组中,该怎么办?


一个对象数组被声明和创建,同基本数据类型数组被创建一样,分两步:
第一步,定义数组 Person[] personArr;
第二步:创建数组 personArr = new Person[20];


数组初始化
数组的初始化有两种方式:静态初始化和动态初始化


静态初始化:数组初始化程序在创建数组时,有两种写法:
int[] odds = new int[]{1,3,5,7,9};
String[] weekend = new String[]{"星期六","星期天"};
或者不需要使用new关键字。
int[] odds = {1,3,5,7,9};
String[] weekend = {"星期六","星期天"};
值得注意的是:数组初始化程序只能用在声明新数组引用时。
String[] weekend;
weekend = {"星期六","星期天"};则不能通过编译。


动态初始化:通过new关键字开辟指定内存空间,然后在赋值。


数组复制


System.arraycopy(num, 0, this.num,0 ,5)
五个参数:第一个参数是原数组名;第二个参数是原数组下标索引起始位置;第三个元素是要复制的目标数组名;第四个元素是目标数组下标索引起始位置;第五个参数是要复制的数组的元素个数。此方法一般用于基本类型数组。


引用数组的复制
分为浅复制(浅拷贝)和深复制(深拷贝)


浅复制它是通过复制目标数组元素的值完成复制,这种复制方式的特点是原数组与目标数组的对应元素指向同一对象,这种方式就叫浅复制。


深复制
深复制就是目标数组通过实例化对象赋值给数组元素,将原数组元素指向的对象的成员数据复制给目标数组元素指向的对象。


用深复制的时候需要谨慎使用,因为深复制需要开辟更多的内存空间。


浅拷贝目标数组的元素的值改变了,同时也会改变原数组的元素的值


深拷贝目标数组的元素的值改变了,不会改变原数组的元素的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值