`

第十三章-面向对象(this关键字)

 
阅读更多

-使用场景一&this的原理图解

public class Person {

	private String name;
	
	 /*  如果写成这样阅读性非常差不知道a是什么意思.如果将a写成name 当构造方法
	  *  进栈的时候相当于将name的值又从新赋值一次,但是成员变量的name属性并没有得到该构造函数赋给的值,
	  *  构造函数中赋值就成了自己给自己又赋值了一次.相当于 int x = 3; x=x;
	  *  这个时候this关键字出现了用来解决着个问题  
	  *  当局部变量和成员变量重名时,可以使用this来区分
	  *  
	  *  this:代表对象,代表当前对象
	  *       this就是所在函数所属对象的引用
	  *       简单说:哪个对象调用了this所在函数,this就代表哪个对象
	*/
	 Person(String name) {
		 name=name;
	}
	 
	 public void speak(){
		 System.out.println(name);
	 }
	 
	
	 public static void main(String[] args) {
		
		Person p = new Person("Quinn");
		p.speak();
	}
}

 

-内存分析

构造函数在给对象赋值的时候,怎么确保出现多个new Person("旺财") new Person("小明"),能正确的赋值正确呢? 答案是,在每次出现new Person()对象时候,调用相应构造函数给对象初始化操作时候,其实构造函数中有个隐藏的this关键字 (this也是有引用存在的)谁调用该构造函数在堆中创建了对象,构造函数中的this就通过引用指向创建对象的地址,在执行构造函数里面内容的时候,发现this.name(代表引用指向的所在堆中的相应地址)并进行赋值,然后弹栈.

 

 

 

其实普通函数中也有this关键字否则在调用的时候它怎么知道调用哪个对象的中的属性呢?

 

 

应用场景

public class Person {

	private String name;
	private int age;
	
	 Person(String name) {
		 this.name=name;
	}
	 /**对this的调用必须是构造函数的第一行因为初始化动作要先执行*/
	 Person(String name,int age) {
		 this(name);
		 this.age=age;
	}
	 
	 public void speak(){
		 System.out.println(name+age);
	 }
	 
	 public static void main(String[] args) {
		
		Person p = new Person("Quinn",10);
		p.speak();
	}
}

 

this基本应用

public class Person {

	private String name;
	private int age;
	
	 Person(String name,int age) {
		 this.age=age;
	}
	 
	 //this谁调用它,它代表谁,this代表p1
	 public void compare(Person p){
		System.out.println(this.age>p.age ? this.age:p.age);
	 }
	 
	 public static void main(String[] args) {
		
		Person p1 = new Person("Quinn",5);
		Person p2 = new Person("Quinn",7);
		
		p1.compare(p2);
		
	}
}

 

  • 大小: 50.5 KB
  • 大小: 52.9 KB
  • 大小: 55.9 KB
  • 大小: 51.4 KB
  • 大小: 53.5 KB
分享到:
评论

相关推荐

    Java面向对象程序设计笔记

    第二章 Java面向对象程序设计初步 4 1. 程序语言的分类 4 解释型语言 4 Java是编译解释型语言 4 Java编译器、解释器、JVM以及OS之间的关系 4 JVM的结构与作用 4 2. 程序设计的发展过程 4 程序设计的发展过程 ...

    JAVA面向对象详细资料

    15 this关键字 17 16 方法调用时的引用传递还是值传递 19 17 面向对象语言的三大特性:封装,继承,多态 20 18 什么是封装?封装在哪? 20 18.1 封装的好处? 20 19 访问修饰符 20 20 面向对象的特性-继承 21 20.1 ...

    Java开发详解.zip

    020509_【第5章:面向对象基础】_this关键字笔记.pdf 020510_【第5章:面向对象基础】_static关键字笔记.pdf 020511_【第5章:面向对象基础】_理解main方法笔记.pdf 020512_【第5章:面向对象基础】_代码块笔记.pdf ...

    《C++ 入门》.PDF

    第十三章 派生类 第十四章 派生类的存取权限 第十五章 构造函数和析构函数 第十六章 虚函数与多态性 第十七章 虚函数与抽象类 第十八章 运算符重载 第十九章 运算符重载、this 和and 第二十章 C++的预处理程序指令 ...

    PHP 面向对象技术(全面讲解).txt

    1.面向对象的概念 面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程 架构,OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成,OOP 达到了软件...

    java语言与面向对象程序设计作业题与参考答案汇编.doc

    A、private B、public C、protected D、protect E、friend 答案:A"B"C 第13题 如下哪些是Java中有效的关键字? A、const B、NULL C、false D、this E、native 答案:A"C"D"E 判断题 第14题 对象可以赋值,只要使用...

    跟汤老师学Java(第8季):面向对象

    本课程从零开始,以通俗易懂的方式讲解Java入门,手把手教你掌握每一个知识点,真正做到零基础入门学习,最适合初学者的教程!课程内容包括:1.面向对象简介2....面向对象三大特征11.封装12.继承13.多态

    Visual C# 2010程序设计教程(教程PPT+源代码)

    基本信息 书名:高等学校计算机应用规划教材:Visual C# 2010程序设计教程 作者: 陈建伟 出版社: 清华大学出版社 页码:326 出版日期:2012-06-01 内容简介 ...第13章 文件处理 第14章 语言集成查询-LINQ

    Java语言基础下载

    第十三章:网络 213 学习目标 213 TCP/IP协议模型 214 基于Java的网络技术 216 DatagramSocket 219 InetAddress类的使用 221 扩展知识: 227 SocketChannel类 227 内容总结 229 独立实践 230 第十四章:数据结构与...

    php权威编程

    第13章 迁移 第14章 性能 第15章 一个编写PHP扩展的介绍 第16章 PHP Shell 脚本编程 附录A PEAR和PECL包索引 附录B phpDocumentor格式参考 附录C Zend Studio快速使用说明 索引 “这本书,是我的同事Andi Gutmans和...

    编写高质量代码-Web前端开发修炼之道.azw3

    5.3.6 控制this关键字的指向 5.3.7 预留回调接口 5.3.8 编程中的DRY规则 5.3.9 用hash对象传参 5.4 面向对象编程 5.4.1 面向过程编程和面向对象编程 5.4.2 JavaScript的面向对象编程 5.4.3 用面向对象方式...

    JavaScript王者归来part.1 总数2

     第13章 事件处理  13.1 什么是事件   13.1.1 消息与事件响应   13.1.2 浏览器的事件驱动机制   13.2 基本事件处理   13.2.1 事件和事件类型   13.2.2 事件的绑定   13.2.3 直接调用事件处理函数   ...

    Scala程序设计(第2版)

    第13章 可见性规则 301 13.1 默认可见性:公有可见性 301 13.2 可见性关键字 302 13.3 Public可见性 303 13.4 Protected可见性 304 13.5 Private可见性 305 13.6 作用域内私有和作用域内受保护...

    -C++参考大全(第四版) (2010 年度畅销榜

    第13章 数组、指针、引用和动态分配运算符 13.1 对象数组 13.2 指向对象的指针 13.3 C++指针的类型检查 13.4 this指针 13.5 指向派生类型的指针 13.6 指向类成员的指针 13.7 引用 13.8 格式问题 13.9 C++的动态分配...

    java基础案例与开发详解案例源码全

    第13章 13.1 java.io.File类328 13.1.1 文件和目录是什么?328 13.1.2 Java对文件和目录的操作328 13.2 JavaIO原理332 13.3 流类结构333 13.3.1 InputStream和OutputStream333 13.3.2 Reader和Writer334 13.4 文件流...

    零起点学通C++多媒体范例教学代码

    第13章 虚函数 13.1 指向子对象的父指针 13.2 虚函数 13.3 拳击游戏 13.4 继承是否可以实现多态性 13.5 在编译时的静态联编 13.6 在运行时的静态联编 13.7 在运行时的动态联编 13.8 在编译时的动态联编 13.9 调用虚...

    Java2实用教程.rar

    第13章常见数据结构的Java实现 13 1链表 13 2栈 13 3树集 13 4树映射 13 5散列集 13 6散列表 13 7向量 习题 第14章图形与图像 14 1绘制文本 14 2绘制基本图形 14 3建立字体 14 4清除 14 5Java2D 14 6图形的布尔运算 ...

    Absolute C++中文版(原书第2版)-完美的C++教程,文档中还包含英文版

    第13章 递归 384 13.1 递归void函数 384 13.1.1 一个递归调用的跟踪 386 13.1.2 递归的进一步认识 388 13.1.3 递归调用的栈 391 13.1.4 递归与迭代的比较 392 13.2 有返回值的递归函数 393 13.3 按递归方式...

    零起点学通C++学习_多媒体范例教学代码

    第13章 虚函数 13.1 指向子对象的父指针 13.2 虚函数 13.3 拳击游戏 13.4 继承是否可以实现多态性 13.5 在编译时的静态联编 13.6 在运行时的静态联编 13.7 在运行时的动态联编 13.8 在编译时的动态联编 ...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    1.5 面向对象的程序设计语言 1.6 C和C++ 1.7 简单的C程序介绍 1.8 输入和输出函数 1.9 C源程序的结构特点 1.10 书写程序时应遵循的规则 1.11 C语言的字符集 1.12 C语言词汇 1.13 Turbo C 2.0 集成开发环境的...

Global site tag (gtag.js) - Google Analytics