文档章节

Java中this对象引用理解

FeanLau
 FeanLau
发布于 2017/07/29 11:16
字数 475
阅读 8
收藏 0

在Java中理解了成员变量、方法和局部变量,可以想象出对象在其自己的方法中应该可以访问自己的成员变量,确实如此,下面的代码说明这个问题:

class Hello {

    public static void main(String args[]) {
        // 创建Person对象,然后调用其showAge方法
        new Person().showAge();
    }
}

class Person {
    int age = 23;
    String name = "Tom";

    void showAge()
    {
        System.out.println("My name is " + name + ", and my age is " + age + ".");
    }
}

演示的效果如下:

提示:如果某个对象只是被访问一次,可以直接在new操作后调用其方法或成员变量,而不用将new操作的返回值赋给一个引用。因为new操作的返回值就是所创建对象的引用,这与使用明确声明的引用来进行调用作用是一样的。

从上图中可以看出,程序编译、运行一切正常。这时,细心点,提出一个问题:如果成员变量与局部变量同名,调用时,是如何处理的?请考虑以下的代码:

class Hello {

    // 定义了成员变量i,初始值为500
    int i = 500;

    void showI() {
        // 定义了局部变量i,初始值为300
        int i = 300;
        System.out.println("The value of i is " + i + ".");
    }

    public static void main(String args[]) {
        new Hello().showI();

    }
}

 编译并运行如上代码,其结果如下所示:

从上面的图中可以看出,打印的是局部变量i的值。也就是说,在当局部变量与成员变量同名时,系统将访问局部变量。在这种情况下,如果要访问成员变量,就可以使用预定义对象引用this。this可以在任何一个方法中使用,表示指向对象自己的引用。

将上图中的第9行代码修改为:

System.out.println("The value of i is " + this.i + ".");

再次编译并运行如上代码,其结果如下:

© 著作权归作者所有

共有 人打赏支持
FeanLau
粉丝 3
博文 219
码字总数 117077
作品 0
浦东
程序员
加载中

评论(2)

FeanLau
FeanLau
Java中的this和PHP中的this一样,没有太多的区别
FeanLau
FeanLau
这个其实不能算是理解,只能算是简单的应用的,没有深入去看
JVM基础:深入学习JVM堆与JVM栈

以前堆是干啥栈是干啥都知道,就是没连在一起想想。感觉讲的不错的一篇儿~~JVM栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;JVM堆解决的是数据存储的问题,即数据怎么放、放在...

李星
2014/06/04
0
0
面试中关于Java虚拟机(jvm)的问题看这篇就够了

最近看书的过程中整理了一些面试题,面试题以及答案都在我的文章中有所提到,希望你能在以问题为导向的过程中掌握虚拟机的核心知识。面试毕竟是面试,核心知识我们还是要掌握的,加油~~~ 下面...

snailclimb
05/12
0
0
ThreadLocal使用分析

前言   ThreadLocal从名字上直译为本地线程,看上去像是线程的一种子类,如果你这样理解说明你理解错了。   在上一篇深入理解Android中的消息机制,理解Hander MessageQueue Looper三者之...

huangandroid
08/26
0
0
Java堆和栈的区别和介绍以及JVM的堆和栈

Java堆和栈的区别和介绍以及JVM的堆和栈 一、Java的堆内存和栈内存 Java把内存划分成两种:一种是堆内存,一种是栈内存。 堆:主要用于存储实例化的对象,数组。由JVM动态分配内存空间。一个...

代金券优惠
05/24
0
0
Java堆和栈的区别,JVM的堆和栈的介绍

一、Java的堆内存和栈内存 Java把内存划分成两种:一种是堆内存,一种是栈内存。 堆:主要用于存储实例化的对象,数组。由JVM动态分配内存空间。一个JVM只有一个堆内存,线程是可以共享数据的...

光明辉煌
05/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【大福利】极客时间专栏返现二维码大汇总

我已经购买了如下专栏,大家通过我的二维码你可以获得一定额度的返现! 然后,再给大家来个福利,只要你通过我的二维码购买,并且关注了【飞鱼说编程】公众号,可以加我微信或者私聊我,我再...

飞鱼说编程
今天
1
0
Spring5对比Spring3.2源码之容器的基本实现

最近看了《Spring源码深度解析》,该书是基于Spring3.2版本的,其中关于第二章容器的基本实现部分,目前spring5的实现方式已有较大改变。 Spring3.2的实现: public void testSimpleLoad(){...

Ilike_Java
今天
1
0
【王阳明心学语录】-001

1.“破山中贼易,破心中贼难。” 2.“夫万事万物之理不外于吾心。” 3.“心即理也。”“心外无理,心外无物,心外无事。” 4.“人心之得其正者即道心;道心之失其正者即人心。” 5.“无...

卯金刀GG
今天
2
0
OSChina 周三乱弹 —— 我们无法成为野兽

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ _刚刚好: 霸王洗发水这波很骚 手机党少年们想听歌,请使劲儿戳(这里) hahahahahahh @嘻酱:居然忘了喝水。 让你喝可乐的话, 你准忘不了...

小小编辑
今天
9
0
vm GC 日志 配置及查看

-XX:+PrintGCDetails 打印 gc 日志 -XX:+PrintTenuringDistribution 监控晋升分布 -XX:+PrintGCTimeStamps 包含时间戳 -XX:+printGCDateStamps 包含时间 -Xloggc:<filename> 可以将数据保存为......

Canaan_
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部