java 的this的运用?

Python012

java 的this的运用?,第1张

在java中,this关键字有很多种用法。 在java中,这是一个引用当前对象的引用变量。

java this关键字的用法如下:

this关键字可用来引用当前类的实例变量。

this关键字可用于调用当前类方法(隐式)。

this()可以用来调用当前类的构造函数。

this关键字可作为调用方法中的参数传递。

this关键字可作为参数在构造函数调用中传递。

this关键字可用于从方法返回当前类的实例。

建议:如果你是java初学者,只学习 this 关键字的前三个用法就可以了。

更详细可以查询一些教程,例如:https://www.yiibai.com/java/this-keyword.html

使用this调用本类中的属性\x0d\x0a\x0d\x0a现在观察以下代码,看会有那些问题:\x0d\x0a\x0d\x0apublic void setName(String name){\x0d\x0a\x0d\x0aname = name \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a这里面的两个name都是setName方法中的name参数。\x0d\x0a\x0d\x0a此时,特别希望可以通过一个指定的标识明确的表示要把传入的name参数的值给类中的属性,所以此时就需要使用this关键字,使用this.name就表示类中的属性。\x0d\x0a\x0d\x0aclass Person{\x0d\x0a\x0d\x0aprivate String name \x0d\x0a\x0d\x0aprivate int age \x0d\x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0athis.setName(name) \x0d\x0a\x0d\x0athis.setAge(age) \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setName(String name){\x0d\x0a\x0d\x0athis.name = name \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setAge(int age){\x0d\x0a\x0d\x0athis.age = age \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic String getName(){\x0d\x0a\x0d\x0areturn this.name \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic int getAge(){\x0d\x0a\x0d\x0areturn this.age \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void print(){\x0d\x0a\x0d\x0aSystem.out.println("姓名:"+this.name+",年龄:"+this.age) \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic class Demo35{\x0d\x0a\x0d\x0apublic static void main(String args[]){\x0d\x0a\x0d\x0aPerson p1 = new Person("张三",30) \x0d\x0a\x0d\x0ap1.print() \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a使用this还可以从一个构造方法中调用其他构造方法。\x0d\x0a\x0d\x0a例如:有以下一个要求,一个类中存在了三个构造方法,但是要求,不管怎么调用,最终都要求可以在对象实例化的时候打印一个“新的对象产生了”的提示。\x0d\x0a\x0d\x0aclass Person{\x0d\x0a\x0d\x0aprivate String name \x0d\x0a\x0d\x0aprivate int age \x0d\x0a\x0d\x0apublic Person(){\x0d\x0a\x0d\x0aSystem.out.println("新的对象产生了。。。") \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name){\x0d\x0a\x0d\x0aSystem.out.println("新的对象产生了。。。") \x0d\x0a\x0d\x0athis.setName(name) \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0aSystem.out.println("新的对象产生了。。。") \x0d\x0a\x0d\x0athis.setName(name) \x0d\x0a\x0d\x0athis.setAge(age) \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setName(String name){\x0d\x0a\x0d\x0athis.name = name \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setAge(int age){\x0d\x0a\x0d\x0athis.age = age \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic String getName(){\x0d\x0a\x0d\x0areturn this.name \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic int getAge(){\x0d\x0a\x0d\x0areturn this.age \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void print(){\x0d\x0a\x0d\x0aSystem.out.println("姓名:"+this.name+",年龄:"+this.age) \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a以上代码虽然可以实现功能,但是同样的代码出现了三次,而且后面的两次出现纯属多余吧。用this()的形式可以调用类中的无参构造方法。\x0d\x0a\x0d\x0aclass Person{\x0d\x0a\x0d\x0aprivate String name \x0d\x0a\x0d\x0aprivate int age \x0d\x0a\x0d\x0apublic Person(){\x0d\x0a\x0d\x0aSystem.out.println("新的对象产生了。。。") \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name){\x0d\x0a\x0d\x0a// 最终都是调用无参构造方法\x0d\x0a\x0d\x0athis() \x0d\x0a\x0d\x0athis.setName(name) \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0athis(name) \x0d\x0a\x0d\x0athis.setAge(age) \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setName(String name){\x0d\x0a\x0d\x0athis.name = name \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setAge(int age){\x0d\x0a\x0d\x0athis.age = age \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic String getName(){\x0d\x0a\x0d\x0areturn this.name \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic int getAge(){\x0d\x0a\x0d\x0areturn this.age \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void print(){\x0d\x0a\x0d\x0aSystem.out.println("姓名:"+this.name+",年龄:"+this.age) \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic class Demo36{\x0d\x0a\x0d\x0apublic static void main(String args[]){\x0d\x0a\x0d\x0aPerson p1 = new Person("张三",30) \x0d\x0a\x0d\x0ap1.print() \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a注意点1:\x0d\x0a\x0d\x0a如果使用了this调用其他构造方法,则此语句,必须写在构造方法的首行。\x0d\x0a\x0d\x0apublic void fun(){\x0d\x0a\x0d\x0a// 发现在调用fun方法的时候,必须先设置name的值\x0d\x0a\x0d\x0athis("zhangsan") \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0athis.setAge(age) \x0d\x0a\x0d\x0athis(name) //-->必须放在首行\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a注意点2:\x0d\x0a\x0d\x0a使用this可以调用本类中的其他构造方法,但是至少留一个构造方法,作为程序的出口。\x0d\x0a\x0d\x0apublic Person(){\x0d\x0a\x0d\x0athis("a",10) \x0d\x0a\x0d\x0aSystem.out.println("新的对象产生了。。。") \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name){\x0d\x0a\x0d\x0a// 最终都是调用无参构造方法\x0d\x0a\x0d\x0athis() \x0d\x0a\x0d\x0athis.setName(name) \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0athis(name) //-->必须放在首行\x0d\x0a\x0d\x0athis.setAge(age) \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0athis最重要的特性 —— 表示当前对象\x0d\x0a\x0d\x0a当前对象在程序中用以下形式体现:\x0d\x0a\x0d\x0a· 当前操作此方法的对象,就称为当前对象。\x0d\x0a\x0d\x0aclass Demo{\x0d\x0a\x0d\x0apublic void print(){\x0d\x0a\x0d\x0aSystem.out.println(this) \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic class Demo38{\x0d\x0a\x0d\x0apublic static void main(String args[]){\x0d\x0a\x0d\x0aDemo d1 = new Demo() \x0d\x0a\x0d\x0aSystem.out.println(d1) \x0d\x0a\x0d\x0ad1.print() \x0d\x0a\x0d\x0aSystem.out.println("---------------------") \x0d\x0a\x0d\x0aDemo d2 = new Demo() \x0d\x0a\x0d\x0aSystem.out.println(d2) \x0d\x0a\x0d\x0ad2.print() \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a回顾:\x0d\x0a\x0d\x0a之前讲解的两个对象比较的程序。\x0d\x0a\x0d\x0a// 在类的内部增加一个比较的方法\x0d\x0a\x0d\x0apublic boolean compare(Person p){\x0d\x0a\x0d\x0aPerson p1 = this \x0d\x0a\x0d\x0aPerson p2 = p \x0d\x0a\x0d\x0aif(p1.name.equals(p2.name)&&p1.age==p2.age){\x0d\x0a\x0d\x0areturn true \x0d\x0a\x0d\x0a}else{\x0d\x0a\x0d\x0areturn false \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a分析程序的运行过程:\x0d\x0a\x0d\x0aclass A{\x0d\x0a\x0d\x0aprivate B b = null \x0d\x0a\x0d\x0apublic A(){\x0d\x0a\x0d\x0athis.b = new B(this) \x0d\x0a\x0d\x0athis.b.fun() \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void hello(){\x0d\x0a\x0d\x0aSystem.out.println("Hello World!!!") \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0aclass B{\x0d\x0a\x0d\x0aprivate A a = null \x0d\x0a\x0d\x0apublic B(A a){\x0d\x0a\x0d\x0athis.a = a \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void fun(){\x0d\x0a\x0d\x0athis.a.hello() \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic class OODemo40{\x0d\x0a\x0d\x0apublic static void main(String args[]){\x0d\x0a\x0d\x0aA aa = new A() \x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a}