WEB视频自适应 Gitlab 网络服务器 作用域 存量客户 ssl mono webkit Animsition vue请求 网络营销视频 jq去空格 jquery选择子元素 mysql降序 docker保存镜像 python3教程 python定义变量 python语言编程入门 python怎么配置环境 java中的tostring java字符串长度 怎么配置java环境 java抽象方法 java数组添加值 java时间戳转换 java获取数据类型 java接口的修饰符 java中long linux服务器 linux内核编程 狮子狗出装 mounted linux解压tar js删除节点 dota改键工具 3d软件下载 万能低格工具还原u盘 qq空间自动点赞 华为mate8和p9哪个好 骰子牛牛
当前位置: 首页 > 学习教程  > 编程语言

Java里this的作用和用法

2020/12/28 19:32:18 文章标签:

this, 一个官方的说法是,this首先是一个对象,它代表调用这个函数的对象。 根据面向对象的基本语法,每当调用变量或者函数的时候,都要按照类名.变量(函数)的格式来调用,意即每个变量或函数都必须属于某一个实际的对象而不是一个类(static的除外). 在不会产生混淆的地…

this, 一个官方的说法是,this首先是一个对象,它代表调用这个函数的对象。

根据面向对象的基本语法,每当调用变量或者函数的时候,都要按照类名.变量(函数)的格式来调用,意即每个变量或函数都必须属于某一个实际的对象而不是一个类(static的除外).
在不会产生混淆的地方, this是可以省略的,但一般都会加上,(Think in Java里面说最好不要加,因为大家都不加)

例如,下面的程序中,类"Person"里面加与不加 this 编译运行后的结果是一样的:

 1 package testThis;
 2 
 3 public class Test {
 4     public static void main(String args[]){
 5         Person p1 = new Person();
 6         p1.name = "zhangsan";
 7         Person p2 = new Person();
 8         p2.name = "lisi";
 9         
10         p1.talk();
11         p2.talk();
12     }
13 }./*欢迎加入java交流Q君样:909038429一起吹水聊天
14 
15 class Person{
16     String name;
17     void talk(){
18         System.out.println("My name is " + this.name);
19     }
20 }

上面的代码里第18行,不管是"this.name"还是"name",运行的结果都是:

My name is zhangsan
My name is lisi

因为前面已经把p1和p2里面的name变量赋值,所以执行方法的时候,都会打印出它们各自的数据.

但是,当函数里面有参数时,如果函数的参数和成员变量一样,这时不加this的话,程序就会根据"就近原则",自动调用最近的值,如下面的代码: 在这里插入图片描述
上面已经把对象p1和p2里面的变量name分别赋值为"zhangsan"和"lisi",但类"Person"里面的方法"talk"现在有了参数"String name",而且没有加"this",这时如果运行这个方法,方法就会接收后面参数传送给它的值,分别是"zhang"和"li",这时运行结果就会是:

My name is zhang
My name is li

所以,这里虽然对象p1和p2各有自己的变量 name,但它们调用的方法接收的却是参数里面的值,(从系统里各变量的颜色背景也可心看出对应的变量),而不是它们自己本身的值.所以这里输出的结果跟它们自己内部的值无关.

如果想要在它们各自调用talk()方法时分别输出自己内部的值,则需要在类 “Person"里面的方法"talk"里加上"this”,这样,当它们各自调用这个方法时,输出的结果都是它们各自内部变量的值了:
在这里插入图片描述

上面介绍的是用this来调用本身对象的变量和函数,this还有一个重要的作用就是用来调用构造函数.可以用来精简代码.比如下例,如果我们的类里面有多个构造函数,分别给不同的变量赋值,就可能会产生重复代码,为了解决这些重复代码,就可以用this(变量)的方式,来调用另一个构造函数,来给变量赋值.在这里插入图片描述
在这里插入图片描述
image
最新2020整理收集的一些高频面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友请加Q君样:909038429
/./*欢迎加入java交流Q君样:909038429一起吹水聊天


本文链接: http://www.dtmao.cc/news_show_550286.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?