Java4Android自学记录(10):this 的使用方法

1 目录及资源索引

  Java4Android自学过程目录及资源索引

2 调用成员变量和成员函数

  先看下边一段代码:

class Person
{
	String name;
	
	void talk()
	{
		System.out.println("my name is " + name);	// 此处为什么可以直接使用 name?
	}
}

  如图所示,为什么可以直接使用 name ?那是因为我们如果只写一个 name 的话,编译器会自己帮我们加上一个 this,具体表现为:this.name。所以上述代码其实等价于下边的代码:

class Person
{
	String name;
	
	void talk()
	{
		System.out.println("my name is " + this.name);	// 加上 this
	}
}

  在另外写一个类,写上主函数,并调用此类;具体代码如下:

class Test
{
	public static void main(String args[])
	{
		Person p1 = new Person();
		p1.name = "zhangsan";
		
		Person p2 = new Person();
		p2.name = "lisi";
		
		p1.talk();
		p2.talk();
	}
}

  程序运行结果如下:
在这里插入图片描述

3 概念解释

  this :代表一个对象,代表调用这个函数的对象。类似 p1 调用这个函数,this 就是代表p1。

  通俗一点的解释如下:

this 相当于一个代词,相当于 我,在不同的人嘴里,说出来含义就不一样。
比如张三说 我的年龄是多少,这个 我 代表张三
李四说我的年龄是多少;这个我,代表李四。
类似这样。

4 区分成员变量和形参

  this 还可以用来区分调用的是成员变量还是形参;如果一个函数有形参,不写“对象”(不写this),就默认是形参;如果写上 this ,就代表是成员变量的参数。代码示例如下:

class Person
{
	String name;
	
	void talk(String name)
	{
		System.out.println("my name is " + this.name);	// 加上 this
	}
}

  主函数内的代码也做相应修改,具体如下:

class Test
{
	public static void main(String args[])
	{
		Person p1 = new Person();
		p1.name = "zhangsan";
		
		Person p2 = new Person();
		p2.name = "lisi";
		
		p1.talk("zhangsan_1");
		p2.talk("lisi_1");
	}
}

  上述代码运行结果如下,可以看到打印出来的还是张三,李四;而不是函数传进去的形参。
在这里插入图片描述

5 this与构造函数

  根据代码来说明,相关代码如下:

class Person
{
	String name;
	int age;
	String address;

	Person()
	{
		System.out.println("无参数的构造函数");
	}
	
	Person(String s1, int a, String s2)	// 带参数的构造函数
	{
		name = s1;
		age = a;
		address = s2;
	}
	
	void talk()
	{
		System.out.println("my name is " + name);
	}
}

  上述代码在语法上没有错误,但是如果我带参数的构造函数这样写呢?

	Person(String name, int age, String address)	// 带参数的构造函数
	{
		name = name;
		age = age;
		address = address;
	}

  这样,怎么区分这个变量到底是成员变量还是形参呢?很容易混乱,还会出错。而利用 this,我们就可以这样写:

	Person(String name, int age, String address)	// 带参数的构造函数
	{
		this.name = name;
		this.age = age;
		this.address = address;
	}

  接下来老师又提出了一个思考问题:有三个成员变量,但是不需要给三个都赋值,怎么办?

  1. 可以写多个构造函数
  2. 如果能在一个构造函数中调用另外一个构造函数即可。

  直接看代码,就一目了然了,如下:

class Person
{
	String name;
	int age;
	String address;

	Person()
	{
		System.out.println("无参数的构造函数");
	}
	
	Person(String name, int age)
	{
		this.name = name;
		this.age  = age;
	}
	
	Person(String name, int age, String address)
	{
		this(name, age);		// 用this调用有两个形参的构造函数
		this.address = address;
	}
	
	void talk()
	{
		System.out.println("my name is " + name);
	}
}

  this 后边括号有两个参数:代表调用有两个参数的构造函数;this 后括号为空,就是代表为无参的构造函数。上述两种写法,如果要使用 this 调用其他构造函数,则必须写在开始位置。

  如遇特殊情况,可以考虑多级套用,依次用 this 调用不同的构造函数。参考老师课件截图如下:
在这里插入图片描述

6 总结

  1. Person 单词拼写错误,写成 Persion 了,还需更加细心啊!
  2. 学会了 this 的一些用法,调用成员变量,成员函数;还可以放在构造函数首行,调用其他的构造函数;
  3. 明白了一些基本概念;
发布了88 篇原创文章 · 获赞 84 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/Fighting_Boom/article/details/104263009