学习笔记体会。

this的通俗解释:

有一个A类,一个B方法,一个C变量,其中B和C都在类A中

this.B()就是调用A类中的B方法
this.C=1(假设C是一个int变量)就是给类A的C变量赋了1这个值

简单的说就是调用本类的方法或者变量(都是成员的)

需求: 使用java类描述一个动物。

class Animal{ 

	String name = "狗";  //成员变量

	//this关键字代表了所属函数的调用者对象
public void eat(){
//System.out.println("this:"+ this);
String name = "老鼠"; //局部变量
System.out.println(name+"在吃..."); //需求: 就要目前的name是成员变量的name. }
} class Demo6
{
public static void main(String[] args)
{
Animal a = new Animal(); //现在在内存中存在两份name数据。 a.eat(); }
}

运行结果是:

老鼠在吃...

为何是老鼠在吃呢 而不是狗在吃

因为存在同名的成员变量与局部变量时,在方法的内部访问的是局部变量(java 采取的是就近原则的机制访问的。)。

那么问题就来了???

需要解决这种同类同变量名时怎么区分并且调用?

用this关键字来解决就可以了。

先给大家看看内存图估计就懂了

下面看我用this关键字来解决上面的问题。

class Animal{

	String name ;  //成员变量

	public Animal(String name){
this.name = name;
} //this关键字代表了所属函数的调用者对象
public void eat(){
//System.out.println("this:"+ this);
String name = "老鼠"; //局部变量
System.out.println(this.name+"在吃..."); //需求: 就要目前的name是成员变量的name.
System.out.println(this);
}
} class Demo6
{
public static void main(String[] args)
{
Animal dog = new Animal("狗"); //现在在内存中存在两份name数据。 Animal cat = new Animal("猫");
dog.eat();
cat.eat(); }
}

运行结果:

狗在吃...
Animal@15db9742
猫在吃...
Animal@6d06d69c

上面有两句内存地址 就说明了第一次调用了函数和第二次调用了函数的对象是不同的(第一次是dog,第二次是cat),这就区分了  两个对象分别调用变量而不混淆的好处了。。

如果这样都不理解的话,可以这样认为this关键字代表了所属函数的调用者对象。 例如 第一次调用:

(this.name+"在吃...");

可以看成

(dog.name+"在吃...");

dog变量地址是Animal@15db9742    然后就去Animal对象找name的值     以此类推。

(个人观点)this我认为最主要特点是:区分成员变量和局部变量的名称冲突,哪个对象调用了this所在的函数,this就代表哪个对象

this关键字代表了所属函数的调用者对象。

this代表其所在函数所属对象的引用。换言之,this代本类对象的引用。
当成员变量和局部变量重名,可以用关键字this来区分,this就是所在函数所属对象的引用。
简单说,哪个对象调用了this所在的函数,this就代表哪个对象。一般方法调用默认加this。

什么时候使用this关键字呢?
当在函数内需要用到调用该函数的对象时,就用this。

P.S.
    通过this在构造函数中调用其他构造函数的时候,只能定义在构造函数的第一行,因为初始化动作要先执行,否则就会报错。

JAVA_SE基础——31.this关键字的更多相关文章

  1. JAVA_SE基础——6.标识符&关键字

    学会写helloworld之后,  我们就开始来认识标识符&关键字 一.标识符 标识符是指可被用来为类.变量或方法等命名的字符序列,换言之,标识符就是用户自定义的名称来标识类.变量或方法等.更 ...

  2. JAVA_SE基础——41.instanceof关键字(运算符)

    instanceof 关键字 instanceof关键字的作用:判断一个对象是否属于指定的类别. instanceof关键字的使用前提:判断的对象与指定的类别必须要存在继承或者实现的关系.关于实现以后 ...

  3. JAVA_SE基础——40.super关键字

    只要this关键字掌握了,super关键字不在话下,因为他们原理都差不多的.. this&super 什么是this,this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针 ...

  4. JAVA_SE基础——33.this关键字的练习

    需求:使用java定义的一个人类,人具备 id ,name ,age 三个属性,还具备一个比较年龄的方法. 要求:必须要写上构造函数,构造函数也必须要使用上this关键字. class Person{ ...

  5. JAVA_SE基础——32.this关键字调用本类的构造方法

    黑马程序员入学blog... 也算是学习笔记. 下面我们来看段代码: package day07; class Student{ int id; //身份证 String name; //名字 pub ...

  6. Java之--Java语言基础组成(关键字、标识符、注释、常量和变量、运算符)

    Java语言基础组成-关键字.标识符.注释.常量和变量.运算符 Java语言由8个模块构成,分别为:1.关键字:2.标识符(包名.类名.接口名.常量名.变量名等):3.注释:4.常量和变量:5.运算符 ...

  7. JAVA_SE基础——26.[深入解析]局部变量与成员变量的区别

    黑马程序员入学blog ... 如果这章节很难懂的话应该返回去先看  JAVA_SE基础--10.变量的作用域 定义的位置上区别: 1. 成员变量是定义在方法之外,类之内的. 2. 局部变量是定义在方 ...

  8. JAVA_SE基础——8.基本数据类型

    基本数据类型有:整数类型.浮点类型.字符类型.布尔类型 整数类型 整数类型用来存储整数数值,即没有小数部分的数值.与C.C++语言相同,整数在Java语言中有3种表示形式:十进制.八进制和十六进制. ...

  9. JAVA_SE基础——7.常量&变量

    上一篇,我讲了标识符&关键字    这篇我来解释下变量&常量~~~ 变量与常量这两个概念相信大家都不会感到陌生,在数学中就已经涉及了变量与常量.理解变量与常量,可以举这样一个例子: 例 ...

随机推荐

  1. [AH/HNOI2017]单旋

    这道题可以用LCT做,开set,LCT,二叉树 操作1:直接开set,找到它要插入的位置,一定是前驱,后缀中deep最大的(显然手玩) 操作2:set+LCT询问路径,直接手动提上去,因为树的形态不变 ...

  2. MySQL性能调优与架构设计

    1.Scale(扩展):从数据库来看,就是让数据库能够提供更强的服务能力 ScaleOut: 是通过增加处理节点的方式来提高整体处理能力 ScaleUp: 是通过增加当前处理节点的处理能力来提高整体的 ...

  3. mac 配置虚拟主机

    http://www.upwqy.com/details/4.html 编辑httpd.conf文件,输入命令: vim /etc/apache2/httpd.conf 编辑httpd-vhosts. ...

  4. AngularJS中实现服务端分页

    这个教程将介绍在AngularJS应用中的服务端分页处理.在任何涉及到列表或表格数据的应用中都可能会用到分页. 概念 当我们处理异步分页时,每次只从服务器上获取一页数据.也就是说当用户点击第二页,就只 ...

  5. C++学习-9

    友元主要用于访问私有变量,友元函数跟所在位置的权限没有任何关系friend+函数声明 友元类通常设计为一种对数据操作或类之间传递消息的辅助类(注意一下顺序) Explicit就是要求严格的匹配,不允许 ...

  6. Unity服务端链接MySQL数据库

    链接数据库,可以分为以下几个流程: 链接MySQL(数据库地址.端口.用户名.密码) 选择数据库 执行sql语句 关闭数据库 转换为代码如下: using System; using MySql.Da ...

  7. 笔记:I/O流-文件操作

    Java库中使用 Path 和 Files 类封装了在用户机器上处理文件系统所需要的所有功能,可以使用Paths来获取一个具体的Path对象,来表示具体的路径. 路径 Path表示的是一个目录名序列, ...

  8. Java I/O 总结

    Java I/O的的架构使用了装饰器的模式,我们在使用流的时候需要新建很多的装饰器对象,对源数据进行层层包装.各个包装类名以及它们的应用场景比较多,初学的时候难以摸清规律,这里我把它们归一下类,方便大 ...

  9. elementUI源码修改定制

    1.修改elementUI源码 首先从Git上克隆代码或者下载代码包 进入文件夹打开终端或Git Bash Here,运行npm install 安装依赖包.npm run dev 打开网页http: ...

  10. 计时器setInterval()-慕课网

    计时器setInterval() 在执行时,从载入页面后每隔指定的时间执行代码. 语法: setInterval(代码,交互时间); 参数说明: 1. 代码:要调用的函数或要执行的代码串. 2. 交互 ...