面向对象
2019-08-11 本文已影响0人
YQY_苑
什么是对象
- 对象就是数据和行为的集合(主观能动性)
- 一切用于new运算符创建爱你出来的都是对象
- new Object()
- 特例:
- new Integer()【会自动装箱构建一个对象】
- new String() 【从常量池中获取对象】
- 特例:new Object[]
对象是由什么组成的?
-
所有的对象都在“堆”上分配
- 每个对象都包含⾃⼰的数据(成员变量)
- 原⽣类型的成员
- 引⽤类型的成员

对象的构造函数
- 新建对象的唯⼀途径
- 在堆上分配空间
- 执⾏必要的初始化⼯作
- 执⾏构造器函数
- 如果没有任何构造器,编译器会偷偷摸摸帮你⽣成⼀个
对象的⽅法
- 数据是“有什么”
- ⽅法是“做什么”
⽅法的重载(overload)
重载(overload)与重写/覆盖(override)
重载(overload)
如何区分同名的不同重载⽅法?
- 根据类型
根据类型
方法名相同,但参数表不一样。
void pringName(){
}
void pringName(String s){
}
void pringName(int i){
}
那隐式转换呢?
* 类型最匹配优先
* 如果能匹配多个呢?例如:null【使用强制类型转换】
那隐式转换呢??
类型最匹配优先【先按顺序,后按类型】
如果能匹配多个呢?例如:null【使用强制类型转换】

Number承继自Integer,低一层。故Interger和Object处于同一地位,与null距离相等
public static void main(String[] args) throws IOException {
Interger a = 1;
pringName(a) // 由于a是定义为Interger,故先匹配 2
}
void pringName(int i){ // 1
}
void pringName(Interger i){ // 2
}
void pringName(Number i){ // 3
}

能仅仅重载返回值么?
不能,因为方法调用可以忽略返回值,所以仅重载返回值时方法用意产生冲突


如何为⽅法提供默认值?

-
但是你可以通过重载曲线救国
image.png
构造器的重载
this()
对象的初始化
- 必要的初始化⼯作
- 静态成员的初始化
- 静态初始化块
- 成员的初始化
- 初始化块
- 继续断点调试⼤法检查初始化顺序
对象的⽣命周期
新建对象,使用,摧毁回收
如果⼀直新建对象,内存会不会爆?
可能不会
那对象的内存什么时候被回收?
- 谁也不知道
对象的内存如何被回收?
- 不⽤管,垃圾回收器帮你⼲
JVM怎么知道哪个对象没有被⽤到?
- 通过引⽤链(GC Roots),可达的数据都是活对象,除此之外都是死对象,可以回收