This 关键字的三个用处
---恢复内容开始---
1、this调用本类中的属性,也就是类中的成员变量
2、this调用本类中的其他构造方法,调用时要放在构造方法的首行。
1、this调用本类中的属性,也就是类中的成员变量 1 class Person{ // 定义Person类 private String name ; // 姓名 private int age ; // 年龄 public Person(String name,int age){ // 通过构造方法赋值 this.name = name ; // 为类中的name属性赋值 this.age = age ;// 为类中的age属性赋值 } public String getInfo(){ // 取得信息的方法 return "姓名:" + name + ",年龄:" + age ; } }; public class ThisDemo02{ public static void main(String args[]){ Person per1 = new Person("张三",33) ; // 调用构造实例化对象 System.out.println(per1.getInfo()) ; // 取得信息 } };
this.name this.age分别为类的属性name 和age赋值
this调用本类中的其他构造方法,调用时要放在构造方法的首行。class Person{ // 定义Person类 private String name ; // 姓名 private int age ; // 年龄 public Person(){ // 无参构造 System.out.println("新对象实例化") ; } public Person(String name){ this() ;// 调用本类中的无参构造方法 this.name = name ; } public Person(String name,int age){ // 通过构造方法赋值 this(name) ;// 调用有一个参数的构造方法 this.age = age ;// 为类中的age属性赋值 } public String getInfo(){ // 取得信息的方法\ return "姓名:" + name + ",年龄:" + age ; } }; public class ThisDemo04{ public static void main(String args[]){ Person per1 = new Person("张三",33) ; // 调用构造实例化对象 System.out.println(per1.getInfo()) ; // 取得信息 } };
首先定义无参构造函数Person 并且由 System.out.println("新对象实例化") ;输出一句语句 第二个定义了一个有参的构造函数 String name 并且由this()调用了第一个无参函数Person() 第三个定义了有两个参数的构造函数 同时 this(name)是调用了上一个构造方法Person(String name) 同时 下面的this.age位age属性赋值
执行结果如下:
this表示当前对象class Person{ // 定义Person类 private String name ; // 姓名 private int age ; // 年龄 public Person(String name,int age){ this.setName(name) ; this.setAge(age) ; } public boolean compare(Person per){ // 调用此方法时里面存在两个对象:当前对象、传入的对象 Person p1 = this ; // 当前的对象,就表示per1 Person p2 = per ; // 传递进来的对象,就表示per2 if(p1==p2){ // 判断是不是同一个对象,用地址比较 return true ; } // 之后分别判断每一个属性是否相等 if(p1.name.equals(p2.name)&&p1.age==p2.age){ return true ; // 两个对象相等 }else{ return false ; // 两个对象不相等 } } 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 class ThisDemo08{ public static void main(String args[]){ Person per1 = new Person("张三",30) ; // 声明两个对象,内容完全相等 Person per2 = new Person("张三",30) ; // 声明两个对象,内容完全相等 // 直接在主方法中依次取得各个属性进行比较 if(per1.compare(per2)){ System.out.println("两个对象相等!") ; }else{ System.out.println("两个对象不相等!") ; } } };
this表当前对象和其他对象作比较 像张三和李四作比较 由张三调用李四 然后和李四进行比较
if(per1.compare(per2)) 同时定义了构造函数compare(Person per)由张三调用compare函数 将李四调进去尽享比较。
Person p1 = this ; // 当前的对象,就表示per1 表示当前对象 Person p2 = per ; // 传递进来的对象,就表示per2
总结 This.属性 this.()方法实际上都表示了当前的对象的属姓或者当前对象调用的方法 this的核心 表示当前对象 当前正在操作本方法的对象称之为当前对象 this可以调用其它构造方法,但是此语句必须放在构造方法的首行
---恢复内容结束---
This 关键字的三个用处的更多相关文章
- .NET(c#)new关键字的三种用法
前几天去家公司面试,有一道这样的题:写出c#中new关键字的三种用法,思前想后挖空心思也只想出了两种用法,回来查了下msdn,还真是有第三种用法:用于在泛型声明中约束可能用作类型参数的参数的类型,这是 ...
- NEW关键字的三种用法
最近面试中有一道题是写new关键字的几种用法,想了下写下我知道的两种用法 第一种 创建对象.调用构造函数,这就不用讲了 ClassA A=new ClassA(); 第二种 是作为修饰符,显示隐藏继 ...
- c# new关键字的三种用法
三种用法如下: 在 C# 中,new 关键字可用作运算符.修饰符或约束. 1)new 运算符:用于创建对象和调用构造函数. 2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成 ...
- RobotFramework自动化测试框架的基础关键字(三)
1.1.1 如何定义一个字典 此处我们说的字典,其实就等同于python语言中的字典,和列表一样,字典也是python语言中非常常用的一种数据结构,也类似于Java 语言中的Map. 在 ...
- java中 this 关键字的三种用法
Java中this的三种用法 调用属性 (1)this可以调用本类中的任何成员变量 调用方法(可省略) (2)this调用本类中的成员方法(在main方法里面没有办法通过this调用) 调用构造方法 ...
- C# ?(问号)的三个用处(转载)
public DateTime? StatusDateTime = null; 脑子便也出现个问号,这是什么意思呢?网上搜下,总结如下: 1. 可空类型修饰符(?): 引用类型可以使用空引用表示一个不 ...
- C# ?(问号)的三个用处
public DateTime? StatusDateTime = null; 脑子便也出现个问号,这是什么意思呢?网上搜下,总结如下: 1. 可空类型修饰符(?): 引用类型可以使用空引用表示一个不 ...
- Java中的this关键字老生常谈
一.this的由来 this关键字就是获得调用当前方法对象的引用. 二.注意点 this关键字只能出现在方法内部,完成对调用该方法的对象的引用. 三.this关键字的三个用处 1.最主要的用处: 获 ...
- yield关键字详解与三种用法
本篇文章比较硬核, 适合有一定Python基础的读者阅读, 如果您对Python还不甚了解可以先关注我哦, 我会持续更新Python技术文章 yield详解 yield与return相同每次调用都会返 ...
随机推荐
- jvm(转)
原:https://blog.csdn.net/luomingkui1109/article/details/72820232 1.JVM简析: 作为一名Java使用者,掌握JVM的体系结构 ...
- HDU 3336 Count the string(next数组运用)
Count the string Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 金蝶k3密码批量修改
该字段含有单引号,直接使用查询语句,需要转义其中的单引号.select * from t_User where FSID = ') F ", ,P T #8 *P!D &D 80!N ...
- Caused by: java.lang.ClassNotFoundException: backtype.storm.topology.IRichSpout
1:初次运行Strom程序出现如下所示的错误,贴一下,方便脑补,也希望帮助到看到的小伙伴: 错误如下所示,主要问题是刚开始使用maven获取jar包的时候需要写<scope>provide ...
- redis性能监控(一): Redis Info 命令 - 获取 Redis 服务器的各种信息和统计数值
https://blog.csdn.net/wmx3ng/article/details/82772891 https://blog.csdn.net/lxpbs8851/article/detail ...
- Elasticsearch集群
详细Elasticsearch安装: https://www.cnblogs.com/littlehb/p/8406378.html 安装之前需先优化内核: https://www.cnblogs.c ...
- Codeforces Round #506 (Div. 3)
题解: div3水的没有什么意思 abc就不说了 d题比较显然的就是用hash 但是不能直接搞 所以我们要枚举他后面那个数的位数 然后用map判断就可以了 刚开始没搞清楚数据范围写了快速乘竟然被hac ...
- 【BZOJ3252】攻略
题解: 首先贪心的会发现我们每次一定会选当前权值和最大的那个 然后在于怎么维护这个最大值 我们发现每个修改实际上是对沿途所有点的子树的修改 所以用线段树维护就可以了.. 另外注意有重复部分,但一定是包 ...
- Spring boot国际化
国际化主要是引入了MessageSource,我们简单看下如何使用,以及其原理. 1.1 设置资源文件 在 properties新建i18n目录 新建message文件: messages.prope ...
- python_异常处理_断言
一.Python标准异常 常用异常 Exception 常规错误的基类 AttributeError 试图访问一个对象没有的属性 IOError 输入/ 输出异常,基本上是无法打开文件 ImportE ...