Day09 Java基础 面向对象 (2)
一. 构造代码块
小孩子出生之后必须的哭,自带被动
【要求】创建完对象,就的哭
[解决方案1]
把cry方法放到构造函数里
[瓶颈]
万一有1000个构造函数?
[问题]
用构造函数调用cry方法可以实现,但是如果构造函数过多,会导致代码过于臃肿,只要这个对象创建,就一定要
执行这个方法
Java中的构造代码块 :
{
执行的代码;
}
[发现]不管调用那个一个构造函数,都会执行cry方法,但是这个cry并不在构造函数里面
而是在构造代码块
构造代码块:
对一个类的所有对象进行一个统一的初始化操作,只要这个对象被创建,就会执行
【位置】
在构造函数之前,在成员变量之后
代码块分为三大类:
1. 构造代码块
2. 局部代码块 (基本不用了) 缩短局部变量的生存周期
3. 静态代码块 static
二. 构造函数,构造代码块和定义时默认值优先级问题
在Java中,有三种对于成员变量赋初值操作;
1. 构造函数
2. 构造代码块
3. 定义时默认值
优先级问题:
当存在构造函数的时候,构造函数中对于成员变量的修改是最终值
其次:1. 定义时的默认值 ====== 2. 构造代码块
谁在后面,谁确定最终值
Java编译器在编译代码的时候,会把我们的代码进行重新排序,
会将成员变量定义放在整个类的最前面
三. this关键字
就近原则
在类当中如果存在同名的变量名,Java编译器会认为最近的变量名是该语句操作的变量
this 这个!这儿! 对象自己
谁调用这个函数或者方法,谁就是this
this代表调用当前方法的类对象
this 关键字作用:
1. 如果在同一个函数中,出现了和成员变量同名的变量名,可以利用this 来区分不同的变量,
this.成员变量
表示使用的是成员变量
2. this关键字还能调用类当中的其他函数,这里包括成员方法和构造函数
this 关键字不单单能调用成员方法,还能调用构造函数
格式:
this(参数);
注意事项:
1. 如果一个构造函数A通过this关键字调用构造函数B,那么this(参数)必须在构造函数A的第一个行
2. 两个构造函数不能通过this关键字相互调用,语法不通过