学习笔记体会。

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. GitHub起步---创建第一个项目

    ---恢复内容开始--- 刚起步学习GitHub,边学边说! {参考教程:http://blog.csdn.net/steven6977/article/details/10567719}这里描述的很 ...

  2. WordPress中添加自定义评论表情包的方法

    先来看看效果: 现在由于WordPress版本更新,再加上WordPress主题也越来越多,而现在的主题一般都是禁用了WordPress自带的评论表情,其实自带 的评论表情也是很丑的,但是以前我们可以 ...

  3. 设计模式——中介者模式/调停者模式(C++实现)

    #include <iostream> #include <string> using namespace std; class Colleague; class Mediat ...

  4. MSIL实用指南-生成属性

    本篇讲解怎么生成属性,包括get和set方法. 第一步,生成一个字段生成字段用TypeBuilder.DefineField方法.实例代码: FieldBuilder customerNameBldr ...

  5. 简单的nodejs 文件系统(fs)读写例子。

    在nodejs中,可以通过fs(file system)模块进行文件的I/O操作. API链接地址: http://nodeapi.ucdok.com/#/api/fs.html 下面进行fs文件系统 ...

  6. UnderScore的使用实例记录

    集合操作 _.range(),主要用于区间的获取操作.参数说明:(param1):范围上限,(param1,param2):起始及结束范围,(param1,param2,param3):起始结束范围, ...

  7. 有序的Map集合--LinkedHashMap

    提出问题: 在写一个dao的时候,我的需求是这个dao是一个万能的,目前的方法只有一个查询出实体类对应的表中所有的数据,通过传入的对象,利用反射获取实体类中的属性名,属性类型,利用字符串拼接获取相应属 ...

  8. ELK学习笔记(四)SpringBoot+Logback+Redis+ELK实例

    废话不多说,直接上干货,首先看下整体应用的大致结构.(整个过程我用到了两台虚拟机  应用和Shipper 部署在192.168.25.128 上 Redis和ELK 部署在192.168.25.129 ...

  9. RabbitMQ的安装和配置

    在Windows下进行rabbitMQ的安装 第一步:软件安装 如果安装rabbitMQ首先安装基于erlang语言支持的OTP软件,然后在下载rabbitMQ软件进行安装(安装过程都是下一步,在此不 ...

  10. 使用 js 设置组合快捷键,支持多个组合键定义,还支持 React

    ╭┈┈╮ ╭┈┈╮ ╭┈┈╮ ┆ ├┈┈..┈┈┈┈┈.┆ └┈╮┆ ├┈┈..┈┈┈┈┈..┈┈.┈┈..┈┈┈┈┈. ┆ ┆┆ □ ┆┆ ┈┤┆ < ┆ -__┘┆ ┆ ┆┆__ ┈┈┤ ╰ ...