阅读书籍:《Fundamentals of JAVA Programming》(Fifth Edition)
Page 149:LEARNING ABOUT THE this REFERENCE
C++和Java之中都是有指针的,但是有个显著的区别就是C++中的this是指针,而Java中是引用。
Java中的this指的是它所属的对象本身。在类内部通常忽略使用this,比如:
public int getEmpNum() { return empNum; } public int getEmpNum() { return this.empNum; }
上述两个方法在类内部是完全相同的。
你也许会疑问,那么使用this有什么用呢。请看下面的代码:
public class Student { private int stuNum; private double gpa; public Student(int stuNum,double gpa) { stuNum = stuNum;//Error gpa = gpa;//Error } }
上述代码中标记Error的地方是有错误的,在构造器中并不会使Student类的私有成员stuNum和gpa初始化。
形参已经把私有成员覆盖掉了。。
在构造器的块作用域中,默认的stuNum是传入的形参,而不是类的私有成员。
public class Student { private int stuNum; private double gpa; public Student(int stuNum,double gpa) { this.stuNum = stuNum; this.gpa = gpa; } }
这样this的作用你就明白了吧。
this的产生还有一个重要的原因,那就是使得构造器重载更有效。
只要看两段代码,你就明了了。
代码一:
public class Student { private int stuNum; private double gpa; Student(int Num,double avg) { stuNum = Num; gpa = avg; } Student(double avg) { stuNum = 999; gpa = avg; } Student(int Num) { stuNum = Num; gpa = 0.0; } Student() { stuNum = 999; gpa = 0.0; } }
代码二:
public class Student { private int stuNum; private double gpa; Student(int Num,double avg) { stuNum = Num; gpa = avg; } Student(double avg) { this(999,avg); } Student(int Num) { this(num,0.0); } Student() { this(999,0.0); } }
写到这里不知不觉的想到了super。那就下期再聊super。