一.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

java面向对象(this关键字)相关推荐

  1. JAVA面向对象-----final关键字

    JAVA面向对象-–final关键字 1:定义静态方法求圆的面积 2:定义静态方法求圆的周长 3:发现方法中有重复的代码,就是PI,圆周率.1:如果需要提高计算精度,就需要修改每个方法中圆周率. 4: ...

  2. java面向对象:关键字 —(16)

    static:静态的 1.可以用来修饰的结构:主要用来修饰类的内部结构 属性.方法.代码块.内部类 2.static修饰属性:静态变量(或类变量) 2.1 属性,是否使用static修饰,又分为:静态 ...

  3. java面向对象:关键字 —(17)

    interface:接口 1.使用说明: 1.接口使用interface来定义 2.Java中,接口和类是并列的两个结构 3.如何定义接口:定义接口中的成员 3.1 JDK7及以前:只能定义全局常量和 ...

  4. JAVA面向对象-----instanceof 关键字

    instanceof 关键字 1:快速演示instanceof Person p=new Person();System.out.println( p instanceof Person); 2:in ...

  5. [转载] JAVA面向对象之代码块 继承 方法的重写 super关键字与重写toString()方法介绍

    参考链接: 可以重写Java中的私有方法吗 JAVA面向对象之代码块与继承 代码块分类 局部代码块 作用:限制变量生命周期 书写位置:在方法中 构造代码块 开发中很少使用 书写位置:类中  方法外 调 ...

  6. Java 面向对象:super关键字的理解

    Java 面向对象:super关键字的理解 一.Super关键字: 1. super调用父类的构造方法,必须在构造方法的第一个 2. super只能出现在子类的方法或构造方法中! 3. super和t ...

  7. java面向对象三个关键字_Java_面向对象_this关键字

    面向对象_this关键字 1.1 this调用构造方法 在之前学习方法之间调用时,可以通过方法名进行调用.可是针对构造方法,无法通过构造方法名来相互调用. 构造方法之间的调用,可以通过this关键字来 ...

  8. 【职坐标】java面向对象前言——static关键字

    Java面向对象前言 -- static关键字详解 一.      Static关键字的概念 static为"全局"或者"静态"的意思,用来修饰成员变量(类的属 ...

  9. Java面向对象——构造方法和关键字(static、this、final、super)

    1 构造方法(Constructor)   1.构造方法和字段.方法一样,都是类中的成员之一:   2.构造方法的结构和普通方法类似,除了下面几点:   a.构造方法的名字和类名一致(包括大小写): ...

  10. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

最新文章

  1. Windows Server 2003 系列之Exchange 2003部署
  2. 关于数据库优化1——关于count(1),count(*),和count(列名)的区别,和关于表中字段顺序的问题...
  3. 人脸识别的python实现代码_手把手教你用1行代码实现人脸识别 --Python Face_recognition...
  4. WCF - 服务实例管理模式
  5. F. Cheap Robot(kruskal 重构树)
  6. 算法 - 反转字符串
  7. mysql 8 sql server_终于将 SQL Server 成功迁移至 MySQL8.0 啦!!!
  8. “Error:(1, 1) java: 非法字符: '\ufeff'”错误解决办法
  9. 微信僵尸粉源码php,清除微信僵尸粉工具源码
  10. 硬盘分区整数计算方法
  11. 概率论中常见分布总结以及python的scipy库使用:两点分布、二项分布、几何分布、泊松分布、均匀分布、指数分布、正态分布
  12. 手把手教你成为Shader编程实战达人—GPU
  13. 6月服务器维护什么时候结束,2017年6月6日定期维护公告
  14. hibernate之SessionFactory和Session
  15. Modbus Slave学习笔记
  16. Python自动化测试框架学习日记
  17. 《Sony Vegas Pro 12标准教程》——第1章 基础篇——基础知识 1.1 影视剪辑的概念...
  18. 搜索引擎排名优化技巧有哪些
  19. QML - 可视元素 Rectangle (1)
  20. Python爬取所有股票数据并进行数据分析

热门文章

  1. Properties常用方法
  2. linux-macbook内核,技术|用 Linux 让旧 MacBook 重获新生
  3. 普通人学python好吗_有人问,普通人学python真的有意义吗?看看大家都是怎么说的吧...
  4. python dicom 器官分割_python+opencv阈值分割
  5. 得力科学计算机怎么求余,山商“郭叔”:妙招讲高数 考研路上得力导师
  6. python 图像变化检测_python hough变换检测直线的实现方法
  7. 怎样自动提取邮件的内容_这些最新的外贸搜索开发工具(图灵搜、谷歌搜索提取工具、易查查),你会使用吗?...
  8. c语言printf到指定文件,急求如何将下列C语言程序数据存储到文件中?
  9. jedis watch Java_jedis操作redis的几种常见方式总结
  10. 计算机网络标准体系,计算机网络标准体系结构实验报告.doc