java面向对象(this关键字)

一.this的作用

1.this 相当于是指向当前对象本身

2.成员变量和局部变量同名问题

class Person {private int age;private String name;// 给姓名和年龄初始化的构造方法Person(String name, int age) {// 当需要访问成员变量是,只需要在成员变量前面加上this.即可this.name = name;this.age = age;}public void speak() {System.out.println("name=" + this.name + ",age=" + this.age);}
}class PersonDemo {public static void main(String[] args) {Person p = new Person("张三", 23);p.speak();}
}

3.调用构造函数

class Person {// Person的成员属性private int age;private String name;// 无参数的构造方法
    Person() {}// 给姓名初始化的构造方法
    Person(String nm) {name = nm;}// 给姓名和年龄初始化的构造方法Person(String nm, int a) {// 由于已经存在给姓名进行初始化的构造方法 name = nm;因此只需要调用即可// 调用其他构造方法,需要通过this关键字来调用this(nm);// 给年龄初始化age = a;}
}

 

二.this原理图解

class Person {private int age;private String name;Person() {}Person(String nm) {name = nm;}Person(String nm, int a) {this(nm);age = a;}
}class PersonDemo {public static void main(String[] args) {Person p = new Person("张三", 23);}
}

图例说明:

1、先执行main方法,main方法压栈,执行其中的new Person(“张三”,23);

2、堆内存中开辟空间,并为其分配内存地址0x33,,紧接着成员变量默认初始化(name=null  age = 0);

3、拥有两个参数的构造方法(Person(String nm , int a))压栈,在这个构造方法中有一个隐式的this,因为构造方法是给对象初始化的,那个对象调用到这个构造方法,this就指向堆中的那个对象。

4、由于Person(String nm , int a)构造方法中使用了this(nm);构造方法Person(String nm)就会压栈,并将“张三”传递给nm。在Person(String nm , int a)构造方法中同样也有隐式的this,this的值同样也为0x33,这时会执行其中name = nm,即把“张三”赋值给成员的name。当赋值结束后Person(String nm , int a)构造方法弹栈。

