17.关于构造器
17.1构造器 :
-
构造方法的调用时机在new关键字执行之后——在对象本体被创建之后用来给属性赋初值
-
构造器是一个创建对象时被自动调用的特殊方法,为的是初始化。构造器的名称应与类的名称一致。
17.2如果一类中没有声明任何构造方法,此时当前类中存在一个默认的 空构造
空构造:给当前类 对象中的所有对象属性 赋默认值
- 空构造的作用就是保证对象的属性能够被初始化
当创建一个个对象时,系统会该对象的属性默认初始化,基本类型属性的值为0(数值类型),false(布尔类型),把所有的引用类型设置为null.
- 如果手动声明任何类型的构造方法,默认的空构造都会消失——不可用
17.3构造器的唯一返回值与修饰符
在声明构造方法的时候,不需要手动声明方法的返回值,因为构造方法的返回值是特定的——内存对象本体的地址值
构造器的修饰符比较的有限,仅仅只有public private protected这三个,其他的例如任何修饰符都不能对其使用,也就是说构造器不允许被成名成抽象、同步、静态等等访问限制以外的形式。
18.对象的创建完全是由构造方法实现的吗
不完全是
构造方法是创建java对象重要途径,通过new关键字调用构造器时,构造器也确实返
回了该对象,但这个对象并不是完全由构造器负责创建的,创建一个对象分
如下四步:
1、虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,
并且检查这个符号引用代表的类是否已被加载、 解析和初始化过。 如果没有,那必须先执行相应的类加载过程。
在类加载检查通过后,接下来虚拟机将为新生对象分配内存。 对象所需内存的大小在类加载完成后便可完全确定,
为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。即分配对象空间,并将对象成员变量初始化为0或空
2、执行属性值得显示初始化
3、执行构造方法
4、返回对象的地址给相关的变量
19.this关键字
19.1 this的本质就是“创建好的对象的地址”!由于在构造方法调用前,对象已经创建。
因此,在构造方法中也可以使用this代表“当前对象”。
19.2 this最常用的用法:
1、调用成员变量:如果成员变量和局部变量同名,this必须书写,用来区分两者;
如果没有同名的局部变量,this可以不写。
2、调用成员方法:这种情况下,this可以省略。
3、调用构造方法:使用this关键字调用重载的构造方法,避免相同的初始化代码,但
只能在构造方法中用,并且必须位于构造方法的第一句。
4、this不能用于static方法中,因为static方法在方法区,不是对象所在的这一特定内存中
如果方法构造中形参名与属性名相同时,需要使用this关键字区分属性与形参
19.3 补充
-
this是java的一个关键字,其表示该类创建的某个对象,this既可以出现在构造方法和实例方法中,
但不可以出现在类方法中。在前者中,this代表该构造方法所创建的对象,而对于后者实例方法来说,this表示正在调用该方法的当前对象。
-
实例方法:方法类型说明符前无static关键字,有关键字的为类方法,实例方法只能通过对象来调用,不能通过类名来调用。当实例方法中含有this关键字的时候即表示正在调用该方法的当前对象
-
构造方法:名字与所在的类名完全相同(包括首字母大小写),此外该方法无类型
-
super与this无法同时存在
this构造函数中,无论显示隐示,肯定会调用父类的构造方法,当super与this同时存在时父类构造方法就必定被调用了至少两次。
-
定义money变量使用double:
养成习惯,因为大多数的时候钱的运算也是有小数点的,方便输出,和数据精确