文档章节

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
码字总数 130409
作品 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
Java堆和栈的区别和介绍以及JVM的堆和栈

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

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

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

光明辉煌
05/21
0
0
ThreadLocal与synchronized

1.区别ThreadLocal 与 synchronized ThreadLocal是一个线程隔离(或者说是线程安全)的变量存储的管理实体(注意:不是存储用的),它以Java类方式表现; synchronized是Java的一个保留字,只...

晨曦之光
2012/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
0
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
0
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
2
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部