问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java中this的作用及用法是什么?

发布网友 发布时间:2022-04-23 06:27

我来回答

1个回答

热心网友 时间:2022-04-24 01:15

使用this调用本类中的属性

现在观察以下代码,看会有那些问题:

public void setName(String name){

name = name ;

}

这里面的两个name都是setName方法中的name参数。

此时,特别希望可以通过一个指定的标识明确的表示要把传入的name参数的值给类中的属性,所以此时就需要使用this关键字,使用this.name就表示类中的属性。

class Person{

private String name ;

private int age ;

public Person(String name,int age){

this.setName(name) ;

this.setAge(age) ;

}

public void setName(String name){

this.name = name ;

}

public void setAge(int age){

this.age = age ;

}

public String getName(){

return this.name ;

}

public int getAge(){

return this.age ;

}

public void print(){

System.out.println("姓名:"+this.name+",年龄:"+this.age) ;

}

};

public class Demo35{

public static void main(String args[]){

Person p1 = new Person("张三",30) ;

p1.print() ;

}

};

使用this还可以从一个构造方法中调用其他构造方法。

例如:有以下一个要求,一个类中存在了三个构造方法,但是要求,不管怎么调用,最终都要求可以在对象实例化的时候打印一个“新的对象产生了”的提示。

class Person{

private String name ;

private int age ;

public Person(){

System.out.println("新的对象产生了。。。") ;

}

public Person(String name){

System.out.println("新的对象产生了。。。") ;

this.setName(name) ;

}

public Person(String name,int age){

System.out.println("新的对象产生了。。。") ;

this.setName(name) ;

this.setAge(age) ;

}

public void setName(String name){

this.name = name ;

}

public void setAge(int age){

this.age = age ;

}

public String getName(){

return this.name ;

}

public int getAge(){

return this.age ;

}

public void print(){

System.out.println("姓名:"+this.name+",年龄:"+this.age) ;

}

};

以上代码虽然可以实现功能,但是同样的代码出现了三次,而且后面的两次出现纯属多余吧。用this()的形式可以调用类中的无参构造方法。

class Person{

private String name ;

private int age ;

public Person(){

System.out.println("新的对象产生了。。。") ;

}

public Person(String name){

// 最终都是调用无参构造方法

this() ;

this.setName(name) ;

}

public Person(String name,int age){

this(name) ;

this.setAge(age) ;

}

public void setName(String name){

this.name = name ;

}

public void setAge(int age){

this.age = age ;

}

public String getName(){

return this.name ;

}

public int getAge(){

return this.age ;

}

public void print(){

System.out.println("姓名:"+this.name+",年龄:"+this.age) ;

}

};

public class Demo36{

public static void main(String args[]){

Person p1 = new Person("张三",30) ;

p1.print() ;

}

};

注意点1:

如果使用了this调用其他构造方法,则此语句,必须写在构造方法的首行。

public void fun(){

// 发现在调用fun方法的时候,必须先设置name的值

this("zhangsan") ;

}

public Person(String name,int age){

this.setAge(age) ;

this(name) ; //--> 必须放在首行

}

注意点2:

使用this可以调用本类中的其他构造方法,但是至少留一个构造方法,作为程序的出口。

public Person(){

this("a",10) ;

System.out.println("新的对象产生了。。。") ;

}

public Person(String name){

// 最终都是调用无参构造方法

this() ;

this.setName(name) ;

}

public Person(String name,int age){

this(name) ; //--> 必须放在首行

this.setAge(age) ;

}

this最重要的特性 —— 表示当前对象

当前对象在程序中用以下形式体现:

· 当前操作此方法的对象,就称为当前对象。

class Demo{

public void print(){

System.out.println(this) ;

}

};

public class Demo38{

public static void main(String args[]){

Demo d1 = new Demo() ;

System.out.println(d1) ;

d1.print() ;

System.out.println("---------------------") ;

Demo d2 = new Demo() ;

System.out.println(d2) ;

d2.print() ;

}

};

回顾:

之前讲解的两个对象比较的程序。

// 在类的内部增加一个比较的方法

public boolean compare(Person p){

Person p1 = this ;

Person p2 = p ;

if(p1.name.equals(p2.name)&&p1.age==p2.age){

return true ;

}else{

return false ;

}

}

分析程序的运行过程:

class A{

private B b = null ;

public A(){

this.b = new B(this) ;

this.b.fun() ;

}

public void hello(){

System.out.println("Hello World!!!") ;

}

};

class B{

private A a = null ;

public B(A a){

this.a = a ;

}

public void fun(){

this.a.hello() ;

}

};

public class OODemo40{

public static void main(String args[]){

A aa = new A() ;

}

};
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
天涯论坛的网址是什么啊? 如何辨别天涯社区的官方网站? 天涯社区的官方网址是什么呀? 嘉陵火星人(150CC)报价 广西能上150C的摩托车牌吗 隆鑫200cc和150cc的发动机怎么辨认_百度问一问 150cc大船摩托车问题!请高手帮我·· 我想问问这是125cc还是150cc 滁州琅琊山的门票要多少钱 为什么手机连上WiFi却无法上网了? 要回家结婚辞职报告怎么写 辞职申请报告我要回家结婚怎么写 如何才能长高?(我是个13岁的男孩儿) java中this是干什么的,具体的作用是什么。 因为结婚辞职信怎么写 用结婚做理由的离职申请书怎么写 13岁男生怎么样才能长高点? JAVA中的this是什么意思? 要结婚怎么写辞职报告 java中this变量是什么? 结婚离职申请书怎么写 java中“this”的用法是什么? 结婚辞职申请书怎么写 13岁男孩长高方法? java里this是什么意思? 13岁男少年一年长高方法 13岁男孩如何长高 13岁男孩长高方法 透明胶带粘在软玻璃上怎么清除 有什么好方法可以清除粘在玻璃上的透明胶带痕迹? 要结婚辞职报告怎么写 java this什么意思? 离职已结婚为理由怎么写申请书 java当中this应该怎么理解? 员工辞职申请书回家结婚的范文怎么写 因为要回家和女朋友结婚了 所以要辞职了 求一封合适的辞职信 结婚辞职申请怎么写 请问要回家结婚辞职申请怎么写 军人结婚规定是什么 离职理由回家结婚怎么写好 刚来没有几个月因为要回家结婚离职申请书1500字 军婚法定结婚年龄 怎么写辞职申请书? 当兵法定结婚年龄是多少 女儿结婚我要回家辞职报告怎么写 个人原因辞职信怎么写? cad怎样在矩形上画凹槽 CAD中画矩形的命令是什么? 在CAD中,我想画规定尺寸的矩形怎么画? CAD的怎么画矩形呢?