网站首页布局分析,深夜免费软件app下载,专门做图的网站,网站搭建好之后提示网页走丢了文章目录 一、 为什么要有this引用二、什么是this引用三、this引用的特性四、如何用好this关键字 一、 为什么要有this引用
我们先看一段代码
class Data {public int year;public int month;public int day;public void setDay(int y,int m,int d) {year y;month m;day d… 文章目录 一、 为什么要有this引用二、什么是this引用三、this引用的特性四、如何用好this关键字 一、 为什么要有this引用
我们先看一段代码
class Data {public int year;public int month;public int day;public void setDay(int y,int m,int d) {year y;month m;day d;}public void printDay() {System.out.println(year / month / day);}
}
public class Test2 {public static void main(String[] args) {//构造三个日期的实例Data data1 new Data();Data data2 new Data();Data data3 new Data();//对三个日期进行设置初始化data1.setDay(2004,8,12);data2.setDay(2004,8,19);data1.printDay();data2.printDay();}
}如上代码我们定义了一个Data类然后实例化两个日期对象。随后我们设置日期初始化。我们有两个对象但是只有一个共同的方法编译器怎么知道是给那个对象赋值初始化呢其实就是this这个关键词起到的作用。如下代码所示其实方法中自带一个隐藏参数this(一般我们自己不写我们知道就可以。
public void setDay(Data this,int y,int m,int d) {year y;month m;day d;}有了这个this编译器就知道调用各自对象的方法。 this引用的是调用成员方法的对象 还有一个原因当大家形参名不小心和成员变量名相同时那函数体中到底是谁给谁赋值成员变量给成员变量参数给参数参数给成员变量成员变量参数估计自己都搞不清楚了。如下代码。 public void setDay1(int year,int month,int day) {year year;month month;day day;}public static void main(String[] args) {Data data new Data();data.setDay1(2023,10,21);data.printDay();}我们会发现结果全是0。为什么呢 因为在这个方法中year,month,day其实都是形参变量相当于形参自己在给自己赋值并不是在给对象里面的变量赋值因为局部变量优先所以在这个方法中根本拿不到我们对象中的成员变量也就无法满足我们的需求。 所以需要this关键字来划清他们之间的界限。
二、什么是this引用
this引用指向当前对象(成员方法运行时调用该成员方法的对象)在成员方法中所有成员变量的操作都是通过该引用去访问。只不过所有的操作对用户是透明的即用户不需要来传递编译器自动完成。 根据上图我们就会发现this引用的其实就是调用成员方法的对象。
三、this引用的特性
this的类型对应类类型引用即哪个对象调用就是哪个对象的引用类型。this只能在成员方法中使用。在成员方法中this只能引用当前对象不能再引用其他对象。this是“成员方法”第一个隐藏的参数编译器会自动传递在成员方法执行时编译器会负责将调用成员方法对象的引用传递给该成员方法this负责来接收。如下图所示
四、如何用好this关键字
就拿上面代码为例子我们的需求和目的是用形参变量来给对象中的成员变量赋值初始化。那么我们就要借助this关键字来区分他们。用this关键字课拿到对象中的成员变量。如下代码。
class Data {public int year;public int month;public int day;public void setDay1(int year,int month,int day) {this.year year;this.month month;this.day day;}public void printDay() {System.out.println(year / month / day);}
}
public class Test2 {public static void main(String[] args) {Data data new Data();data.setDay1(2023,10,21);data.printDay();}
}这样运行就可以满足我们的需求。 总结当形参变量和对象成员变量的名字相同时需要借用this来区分 如何形参变量和对象成员变量的名字不同时用不用this都没有问题小编这里的建议是不管名字相同还是不同都使用this。当然在实际运用中我们应该根据自己的需求来编写相对应的代码。
以上就是this关键字的详细介绍相信这篇文章能给大家带来帮助。如果觉得博主写的不错的可以留下你们的关注和点赞和博主一起共同进步一起努力。谢谢大家也欢迎大家到评论下留言讨论。