国内html5网站欣赏,wordpress知更鸟打赏,抖音代运营话术模板,内账免费的财务软件#x1f389;#x1f389;#x1f389;欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的技术是JavaScript与Vue.目前正在往全栈方向前进, 如果我的博客给您带来了帮助欢迎您关注我,我将会持续不断的更新文章!!!#x1f64f;#x1f64f;#x1f64f; 文章目录… 欢迎来到我的博客,我是一名自学了2年半前端的大一学生,熟悉的技术是JavaScript与Vue.目前正在往全栈方向前进, 如果我的博客给您带来了帮助欢迎您关注我,我将会持续不断的更新文章!!! 文章目录 this关键字的作用1. 在方法中引用调用该方法的对象2. 构造器中引用该构造器正在初始化的对象3. 返回对象的值 this关键字的作用
this代表了当前对象的引用this关键字可以用在实例方法和构造器中this用在方法中谁调用这个方法this就代表谁this用在构造器中代表构造器正在初始化的那个对象的引用
1. 在方法中引用调用该方法的对象
this关键字最大的作用就是让类中的一个方法访问该类里的另一个方法或者实例变量。
假设定义了一个Person类这个Person对象的eat()方法需要调用它的move()方法则如何做呢是否应该定义如下的Person类呢
public class Person {//定义一个move()方法public void move(){System.out.println(正在执行move()方法);}//定义一个eat()方法eat()方法需要借助move()方法public void eat(){Person p new Person();p.move();System.out.println(正在执行eat()方法);}public static void main(String[] args) {//创建Person对象Person p new Person();//调用Person的eat()方法p.eat();}
}运行结果为
正在执行move()方法
正在执行eat()方法以上这种方式确实能够做到在eat()方法里调用move()方法但从main()方法里的程序中可以看出一共创建了两个对象main()方法里创建一个对象eat()方法里创建一个对象。可是真的需要创建两个对象吗答案是否定的因为当程序调用eat()方法时一定会提供一个Person对象而不需要重新创建一个Person对象了。
因此需要在eat()方法中获得调用该方法的对象通过this关键字就可以满足这个需求。
this可以代表任何对象当this出现在某个方法体中时它所代表的对象是不确定的但它的类型是确定的它所代表的类型只能是当前类。只有当这个方法被调用时它所代表的对象才被确定下来谁在调用这个方法this就代表谁。
将上面的Person类中的eat()方法改为一下这种方式更合适
//定义一个eat()方法eat()方法需要借助move()方法
public void eat(){//使用this引用调用eat()方法的对象this.move();System.out.println(正在执行eat()方法);
}上述程序中eat()方法需要依赖于move()方法现实中这种依赖情形非常常见例如写字方法需要拿笔的方法这种依赖都是同一个对象两个方法之间的依赖。因此Java允许对象的的一个成员直接调用另一成员可以省略this前缀。也就是说上面的程序可以改为如下形式
public void eat(){move();System.out.println(正在执行eat()方法);
}2. 构造器中引用该构造器正在初始化的对象
this关键字可用于构造器中作为默认引用由于构造器是直接使用new关键字来调用而不是使用对象来调用的所以this在构造器中代表该构造器正在初始化的对象。例如下面的程序
public class Person {//定义一个名为age的成员变量public int age;//构造器public Person() {//在构造器里定义一个age变量int age 0;//使用this代表该构造器正在初始化的对象//下面的代码将会把该构造器正在初始化的对象的age成员变量设为3this.age 3;}public static void main(String[] args) {//使用new Person()创建的对象的age成员变量都将被设为3//下面代码输出3System.out.println(new Person().age);}
}与普通方法类似的是大部分时候在构造器中访问其它成员变量和方法时都可以省略this前缀但如果构造器中有一个与成员变量同名的局部变量又必须在构造器中访问这个被覆盖的成员变量则必须使用this前缀。如上面程序所示。
3. 返回对象的值
当this作为对象的默认引用使用时程序可以像访问普通引用变量一样来访问这个this引用甚至可以把this当成普通方法的返回值。请看下面程序
public class Person {public int age;public Person grow() {age ;return this;}public static void main(String[] args) {Person p new Person();//可以连续调用同一个方法p.grow().grow().grow();System.out.println(p对象的age的值是p.age);}
}运行结果为
p对象的age的值是3从上面的程序可以看出如果在某个方法中把this作为返回值则可以多次连续调用同一个方法从而使得代码更加的简洁。但这种方式容易造成实际意义的模糊例如上面的group()方法用于表示对象的生长即age变量的值加1实际上不应该有返回值。
最后需要强调一点静态成员不能直接访问非静态成员即static修饰的方法不能访问不适用static修饰的普通方法。对于static修饰的方法而言可以使用类直接调用该方法如果在static修饰的方法中使用this关键字则这个关键字就无法指向合适的对象。所以static修饰的方法中不能使用this引用。 Hi,这里是瑞雨溪一个喜欢JavaScript和Vue的大学生,如果我的文章给你带来的帮助,欢迎您关注我,我会持续不断的更新更多优质文章.你的关注就是我的动力!!!