1、Java面向对象程序设计,主讲教师:郑大庆上海财经大学 信息管理与工程学院,第五讲 数组,2,上海财经大学 信息管理与工程学院,数组的特点 声明数组 数组的创建与初始化 多维数组 数组拷贝,数组,3,上海财经大学 信息管理与工程学院,数组定义,“An array is simply a sequence of either objects or primitives, all the same type and packaged together under one identifier name.”,4,上海财经大学 信息管理与工程学院,数组的特点,数组中的元素都是同一种类型。 数组的长度在
2、创建(不是在声明时指定)的时候确定,并且在创建后固定不变。 如果要建立存储不同类型数据的集合,或者要求集合的长度可以动态变化,可以使用Collection(集合)类。,5,上海财经大学 信息管理与工程学院,可以声明基本类型和类类型的数组声明包含两部分:数组类型与数组名称。数组声明格式:int i,j,k; Date d ; /javaint i ; Date d; / java, C/C+,数组的声明,6,上海财经大学 信息管理与工程学院,数组的声明,在Java中数组作为类来处理,所以数组声明时并不创建实例对象,而是创建一个对该数组的引用。数组的长度不是在声明时指定,而是在创建时由所开辟的内存
3、单元数目确定,7,上海财经大学 信息管理与工程学院,1. 使用new来创建数组(开辟数据区) 格式:new elementTypearraySize 例: s = new char20; /创建有20个字符的数组d = new Date100; /创建100个Date的引用数组创建字符数据,会被初始化为u0000,对象数组被初始化为null。2.用初始值创建数组 例: int a = 1, 2, 3; /创建有3个元素的整型数组 String names = “Jack”, “Wang”, “Lee”; int a = 1, 2, 3; Date d = new Date( ), new Da
4、te( ), new Date( ),数组的创建,8,上海财经大学 信息管理与工程学院,用new来创建数组,s ,1 int s ; 2 s = new int3;,数据的长度 数组在创建后长度不变 arrayname.length可以得到数组的长度; int a =new int6; a0=10; a =new int10;,9,上海财经大学 信息管理与工程学院,数组在创建后,其元素的自动初始化数值数组 0 或 0.0字符数组 - u0000对象数组 - null直接用初始值创建数组 int a = 1, 2, 3; /简单数据类型数组 Date d = new Date( ), new D
5、ate( ), new Date( ) /对象数组,数组的初始化,10,上海财经大学 信息管理与工程学院,归纳:简单数据类型数组的初始化,直接初始化 int a = 1, 2, 3, 4, 5 ; for(int i = 0; i a.length; i+) ai=i; 先声明后初始化 int a ; a = new int 10 ; 在声明的同时初始化int a = new int 10 ;/默认初值,11,上海财经大学 信息管理与工程学院,判断下列语句(组)的正误,int a =new int3;,int a3 =new int3;,int a ; a =1,2,3;,int a ; a
6、=1,2,3;,错!声明时不能指定数组长度,对!先声明,后创建,错!a 不是数组的标识符,对! a是数组的标识符,12,上海财经大学 信息管理与工程学院,对象类型的数组,除了基本类型以外,还可以创建对象类型的数组。Date d ; d = new Date10; /创建10个引用 创建10个Date对象:d0 = new Date( ); d1 = new Date( );,0x0011,0xAAA0,0xAAAF,13,上海财经大学 信息管理与工程学院,归纳:复合数据类型数组的初始化,Date c = new Date4;for(int i = 0; i c.length; i+) ci =
7、 new Date() ;Date d = new Date(), new Date(), new Date() ;,14,上海财经大学 信息管理与工程学院,声明方法int a ;或int a;或int a;或int a ;实例化 a = new int44; /直接为每一维分配内存,生成规则数组 a = new int4 ; / 只有最后维可以不给值,其它都要给,可生成不规则数组 a0 = new int10 ; a1 = new int5;/不规则数组 int b= 1,3,2,4,1,2,3,4 ;/不规则数组,多维数组,15,上海财经大学 信息管理与工程学院,多维数组的创建,int a
8、 ; a=new int4 ; a0=new int3; a1=new int2;/不规则数组 ,0x0011,0xAAA0,0xAAAC,16,上海财经大学 信息管理与工程学院,多维数组的长度:length,数组成员变量length : 数组元素的个数int a = new int 32;a.length = 3 ;a0.length = 2 ;对于不规则数组:int a = new int 3 ; / a.length = 3 ;a0=new int4; /a0.length = 4 ;a1=new int2; /a1.length = 2 ;,越界例外:用下标变量访问数组元素(0leng
9、th-1),越界时会产生Exception:ArrayIndexOutofBounds,17,上海财经大学 信息管理与工程学院,多维数组示例,public class ArrayOfArraysDemo2 /为一个二维数组赋值public static void main(String args) int aMatrix = new int4; /populate matrix for (int i = 0; i aMatrix.length; i+) aMatrixi = new int5; /create sub-array for (int j = 0; j aMatrixi.lengt
10、h; j+) aMatrixij = i + j; /print matrix for (int i = 0; i aMatrix.length; i+) for (int j = 0; j aMatrixi.length; j+)System.out.print(aMatrixij + “ “); System.out.println(); ,18,上海财经大学 信息管理与工程学院,数组一旦创建,其大小不可变,但已有的数组变量可指向全新的数组;该数组原指的内容丢失int a = new int6;a = new int10 ; / 不必重新声明 a 数组变量之间赋值是引用赋值。 1 int
11、a = new int 6; 2 int b ; 3 b = a ;,b,0xabcd,0xabcd,数组变量的赋值,a,0xabcd,19,上海财经大学 信息管理与工程学院,数组数据的复制,通过拷贝数组的函数arrayCopy()。System.arrayCopy(Object source, int srcIndex, Object dest, int destIndex, int length),数组拷贝,20,上海财经大学 信息管理与工程学院,数组拷贝示例,public class ArrayCopyDemo public static void main(String args) c
12、har copyFrom = d, e, c, a, f, f, e, i, n,a, t, e, d ;char copyTo = new char7; System.arraycopy(copyFrom, 2, copyTo, 0, 7); System.out.println(new String(copyTo); ,21,上海财经大学 信息管理与工程学院,数组拷贝示例,运行结果:,22,上海财经大学 信息管理与工程学院,下列哪些数组声明是合法的?,int i=new int(30); double d=new double30; Integer r=new Integer(130);
13、int i=(3,4,3,2); float f=2.3,4.5,5.6; char c= new char(); Integer r=new Integer2;,23,上海财经大学 信息管理与工程学院,课堂练习,创建一个Bike类对象的二维不规则数组,第一维长度为2,第二维长度分别为3,2.,24,上海财经大学 信息管理与工程学院,参考答案:,Bike b=new Bike2; b0=new Bike3; b1=new Bike2; b00=new Bike(); b01=new Bike(); b02=new Bike(); b10=new Bike(); b11=new Bike(); Bike b=new Bike(), new Bike(), new Bike(), new Bike(), new Bike(),25,上海财经大学 信息管理与工程学院,Q&A,多谢!,