5、程序继续执行构造方法(Person(String nm , int a)中的age = a;这时会将23赋值给成员属性age。赋值结束构造方法(Person(String nm , int a)弹栈。

6、当构造方法(Person(String nm , int a)弹栈结束后,Person对象在内存中创建完成,并将0x33赋值给main方法中的p引用变量。

注意:

this代表的是对象,哪个对象调用了this所在的方法,this就代表哪个对象。

调用其他构造方法的语句必须定义在构造方法的第一行,原因是初始化动作要最先执行。

三.this应用实例(判断是否是同龄人)

class Person {private int age;private String name;// 给姓名和年龄初始化的构造方法Person(String name, int age) {// 当需要访问成员变量是,只需要在成员变量前面加上this.即可this.name = name;this.age = age;}public void speak() {System.out.println("name=" + this.name + ",age=" + this.age);}// 判断是否为同龄人public boolean equalsAge(Person p) {// 使用当前调用该equalsAge方法对象的age和传递进来p的age进行比较// 由于无法确定具体是哪一个对象调用equalsAge方法,这里就可以使用this来代替/** if(this.age == p.age) { return true; } return false;*/return this.age = p.age;}
}

转载于:https://www.cnblogs.com/akiyama/p/10222474.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351689.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言float二进制输出代码_下面C语言中这十四大谜题,不看答案你能做出来吗?...

C语言领取福利资料前往文末领取本篇文章《C语言的谜题》展示了14个C语言的迷题以及答案,代码应该是足够清楚的,而且我也相信有相当的一些例子可能是我们日常工作可能会见得到的。通过这些迷题,希望你能更了解C语言。如果你不看答案&#xff0…

平台策略:从Portlet到OpenSocial小工具再到渐进式Web应用程序:最新技术

介绍 由于世界仍在Java的掌控之中,因此我们经常定义所谓的基于组件的平台 。 我在2000年的OpenUSS(开放大学支持系统)方面拥有这一经验。 当时我有一个想法,就是开发一个可以使用组件体系结构和J2EE技术​​( OpenUSS …

webm文件怎么在手机上正常播放以及在电脑上转换为mp4格式!

webm是一个开放、免费的媒体文件格式。WebM影片格式是以Matroska(即MKV)容器格式为基础开发的新容器格式,里面包括了VP8影片轨和Ogg Vorbis音轨;其中Google将其拥有的VP8视频编码技术以类似BSD授权开源,而Ogg Vorbis本…

WKT介绍

WKT,是一种文本标记语言,用于表示矢量几何对象、空间参照系统及空间参照系统之间的转换。它的二进制表示方式,亦即WKB(well-known binary)则胜于在传输和在数据库中存储相同的信息。该格式由开放地理空间联盟(OGC)制定。 目录 1概念2几何对象…

DS树+图综合练习--构建邻接表

题目描述 已知一有向图,构建该图对应的邻接表。邻接表包含数组和单链表两种数据结构,其中每个数组元素也是单链表的头结点,数组元素包含两个属性,属性一是顶点编号info,属性二是指针域next指向与它相连的顶点信息。单…

mysql datetime 间隔,MySQL datetime默认时间间隔

Is it possible to add to a default time with NOW(), 10 minutes?Ive tried something like that:CREATE TABLE table1 (date DATETIME NOT NULL DEFAULT DATE_ADD(NOW(), INTERVAL 10 MINUTE));However, it doesnt work.解决方案I dont think you can do this.The DEFAULT …

golang mysql 崩溃_mysql连接问题,goruntime里执行总是出错,程序一直崩溃

初学golang,尝试写一个程序,但是在mysql操作时遇到了问题~看网上文章,推荐mysql直接创建一个db全局变量,然后连接一次,以后使用到直接用这个db,我按照这样的方法,然后进行操作,可是程…

牛客网——点菜问题

题目描述 北大网络实验室经常有活动需要叫外卖,但是每次叫外卖的报销经费的总额最大为C元,有N种菜可以点,经过长时间的点菜,网络实验室对于每种菜i都有一个量化的评价分数(表示这个菜可口程度),…

OGR示例:写shp,求面与面的交和差操作

编译命令:g main.cpp -lgdal 调用命令:./a.out 输出shp名称 操作选项 注释:操作选项(1:多边形A - 多边形B,2:B - A,3:A和B的交集部分) #include "ogr…

Spring Boot和Thymeleaf:重新加载模板和静态资源,而无需重新启动应用程序

Thymeleaf是围绕自然模板的概念设计的,该模板允许进行静态原型制作:模板逻辑不会影响用作原型的模板。 尽管这是一项很棒的技术,但您可能还希望在运行的Spring Boot应用程序中查看结果,而不必每次更改Thymeleaf视图时都重新启动服…

写cookies注意事项

在调试模式下是无法写到cookie的,因为cookie需要写到域名下,并且需要写的域名和运行的域名一致才能写入。同样在读取cookie时也只能读取到当前域名的cookie,无法读取其他域名的cookie。 比如下面用jquery表示在baidu.com的域名下写入cookie&a…

mysql记录当前表数据的数据条数据类型_mysql的表的操作 数据类型

一 数据类型1 数字:整型:tinyint int bigint小数:float:在位数较短的情况下不精准double:在位数比较长的情况下不精准1 数字整型:tinyint int big小数:float:在位数比较短的情况下不精准double:在位数比较长的…

C++中的继承与虚函数各种概念

虚继承与一般继承 虚继承和一般的继承不同,一般的继承,在目前大多数的C编译器实现的对象模型中,派生类对象会直接包含基类对象的字段。而虚继承的情况,派生类对象不会直接包含基类对象的字段,而是通过一个间接的指针去…

中国科学院大学数学院本科生教材

中国科学院大学数学科学学院本科生教材(不完全统计) 注:不同的任课老师使用不太一样的教材,仅供参考。 一年级: 微积分I-A:《数学分析(第4版)》第1卷,卓里奇,…

sqlite mysql php_PHP实现的简单操作SQLite数据库类与用法示例

本文实例讲述了PHP实现的简单操作SQLite数据库类与用法。分享给大家供大家参考,具体如下:SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它…

Win7下WinDbg开启Local Kernel Debug调试

问题:在Win7 64bit系统中用管理员权限打开WinDbg开启Local Kernel Debug时报错: The system does not support local kernel debugging. Local kernel debugging requires Windows XP, Administrative privileges, and is not supported by WOW64. Only …

idea 不能及时编译_您是否能及时编译?

idea 不能及时编译还记得上次被C开发人员嘲笑的时候吗? Java如此繁琐,以至于他们甚至都不会考虑使用这种语言? 在许多方面,这一概念仍然成立。 但是对于典型的用法(在大型企业的骨干中),Java性…

接口开发-导读

接下来的这个系列,完全针对“APP接口”开发进行,所以,希望你有一定的Java开发基础、以及一定的接口交互经验。 思来想去,决定按照下面的提纲进行 1. 基于SpringBoot创建基础框架; 2. 集成数据库操作(mybati…

安装mysql显示有5.0_安装MySQL5.0时到如图这一步提示出错了,~

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户…

WinDbg配置和使用基础

WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。 1. WinDbg介绍: Debugging Tools and Symbols: Getting Started http://www.microsoft.com/whdc/devtools/d…