1 目录及资源索引
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;
}
接下来老师又提出了一个思考问题:有三个成员变量,但是不需要给三个都赋值,怎么办?
- 可以写多个构造函数
- 如果能在一个构造函数中调用另外一个构造函数即可。
直接看代码,就一目了然了,如下:
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 总结
- Person 单词拼写错误,写成 Persion 了,还需更加细心啊!
- 学会了 this 的一些用法,调用成员变量,成员函数;还可以放在构造函数首行,调用其他的构造函数;
- 明白了一些基本概念;