前言
java
this调用属性
编程
class Student{ private String name; private int age; public Student(String name, int age){ } }
在构造函数中赋值的时候,会很容易写成下面这样:函数
class Student{ private String name; private int age; public Student(String name, int age){ name = name; age = age; } }
若写成这样,当构造Student这个对象并输出该对象的姓名和年龄时会发现,name为null, age为0。
形成这样的缘由是由于有局部可见性。一般使用{}括起来的一个数据块叫作一个做用域范围。在同一个做用域范围定义了两个同名的变量则会报错;如果在该做用域定义了一个与该做用域范围以外同名的变量则是能够的,在这个做用域同时使用这两个变量,则在这个做用域中定义的变量会屏蔽做用域范围以外的那个变量,即做用域中定义的变量才会有效。
这样说完感受有点绕。一句话来讲,在同一做用域内,做用范围小的变量会屏蔽同名的做用范围大的变量。
如果想要Student类中的属性能够被正确初始化,那么则须要使用this关键字。学习
class Student{ private String name; private int age; public Student(String name, int age){ this.name = name; this.age = age; } }
在咱们编程时,访问类的属性最好使用this。this
this调用方法
code
在本类的普通函数中调用其余普通函数,能够在函数前面加上this也能够不加,可是为了代码严谨性推荐加上this。
对象
构造函数之间能够相互调用,构造函数之间相互调用就必定须要使用this关键字!
使用this()表示调用无参构造函数,this(参数,...)表示调用有参构造函数blog
public class Student{ private String name = null; private int age = 0; public Student() { System.out.println("Student():name="+name+",age="+age); } public Student(String name, int age) { this(); //若使用Student()则会报错:没有定义这个方法。被当作普通方法来解释 this.name = name; this.age = age; System.out.println("Student(String name, int age):name="+name+",age="+age); } public static void main(String[] args) { Student stu = new Student("Sakura",20); } } /* output: Student():name=null,age=0 Student(String name, int age):name=Sakura,age=20 */
构造函数之间为何要相互调用呢?
由于要减小构造函数中代码的重复问题,提升代码的重用性。因此,构造函数之间相互能够调用也就理所固然了。
构造函数之间相互调用有一些限制须要注意:
递归
this表示当前对象
作用域
因此前面使用this.属性也就很容易理解了,就是当前对象的属性。
小结