您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 第2章Java基础知识--对象数组及二维数组
第2章对象数组及二维数组课程回顾:OO:属性+行为特性:封装+继承+多态第2章对象数组及二维数组Java基础知识变量、数据类型、判定语句、循环语句第2章对象数组及二维数组用数组存储对象对数组元素进行排序在已排序的数组中查找二维数组数组元素可以是任何类型(只要所有元素具有相同的类型)数组元素可以是基本数据类型数组元素也可以是类对象,称这样的数组为对象数组。在这种情况下,数组的每一个元素都是一个对象的引用。用数组存储对象例如,BankAccount[]accounts;或BankAccountaccounts[];定义了一个存储BankAccount类对象的数组。与C、C++不同,Java在数组的定义中并不为数组元素分配内存,因此[]中不需指明数组中元素的个数,即数组长度,而且对于如上定义的数组是不能引用的,必须经过初始化才可以引用。用数组存储对象对象数组的初始化分为静态初始化和动态初始化静态初始化:在定义数组的同时对数组元素进行初始化,例如:BankAccount[]accounts={newBankAccount(“Zhang,100.00),newBankAccount(“Li,2380.00),newBankAccount(“Wang,500.00),newBankAccount(“Liu,175.56),newBankAccount(“Ma,924.02)};用数组存储对象动态初始化:使用运算符new为数组分配空间,对于基本类型的数组,其格式如下:typearrayName[]=newtype[arraySize];type[]arrayName=newtype[arraySize];对于对象数组,使用运算符new只是为数组本身分配空间,并没有对数组的元素进行初始化。即数组元素都为空,如图。数组元素未初始化的对象数组用数组存储对象此时不能访问数组的任何元素,必须对数组元素进行初始化后,才能访问。因此,对于对象数组,需要经过两步空间分配。首先给数组分配空间:typearrayName[]=newtype[arraySize];然后给每一个数组元素分配空间:arrayName[0]=newtype(paramList);…arrayName[arraySize-1]=newtype(paramList);用数组存储对象例如://定义一个String类型的数组StringstringArrar[];//给数组stringArray分配3个引用空间,每个引用值为null。stringArray=newString[3];//下面给数组元素分配空间stringArray[0]=newString(“how”);stringArray[1]=newString(“are”);stringArray[2]=newString(“you”);用数组存储对象当给数组元素分配了内存空间后,就可以引用了。数组元素的引用方式为:arrayName[index]index为数组下标,下标从0开始,一直到数组长度减1。下标可以是整型常数或表达式。Java对数组元素要进行越界检查以保证安全性。同时,对于每个数组都有一个属性length指明它的长度(这里即是数组元素的个数)。例如,stringArray.length指明数组stringArray的长度。用数组存储对象对象数组应用举例使用数组对一个班的学生信息及考试成绩进行存储,学生信息包括学号、姓名、三门课(英语、数学、计算机)的成绩及总成绩。用数组存储对象首先定义学生类Student:属性包括:学号(id),姓名(name),英语成绩(eng),数学成绩(math),计算机成绩(comp),总成绩(sum)。方法包括:构造方法,get方法,set方法,toString方法,equals方法,compare方法(比较两个学生的总成绩,结果分大于,小于,等于),sum方法(计算总成绩)。为了能够将Student类对象直接存储,应使其加入串行化协议。代码如下:用数组存储对象//Student.javaimportjava.io.*;publicclassStudentimplementsSerializable{privateStringid;//学号privateStringname;//姓名privateinteng;//英语成绩privateintmath;//数学成绩privateintcomp;//计算机成绩privateintsum;//总成绩用数组存储对象//构造方法publicStudent(Stringid,Stringname,inteng,intmath,intcomp){this.id=id;this.name=name;this.eng=eng;this.math=math;this.comp=comp;sum();//计算总成绩}用数组存储对象//构造方法publicStudent(Students){this.id=s.id;this.name=newString(s.name);this.eng=s.eng;this.math=s.math;this.comp=s.comp;sum();//计算总成绩}用数组存储对象//set方法publicvoidsetId(Stringid){this.id=id;}publicvoidsetName(Stringname){this.name=name;}publicvoidsetEng(inteng){this.eng=eng;sum();//计算总成绩}用数组存储对象//set方法publicvoidsetMath(intmath){this.math=math;sum();//计算总成绩}publicvoidsetComp(intcomp){this.comp=comp;sum();//计算总成绩}用数组存储对象//get方法publicStringgetId(){returnid;}publicStringgetName(){returnname;}publicintgetEng(){returneng;}publicintgetMath(){returnmath;}publicintgetComp(){returncomp;}publicintgetSum(){returnsum;}用数组存储对象//计算总成绩voidsum(){this.sum=eng+math+comp;}//toString方法publicStringtoString(){returngetId()+\t+getName()+\t+getEng()+\t+getMath()+\t+getComp()+\t+getSum();}用数组存储对象//比较两个Student对象的值是否相等publicbooleanequals(Objectx){if(this.getClass()!=x.getClass())returnfalse;Studentb=(Student)x;return(this.getId().equals(b.getId()));}用数组存储对象//比较成绩大小,当前对象成绩比参数对象成绩大时返回1,//相等时返回0,其它返回-1.publicintcompare(StudentA){if(this.getSum()A.getSum())return1;elseif(this.getSum()==A.getSum())return0;elsereturn-1;}用数组存储对象下面定义班级类StudentClass:属性包括:班级名称(name),容量(capacity),学生(students),实际人数(size)。方法包括:构造方法,get方法,set方法,toString方法。用数组存储对象//StudentClass.java//定义学生班级类StudentClasspublicclassStudentClass{privateStringname;//班级名称staticintcapacity=40;//最大容量privateStudentstudents[];//学生privateintsize;//实际人数用数组存储对象//构造方法publicStudentClass(Stringname,intsize){this.name=name;this.size=size;students=newStudent[capacity];}用数组存储对象//get方法publicStringgetName(){returnname;}publicintgetCapacity(){returncapacity;}publicStudent[]getStudents(){returnstudents;}publicintgetSize(){returnsize;}用数组存储对象//set方法publicvoidsetName(Stringname){this.name=name;}publicvoidsetCapacity(intcapacity){this.capacity=capacity;}publicvoidsetSize(intsize){this.size=size;}publicvoidsetStudents(Student[]students){for(inti=0;isize;i++)this.students[i]=newStudent(students[i]);}用数组存储对象//toString方法publicStringtoString(){Strings;s=班级:+name+\t+容量:+capacity+\t+实际人数:+size+\n\n;s=s+学号+\t+姓名+\t+英语+\t+数学+\t+计算机+\t+总成绩\n;for(inti=0;isize;i++)s=s+students[i].getId()+\t+students[i].getName()+\t+students[i].getEng()+\t+students[i].getMath()+\t+students[i].getComp()+\t+students[i].getSum()+\n;returns;}}用数组存储对象定义测试类Tester1:为测试简单,仅生成具有5名学生的班级,5名学生的信息从键盘输入,为了避免以后再重复输入,可将输入的学生信息保存到文件中。用数组存储对象importjava.io.*;publicclassTester1{publicstaticvoidmain(Stringargs[]){Studentstudents[];StudentClassaClass=newStudentClass(软件06,5);students=newStudent[5];for(inti=0;i5;i++)students[i]=newStudent(getAStudent(i+1));aClass.setStudents(students);System.out.println(aClass);用数组存储对象//将学生信息保存到文件stu.ser中。try{FileOutputStreamfo=newFileOutputStream(stu.ser);ObjectOutputStreamso=newObjectOutputStream(fo);for(inti=0;i5;i++)so.writeObject(students[i]);so.close();}catch(Exceptione){System.out.println(e);}}用数组存储对象//从键盘输入一个学生的信息publicstaticStudentgetAStudent(inti){Studentstudenti;System.out.println(输入第+i+个学生的信息:);System.out.print(学号
本文标题:第2章Java基础知识--对象数组及二维数组
链接地址:https://www.777doc.com/doc-2246722 .html