Java面向对象(查缺补漏——叁)

其它关键字:this、super、static、final、abstract、interface、package、import等…
This调用属性和方法

我们新建一个Person类,类中给name,age两个属性,这里用到封装性的概念,所以这两个属性的修饰符是private的。

java itextpdf获取 关键字 坐标 java查找关键字_当前对象


接下来我们创建属性并为其赋值,当set方法的形参名称与属性名称不同时我们发现赋值完全没问题,运行结果也正常。

java itextpdf获取 关键字 坐标 java查找关键字_java_02


但是我们之前说过,变量名这些的最好是做到见名知意,好那么我就将形参名称改为name,这样的话,我就明白了,我这是要给同类中的name属性去赋值的。然而当我们修改完成并运行程序时发现,没有赋值成功

java itextpdf获取 关键字 坐标 java查找关键字_构造器_03


显而易见,这是把形参赋给它自己本身了,所以赋值未成功。

那这个时候我该怎么办?怎么去区分前面那个叫属性,后面这个是形参呢?

注意:这时候我们就引用一个关键字this,我们可以吧this理解为,当前对象!!
那我加上this.之后,就可以理解称为当前对象的name,当前对象的age。

java itextpdf获取 关键字 坐标 java查找关键字_当前对象_04

运行成功~

总结:
	1.this可以用来修饰或者说是调用: 属性、方法、构造器
	2.this修饰属性和方法
     this理解为:当前对象
  	 2.1在类的方法中,我们可以使用“this.属性”或“this.方法()”的方式,调用当前对象属性或者方法。
       但通常情况下,我们都选择省略"this."
       特殊情况下:如果方法的形参,和类的属性同名时,我们必须显示的使用"this.变量"的方式来表名此变量是属性,而非形参
   	 2.2在类的构造器中,我们可以使用“this.属性”或“this.方法()”的方式,调用当前正在创建的对象属性或者方法。
        但通常情况下,我们都选择省略"this."
        特殊情况下:如果方法的形参,和类的属性同名时,我们必须显示的使用"this.变量"的方式来表名此变量是属性,而非形参
This调用构造器

考虑到下图这种情景,开发中常见的情景,比如初始化人物时都是布衣短剑,后面氪金换装相当于给人物的一些属性重新赋值。

java itextpdf获取 关键字 坐标 java查找关键字_赋值_05

那么上述这种情况明显出现了代码冗余现象,我们就考虑怎,怎么才能让这冗余减少呢?
思路1:可以把重复的代码抽取出来,重新写一个方法,然后用this调用到每个构造器中
思路2:我们可以通过this的方式来调构造器

java itextpdf获取 关键字 坐标 java查找关键字_赋值_06


如上图,this()表示我们调的空参构造器,我们在使用有参构造器时自动调用了空参构造器,执行了40行代码,一劳永逸懒出天际,也可以如下图this调用带参数构造器

java itextpdf获取 关键字 坐标 java查找关键字_构造器_07


java itextpdf获取 关键字 坐标 java查找关键字_java_08

上图可以看出,Java自带工具包底层也是这样的设计。
总结:this调用构造器
      ① 我们在类的构造器中,可以显示使用"this(形参列表)"方式,来调用,本类中指定的其它构造器
      ② 构造器中,不能通过"this(形参列表)"的方式来调用自己
      ③ 如果一个类中有n个构造器,则最多有 n-1 个构造器中使用了"this(形参列表)"方式
      ④ 规定:"this(形参列表)"方式 必须声明在当前构造器的首行
      ⑤ 构造器内部 最多只能声明一个"this(形参列表)",用来调用其它构造器