Java this关键字总结

Java中this关键字代表对当前对象的一个引用,this用来调用属性、方法以及本类中的构造方法。
下面我们通过几个例子来详述一下this的用法:

public class Student{
	String name;
	void doHomework(){
		System.out.println(this.name+"正在做作业");
	}
	void speak(){
		new Student().doHomework();//该行代码与this.doHomewor();有什么区别
		System.out.println(name+"正在说话");
	}
	public static void main(String[] args){
		Student student = new Student();
		student.speak();
	}
}

首先我们先看main方法中创建了一个新的Student类的对象,同时用该对象调用了speak方法;这时候我们再看speak方法,speak方法中又创建了一个新的对象,同时用这个在speak方法中新创建的对象对象调用了doHomework方法,如果speak方法中的new Student().doHomework换成this.doHomework,那么这里的this就代指调用speak方法的对象,即main方法中创建的对象。

第二个例子

public class Student{
	String name;
	void doHomework(){
		System.out.println(this.name+"正在做作业");
	}
	public static void main(String[] args){
		Student student = new Student();
		student.name = "王五";
		student.doHomework();//运行结果是什么
	}
}

我们还是先看main方法,main方法中创建了一个新对象,并且给新对象的name属性赋值,同时用该对象调用了doHomework方法,再看doHomework方法,这里的this指调用该方法的对象,即main方法中创建的对象,该对象的name已经被赋值,所以这时name为王五,运行结果为:王五正在做作业

第三个例子

public class Student {
 	String name; 
 	void doHomework(){
  		System.out.println(this.name+"正在做作业.......");
 		name="刘颖";
 	} 
 	void speak(){
  		System.out.println(name+"正在说话......");
 	} 
 	public static void main(String[] args) {
  		Student student = new Student();
  		student.doHomework();
  		student.speak();//运行结果是什么?如果把name = "刘颖"换成String name = "刘颖"呢
 	}
}

我们还是先看main方法,创建了一个新对象,并且用这个对象调用了两个方法,先调用doHomework方法;方法中先运行输出语句,这里this代指调用该方法的对象,此时对象的name属性还没有被赋值,所以String类型的全局变量默认为null,所以这里输出:null正在写作业…;输出之后给全局变量name赋值为刘颖

然后调用speak方法,这里输出语句的全局变量name已经被赋值为刘颖,所以输出刘颖正在说话…

如果将name = "刘颖"换成String name = “刘颖”,那么这时doHomework方法中定义了一个局部变量name为刘颖,其作用范围无法影响到speak方法,所以,此时speak方法中输出:null正在说话…

第四个例子

public class Student {
 	int age;
 	String name;
 	public Student(int age) {
  		this.age = age;
 	}
 	public Student(String name) {
  		this.name = name;
 	}
 	public Student(int age, String name) {
  		this(age);
  		new Student(name);//该行代码与this.name = name有什么区别
 	}
 	public static void main(String[] args) {
  		new Student(12, "王五");
 	}
}

先看main方法,通过构造方法创建一个新的对象,用的是第三个构造方法,此时第三个构造方法中this(age);调用本类中的第一个构造方法,this.age = age;this代指调用该方法的对象,即main方法中创建的对象,此时它的age属性为12,然后再看第三个构造方法中的第二行代码:new Student(name),这里又创建了一个新的对象,同时用该新创建的对象调用了第二个构造方法,所以这个新对象的name为王五,而main方法中创建的对象的name依然是null。

如果new Student(name)用this.name = name代替,则没有创建新对象,this代指main方法中创建的对象,这时main方法中创建的对象的name就是王五

第五个例子

public class Student {
 	String name;
 	public static void print() {
  		System.out.println(this.name);//这里的this会报错哦,你知道为什么吗
 	}
 	public static void main(String[] args) {
  		print();
 	}
 }

这里报错的原因是,this关键字不能在static修饰的方法中使用,因为this代指的是对当前对象的一个引用,而static修饰的方法可以被类名调用而且推荐使用类名调用,this不能代指一个类,所以这里会报错。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值