文档章节

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
这个其实不能算是理解,只能算是简单的应用的,没有深入去看
ThreadLocal使用分析

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

huangandroid
08/26
0
0
JVM基础:深入学习JVM堆与JVM栈

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

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

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

snailclimb
05/12
0
0
在 JNI 编程中避免内存泄漏

此文转自 IBM developerWorks JNI 编程简介 JNI,Java Native Interface,是 native code 的编程接口。JNI 使 Java 代码程序可以与 native code 交互——在 Java 程序中调用 native code;在...

IBMdW
2011/04/26
968
1
Java堆和栈的区别和介绍以及JVM的堆和栈

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

代金券优惠
05/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

myeclipse 启动到10分之一左右就挂了

删掉 {workspace}/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi

夜醒者
16分钟前
1
0
Hive on Spark 伪分布式环境搭建过程记录

进入hive cli是,会有如下提示: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) ......

PeakFang-BOK
23分钟前
1
0
用户输入和while 循环

# 用户输入和while循环# 7.1函数input() 的工作原理# 函数input() 让程序暂停运行,等待用户输入一些文本。获取用户输入后,Python将其存储在一个变量中,以方便你使用。message = inp...

吕湘颖
24分钟前
1
0
开发函数计算的正确姿势 —— 排查超时问题

写不尽的 code,查不完的 bug 通常我们写 bug,哦,不对,写代码时总不会一帆风顺,往往各种 bug 充斥其中,即使测试有较高的代码覆盖率往往也会有漏网之鱼。能写出一些比较隐蔽或者看起来像...

阿里云云栖社区
28分钟前
2
0
Python3新特性

一、类型注解 例子: def add(x:int, y:int) -> int: return x + y 解释: 类型`的形式指定函数的**参数类型**,用`-> 类型`的形式指定函数的**返回值类型 然后特别要强调的是,Pyt...

_Change_
43分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部