版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章 对象数组及二维数组,课程回顾: OO:属性+行为 特性:封装+继承+多态,第2章 对象数组及二维数组,Java基础知识 变量、数据类型、判定语句、循环语句,第2章 对象数组及二维数组,用数组存储对象 对数组元素进行排序 在已排序的数组中查找 二维数组,数组元素可以是任何类型(只要所有元素具有相同的类型) 数组元素可以是基本数据类型 数组元素也可以是类对象,称这样的数组为对象数组。在这种情况下,数组的每一个元素都是一个对象的引用。,用数组存储对象,例如, BankAccount accounts; 或 BankAccount accounts ; 定义了一个存储BankAccount类对
2、象的数组。 与C、C+不同,Java在数组的定义中并不为数组元素分配内存,因此 中不需指明数组中元素的个数,即数组长度,而且对于如上定义的数组是不能引用的,必须经过初始化才可以引用。,用数组存储对象,对象数组的初始化 分为静态初始化和动态初始化 静态初始化:在定义数组的同时对数组元素进行初始化, 例如: BankAccount accounts = new BankAccount(“Zhang, 100.00), new BankAccount(“Li, 2380.00), new BankAccount(“Wang, 500.00), new BankAccount(“Liu, 175.56
3、), new BankAccount(“Ma, 924.02) ;,用数组存储对象,动态初始化:使用运算符new为数组分配空间,对于基本类型的数组,其格式如下: type arrayName =new typearraySize; type arrayName=new typearraySize; 对于对象数组,使用运算符new只是为数组本身分配空间,并没有对数组的元素进行初始化。即数组元素都为空,如图。,数组元素未初始化的对象数组,用数组存储对象,此时不能访问数组的任何元素,必须对数组元素进行初始化后,才能访问。因此,对于对象数组,需要经过两步空间分配。首先给数组分配空间: type arr
4、ayName =new typearraySize; 然后给每一个数组元素分配空间: arrayName0=new type(paramList); arrayNamearraySize-1=new type(paramList);,用数组存储对象,例如: /定义一个String类型的数组 String stringArrar; /给数组stringArray分配3个引用空间,每个引用值为null。 stringArray = new String3; /下面给数组元素分配空间 stringArray0=new String(“how”); stringArray1=new String(“a
5、re”); stringArray2=new String(“you”);,用数组存储对象,当给数组元素分配了内存空间后,就可以引用了。数组元素的引用方式为: arrayNameindex index为数组下标,下标从0开始,一直到数组长度减1。下标可以是整型常数或表达式。 Java对数组元素要进行越界检查以保证安全性。同时,对于每个数组都有一个属性length指明它的长度(这里即是数组元素的个数)。例如,stringArray.length指明数组stringArray的长度。,用数组存储对象,对象数组应用举例,使用数组对一个班的学生信息及考试成绩进行存储,学生信息包括学号、姓名、三门课(英
6、语、数学、计算机)的成绩及总成绩。,用数组存储对象,首先定义学生类Student: 属性包括:学号(id),姓名(name),英语成绩(eng),数学成绩(math),计算机成绩(comp),总成绩(sum)。 方法包括:构造方法,get方法,set方法,toString方法,equals方法,compare方法(比较两个学生的总成绩, 结果分大于,小于,等于),sum方法(计算总成绩)。 为了能够将Student类对象直接存储,应使其加入串行化协议。代码如下:,用数组存储对象,/Student.java import java.io.*; public class Studentimplem
7、ents Serializable private String id;/学号 private String name;/姓名 private int eng;/英语成绩 private int math; /数学成绩 private int comp; /计算机成绩 private int sum;/总成绩,用数组存储对象,/构造方法 public Student(String id,String name,int eng,int math,int comp) this.id=id; =name; this.eng=eng; this.math=math; p=comp;
8、sum(); /计算总成绩 ,用数组存储对象,/构造方法 public Student(Student s) this.id=s.id; =new String(); this.eng=s.eng; this.math=s.math; p=p; sum(); /计算总成绩 ,用数组存储对象,/set方法 public void setId(String id) this.id=id; public void setName(String name) =name; public void setEng(int eng) this.eng=eng;
9、sum(); /计算总成绩 ,用数组存储对象,/set方法 public void setMath(int math) this.math=math; sum(); /计算总成绩 public void setComp(int comp) p=comp; sum(); /计算总成绩 ,用数组存储对象,/get方法 public String getId() return id; public String getName() return name; public int getEng() return eng; public int getMath() return math; ,publi
10、c int getComp() return comp; public int getSum() return sum; ,用数组存储对象,/计算总成绩 void sum() this.sum=eng+math+comp; /toString方法 public String toString() return getId() + t+getName() + t+getEng() + t+getMath() + t+getComp() + t+getSum(); ,用数组存储对象,/比较两个Student对象的值是否相等 public boolean equals(Object x) if (t
11、his.getClass() != x.getClass() return false; Student b = (Student) x; return (this.getId().equals(b.getId(); ,用数组存储对象,/比较成绩大小,当前对象成绩比参数对象成绩大时返回1, /相等时返回0,其它返回-1. public int compare(Student A) if(this.getSum()A.getSum() return 1; else if(this.getSum()=A.getSum() return 0; else return -1; ,用数组存储对象,下面定
12、义班级类StudentClass: 属性包括:班级名称(name),容量(capacity),学生(students),实际人数(size)。 方法包括:构造方法,get方法,set方法, toString方法。,用数组存储对象,/StudentClass.java /定义学生班级类StudentClass public class StudentClass private String name; /班级名称 static int capacity = 40; /最大容量 private Student students; /学生 private int size; /实际人数,用数组存储对
13、象,/构造方法 public StudentClass(String name, int size) = name; this.size = size; students = new Studentcapacity; ,用数组存储对象,/get方法 public String getName() return name; public int getCapacity() return capacity; public Student getStudents() return students; public int getSize() return size;,用数组存储对
14、象,/set方法 public void setName(String name) = name; public void setCapacity(int capacity) this.capacity = capacity; public void setSize(int size) this.size = size; public void setStudents(Student students) for (int i = 0; isize; i+) this.studentsi = new Student(studentsi); ,用数组存储对象,/toString
15、方法 public String toString() String s; s = 班级: + name +t + 容量: + capacity + t + 实际人数: + size +nn; s = s + 学号+t + 姓名+t + 英语+t + 数学+t + 计算机+t + 总成绩n; for (int i=0; isize; i+) s = s + studentsi.getId()+t+studentsi.getName()+t +studentsi.getEng()+t+studentsi.getMath()+t +studentsi.getComp()+t+studentsi.g
16、etSum()+n; return s; ,用数组存储对象,定义测试类Tester1:为测试简单,仅生成具有5名学生的班级,5名学生的信息从键盘输入,为了避免以后再重复输入,可将输入的学生信息保存到文件中。,用数组存储对象,import java.io.*; public class Tester1 public static void main(String args) Student students; StudentClass aClass = new StudentClass(软件06,5); students=new Student5; for (int i=0; i5; i+) s
17、tudentsi = new Student(getAStudent(i+1); aClass.setStudents(students); System.out.println(aClass);,用数组存储对象,/将学生信息保存到文件stu.ser中。 try FileOutputStream fo = new FileOutputStream(stu.ser); ObjectOutputStream so = new ObjectOutputStream(fo); for (int i=0; i5; i+) so.writeObject(studentsi); so.close(); ca
18、tch(Exception e) System.out.println(e) ; ,用数组存储对象,/从键盘输入一个学生的信息 public static Student getAStudent(int i) Student studenti; System.out.println(输入第 + i + 个学生的信息:); System.out.print(学号:); String id = Keyboard.getString(); System.out.print(姓名:); String name = Keyboard.getString(); System.out.print(英语成绩:); int eng = Keyboard.getInteger(); System.out.print(数学成绩:); int math = Keyboard.getInteger(); System.out.print(计算机成绩:); int comp = Keyboard.getI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 佛山市交通投资集团有限公司招聘考试真题2025
- 羽毛球场地租用合同样本(2026版)
- 徐州市铜山区学校选调教师笔试真题2025
- 辽宁省妇幼保健院招聘院聘工作人员笔试真题2025
- (正式版)DB34∕T 4211-2022 《秸秆好氧快速堆腐还田技术规程》
- 2026 年防范极端降雨守护山区群众安全
- 2026 年高中秋季开学第一课致敬时代楷模青年励志思政班会
- 2026 年初中秋季开学第一课台风预警信号分级认知科普课件
- 2026年山东青岛市市南区中考一模语文试卷(原卷版)
- 人教版七年级英语下册单项选择易错题100题(含答案解析)
- 中国融通资源开发集团有限公司物资接收、仓储人员专项招聘87人笔试备考试题及答案详解
- 2026年出入境辅警理论考试试卷(含答案)
- 2026江苏徐州市市级机关印刷厂有限公司招聘工作人员2人笔试题库附答案详解(基础题)
- 2025年教师选调教育综合知识真题及答案
- 2025-2030年智能农业灌溉系统行业跨境出海战略分析研究报告
- 第一轮-【黄磷企业检查表】-检查表
- 电动汽车动力性能计算表
- 乔木支撑专项施工方案(3篇)
- 数字化解决方案设计师职业资格认定考试复习题库(附答案)
- 商务数据分析师知识考试复习题库(附答案)
- 2026中国电子签名法律效力与行业发展报告
评论
0/150
提交评论