java读书笔记——this

本文深入讲解Java中的this关键字,解释其在构造函数和方法中的作用,对比C++中的this指针,并通过实例演示如何正确使用this来避免变量遮盖的问题。

阅读书籍:《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。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值