创建对象的实质:
在堆里开辟空间(属性空间、方法空间)。对象没有名,只有值。
创建对象不一定调用构造方法(New会调用)
实体类封装表单数据
实体类设值一定要通过set(),获取要通过get()
ArrayList的数据结构:数组
LinkList双向链表
ArrayMap/ HashSet/ HashMap 数组(每一个元素又是链表首结点)
HashMap 负载因子越高,意味着空间越大。负载因子越低,意味着空间浪费。
构造方法总结:
1.语法
方法名与类名相同,无返回值
Eg:
public class Dog {
private int weight;
public Dog(int w) {
weight = w;
}
}
2.作用
创建对象时,初始化对象里的属性。(抽象类有,接口无)。
3.时机
创建对象后,开辟空间后,调用构造方法,(构造方法必须为实例方法),接收对象的地址。
4.
在一个类中有多个构造方法,通过参数签名(个数、类型、顺序)区分,调用哪个构造方法。构造方法不能静态,只能实例,具有this指针。 方法的重载。
5.谁来调用
New或者系统来调用,人为不行
构造方法为何不能静态:
因其需要传对象的地址,给对象初始化,所以不能静态。
对象有几种创建方式
1使用new关键字
通过调用构造方法, (调用一个或多个,需要知道类)。
2 使用反射技术
一开始不知道特定的类,通过调用无参构造方法;找到特定的类从而创建;通过调用构造方法(至少一个)。
3 使用克隆技术
不需要调用构造方法(浅拷贝)。两个属性相同、哈希地址相同,但不是同一个对象。
4 使用反序列化技术
不需要调用构造方法(深拷贝)。两个属性、哈希地址相同,但不是同一个对象。
拷贝
发生在克隆与反序列化中。
深拷贝:对象的所有内容拷贝到新创建的一个对象里。(all copy)
浅拷贝:对象的一部分内容拷贝到新创建的一个对象里。另一部分内容,两个对象共享。(partial copy)