JAVA_SE基础——31.this关键字
来源:互联网 发布:淘宝官服电话 编辑:程序博客网 时间:2024/06/05 23:58
黑马程序员入学blog...
也算是学习笔记体会。
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关键字
- JAVA_SE基础——33.this关键字的练习
- JAVA_SE基础——6.标识符&关键字
- JAVA_SE基础——40.super关键字
- JAVA_SE基础——32.this关键字调用本类的构造方法
- JAVA_SE基础——41.instanceof关键字(运算符)
- JAVA_SE基础——7.常量&变量
- JAVA_SE基础——8.基本数据类型
- JAVA_SE基础——15.循环嵌套
- JAVA_SE基础——16.方法
- JAVA_SE基础——27.匿名对象
- JAVA_SE基础——28.封装
- JAVA_SE基础——29.构造函数
- JAVA_SE基础——39.继承
- JAVA_SE基础——43.抽象类
- JAVA_SE基础——47.接口
- JAVA_SE基础——48.多态
- JAVA_SE基础——51.内部类
- Fork and Join: Java也可以轻松地编写并发程序
- MethodInvokingJobDetailFactoryBean的并发问题
- 关于通过get方法请求json数据出现数据不全的解决方案
- THU数据结构编程作业一:查询范围(Range)
- 互联网创业必备工具盘点
- JAVA_SE基础——31.this关键字
- 编译原理之常数处理机(一)
- MBProgressHUD的简单应
- 自定义Dialog,并设定Dialog的大小以及位置
- 注解驱动的springMVC与参数绑定
- 想写个软件,下面写一下自己的想法。
- 继承Thread类创建多线程
- POJ 3318 Matrix Multiplication(JAVA生成随机数)
- 关于使用百度地图过程中遇到的一些问题(一)