this 的概述
this关键字:
this关键字代表了所属函数的调用者对象。
this关键字的作用:
- 一个类中存在同名的成员变量与局部变量时,在方法的内部默认是访问局部 变量的,可以通过this关键字指定访问成员变量 的数据。
- this关键字还可以在构造函数中调用另外一个构造函数初始化对象,
this关键字调用构造函数要注意的事项:
- this关键字调用其他 的构造函数时,必须要是在第一个语句。
- this关键字调用构造函数时不能出现相互调用,因为是一个死循环。
- 如果在方法的内部访问一个变量时,该变量只存在于成员变量中,局部没有没有,这时候java编译器会为该变量的前面添加this关键字。
this关键字代表是对象的引用。也就是this在指向一个对象,所指向的对象就是调用该函数的对象引用。
this还有哪些可以用的方便的地方:
假设定义40个成员变量,第一个有参构造初始化20个变量,第二个有参构造需要初始化40个变量。
- 第二个有参构造想要使用第一个有参构造。
- 成员函数相互之间可以调用。构造函数可以吗?(不可以)
- 编译失败,那么构造函数之间应该存在相互调用的模式。this就可以完成这个工作。
class Person {
String name;
int age;
Person() {
}
Person(String n){
name=n;
}
Person(String n, int a) {
//编译报错
Person(n);
age = a;
}
}
总结:实际工作中,存在着构造函数之间的相互调用,但是构造函数不是普通的成员函数,不能通过函数名自己接调用
_所以sun公司提供this关键字。
this是什么
- 在构造函数中打印this
- 创建对象,打印对象名p
- this和p是一样的都是内存地址值。
- this代表所在函数所属对象的引用。
class Student {
String name;
String gender;
int age;
Student() {
}
Student(String name) {
this();
this.name = name;
}
Student(String name, String gender, int age) {
this(name);
System.out.println(this); // Student@c17164
this.gender = gender;
this.age = age;
}
void speak() {
run();
System.out.println("姓名:" + name + " 性别:" + gender + " 年龄:" + age + " 哈哈!!!");
}
void run() {
System.out.println("run.....");
}
}
class Demo2 {
public static void main(String[] args) {
Student p = new Student("jack", "男", 20);
System.out.println(p); // Student@c17164
Student p2 = new Student("rose", "女", 18);
System.out.println(p2);
p.speak();
}
}
构造函数的相互调用
就会报错
如下
class Student {
String name;
String gender;
int age;
//构造函数间相互调用
Student() {
this(null);
}
//构造函数间相互调用
Student(String name) {
this();
this.name = name;
}
Student(String name, String gender, int age) {
this(name);
this.gender = gender;
this.age = age;
}
void speak() {
run();
System.out.println("姓名:" + name + " 性别:" + gender + " 年龄:" + age + " 哈哈!!!");
}
void run() {
System.out.println("run.....");
}
}
- this只能在非静态中(没有static修饰的)函数使用
- 构造函数间相互调用必须放在构造函数的第一个语句中,否则编译错误
- 可以解决构造函数中对象属性和函数形参的同名问题。