java this 关键字

Java代码尤其是很多别人写的代码中,很多this.xxx,除了代码看起来比较规范外,不太容易看懂什么意思。下面就自己的理解对this 的用法进行说明。

this 关键字主要有四种用法

1、引用成员变量。

2、引用成员方法。

3、引用构造函数。

4、引用对象本身。


1 引用成员变量

先贴个代码,如下代码将形参name 值赋给成员变量name,this可理解为Student的实例,然后通过setName()方法赋值。

public class Student {

	private String name;
	
	public void setName(String name){
		this.name = name ;
	}
	
	public String getName(){
		return this.name;//return name;
	}
}
public class ThisKeywords {

	public static void main(String[] args) {
		Student student = new Student();
		student.setName("zhou");
		System.out.println(student.getName());
	}
}
结果输出:zhou;如果调整setName(String name)方法块中为name = name ,则输出结果为null。

2 引用成员方法

public class Student {

	private String name;
	
	public void setName(String name){
		this.print();
		this.name = name ;
	}
	public void print(){
		System.out.println("this.print... ");
	}
}

 
采用同样的调用方式,结果输出:

this.print...

3 引用构造函数 注意引用构造函数使用this()。两个注意点

a、只能在构造函数中引用,且只能写来类的构造函数的第一行,否则会报错。

b、注意构造函数的循环调用,如下代码中,如果在Student(String name,int age)里添加this("zhou")程序会报错。

	public Student(){
		this("黎明",10);//调用两个参数的构造方法 .构造方法必须在构造方法中调用,且必须为第一行。
	}
	public Student(String name){
		this();// 调用没有参数的构造方法
	}
	public Student(String name,int age){
		this.name = name;
		this.age = age;
	}
4 引用对象本身

public class Car {
	public Car getCarObject(){
		return this;
	}
}
public class ThisKeywords {
	public static void main(String[] args) {
		Car car1 = new Car();
		Car car2 = car1.getCarObject();
		System.out.println(car1.equals(car2));
	}
}
输出结果为:true。

以上是java 中关键字this的用法,简单可以把this理解成对象本身,代码中使用this关键字可以使代码更方便阅读。

需要注意的是java中的this 和JS中的this 是不同的。JS中的this 总是指向调用该方法的对象。

为什么使用 this 呢?因为在实例化对象时,总是不能确定开发者会使用什么样的变量名。使用 this,即可在任何多个地方重用同一个函数。请思考下面的例子:

function showColor() {
  alert(this.color);
};

var oCar1 = new Object;
oCar1.color = "red";
oCar1.showColor = showColor;

var oCar2 = new Object;
oCar2.color = "blue";
oCar2.showColor = showColor;

oCar1.showColor();		//输出 "red"
oCar2.showColor();		//输出 "blue"


在上面的代码中,首先用 this 定义函数 showColor(),然后创建两个对象(oCar1 和 oCar2),一个对象的 color 属性被设置为 "red",另一个对象的 color 属性被设置为 "blue"。两个对象都被赋予了属性 showColor,指向原始的 showColor () 函数(注意这里不存在命名问题,因为一个是全局函数,而另一个是对象的属性)。调用每个对象的 showColor(),oCar1 输出是 "red",而 oCar2 的输出是 "blue"。这是因为调用 oCar1.showColor() 时,函数中的 this 关键字等于 oCar1。调用 oCar2.showColor() 时,函数中的 this 关键字等于 oCar2。

注意,引用对象的属性时,必须使用 this 关键字。例如,如果采用下面的代码,showColor() 方法不能运行:

function showColor() {
  alert(color);
};

如果不用对象或 this 关键字引用变量,js 就会把它看作局部变量或全局变量。然后该函数将查找名为 color 的局部或全局变量,但是不会找到。结果如何呢?该函数将在警告中显示 "null"。在w3c中定义很明确,this是指向调用该方法的对象。

这里对this关键字做了简单的说明和例子,如果有问题欢迎指正交流。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值