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相同每次调用都会返 ...
随机推荐
- Unnamed namespaces
Unnamed namespaces The unnamed-namespace-definition is a namespace definition of the form inline(o ...
- git 小乌龟安装教程
一.windows系统安装git 首先下载git for windows客户端http://msysgit.github.io/ 安装过程没什么特别的,不停next就ok了 图太多就不继续了~ ...
- openstack 网络更改版
Openstack环境部署 (参考文献:http://www.cnblogs.com/kevingrace/p/5707003.html 和 https://docs.openstack.org/mi ...
- Ubuntu16.04安装vim8
Ubuntu16.04安装vim8 在Ubuntu16.04下编译安装vim8,并配置vim-plug插件管理器,以及安装YouCompleteMe等插件. 安装依赖 sudo apt-get ins ...
- Visual Studio 2017 IDE之xml过大报错
XML处理时遇到这个错误 在powershell中输入 $vsWherePath = Join-Path ${env:ProgramFiles(x86)} "Microsoft Visual ...
- 'tensorflow' has no attribute 'sub'
在学习tensorflow的时候,照到官方的例子做,发现了一个 Traceback (most recent call last): File , in <module> sub = tf ...
- django 视图函数返回queryset对象或日期对象至浏览器ajax接收的写法
class MyDateTimeEncode(json.JSONEncoder): def default(self, o): if isinstance(o, datetime): return o ...
- python基础——list和tuple(列表和元组)
1.list的定义,插入insert,append,按位置索引. >>> name = ['Macal','lily','lucy','bob'] --初始化>>> ...
- centos中less翻页查询的用法
用法实例: cat 21342.log | less
- bat处理复制文件
1.建bat文件自动执行复制,删除命令. 复制cd.dll文件至windows\system32的bat文件内容: @echo offset JtlDir=D:\apache-jmeter-3.0\t ...