34 对象数组
class Person{ private String name; private int age; public Person(String name, int age){ this.name = name; this.age = age; } public String getInfo(){ return "name: " + this.name + " age: " + this.age ; } }
动态初始化
Person[] persons = new Person[3]; persons[0] = new Person("张三", 23) ; persons[1] = new Person("李四", 24) ; persons[2] = new Person("王五", 25) ; for (Person person : persons) { System.out.println(person.getInfo()); } /** name: 张三 age: 23 name: 李四 age: 24 name: 王五 age: 25 */
静态初始化
Person[] persons = new Person[]{ new Person("张三", 23), new Person("李四", 24), new Person("王五", 25) }; for (Person person : persons) { System.out.println(person.getInfo()); } /** name: 张三 age: 23 name: 李四 age: 24 name: 王五 age: 25 */
数组特征:
1、数组缺点:长度固定
2、数组优势:线性保存,根据索引取值,速度较快,时间复杂度为1
八、引用传递实际应用
35 类关联结构
class Car{ private String name; private double price; private Person person; public Car(String name, double price){ this.name = name; this.price = price; } // 设置、获取车主 public void setPerson(Person person){ this.person = person ; } public Person getPerson(){ return this.person; } public String getInfo(){ return "name: " + this.name + " price: " + this.price ; } } class Person{ private String name; private int age; private Car car; public Person(String name, int age){ this.name = name; this.age = age; } public String getInfo(){ return "name: " + this.name + " age: " + this.age ; } // 设置、获取车辆 public void setCar(Car car){ this.car = car ; } public Car getCar(){ return this.car ; } public static void main(String[] args) { Person person = new Person("张三", 23) ; Car car = new Car("特斯拉", 24) ; // 关联车辆和人 person.setCar(car) ; car.setPerson(person) ; // 通过人获取车辆 System.out.println( person.getCar().getInfo()) ; // name: 特斯拉 price: 24.0 // 通过车辆获取人 System.out.println( car.getPerson().getInfo()) ; // name: 张三 age: 23 } }
36 自身关联
class Car{ private String name; private double price; private Person person; public Car(String name, double price){ this.name = name; this.price = price; } // 设置、获取车主 public void setPerson(Person person){ this.person = person ; } public Person getPerson(){ return this.person; } public String getInfo(){ return "name: " + this.name + " price: " + this.price ; } } class Person{ private String name; private int age; private Car car; private Person[] children ; public Person(String name, int age){ this.name = name; this.age = age; } // 增加孩子数组 public Person[] getChildren(){ return this.children; } public void setChildren(Person[] children){ this.children = children ; } public String getInfo(){ return "name: " + this.name + " age: " + this.age ; } // 设置、获取车辆 public void setCar(Car car){ this.car = car ; } public Car getCar(){ return this.car ; } public static void main(String[] args) { Person person = new Person("张三", 23) ; // 添加孩子 Person childA = new Person("小张", 19) ; Person childB = new Person("小王", 19) ; // 给孩子买车 childA.setCar(new Car("法拉利", 2000000.00)) ; childB.setCar(new Car("宾利", 8000000.00)) ; person.setChildren(new Person[] { childA, childB }) ; System.out.println(person.getInfo()) ; for(Person child : person.getChildren()){ System.out.println( "\t|" + child.getInfo()) ; System.out.println( "\t\t|" + child.getCar().getInfo()) ; } /** name: 张三 age: 23 |name: 小张 age: 19 |name: 法拉利 price: 2000000.0 |name: 小王 age: 19 |name: 宾利 price: 8000000.0 */ } }
37 合成设计模式
拆分+组合
class 电脑{ private 主机 对象; private 显示器 对象数组; } class 显示器{} class 主机{ private CPU 对象; private 键盘 对象; private 键盘 对象; } class CPU {} class 键盘 {} class 键盘 {}
38 综合实战:数据表与简单Java类映射转换
数据表与简单Java类之间基本映射关系
数据实体表设计 = 类的定义
表中的字段 = 类的成员属性
表的一行记录 = 类的一个实例化对象
表的多行记录 = 对象数组
表的外键关联 = 引用关联
雇员和部门关系
一个部门对应多个雇员
一个雇员对应一个部门
定义阶段:
定义实体类
配置关联字段
开发阶段:
定义对象
关联关系
根据关系获取数据
39 综合实战:一对多映射
班级对学生
40 综合实战:多对多映射
商品和顾客
41 综合实战:复杂多对多映射
用户 权限