Java中的this指针

在Java中,提到this谁都不会陌生,这里再简单整理下,备忘。

Java中,一般来说this指针指的是当前正在访问的这段代码的对象,但是如果在内部类中需要使用外部类中的对象,这时就需要使用外部类的类名进行限定。这种方式在Android开发中也比较常见

@Author: twlkyao

package twlkyao;

public class A {
    public A() {
        Inner inner = new Inner();
        inner.outer(); // call the inner class‘s outer method.
        this.outer(); // call A‘s outer method.
    } 

    public void outer() {
        System.out.println("outer run");
    } 

    class Inner {
        public void outer(){
            System.out.println("inner run");
            A.this.outer(); // call A‘s outer method.
            System.out.println("--------");
        }
    }

    public static void main(String[] args) {
    	A a = new A();
    }
} 

Inner是内部类,访问类A中的outer()方法,又由于匿名内部类中有同样的方法,所以需要使用A的this指针进行限定。

输出结果为:

inner run
outer run
--------
outer run

参考资料:http://bbs.csdn.net/topics/260050701

Java中的this指针

时间: 2024-10-14 07:46:09

Java中的this指针的相关文章

Java中的引用和C++中引用的区别

首先了解C++ 中引用的含义:"引用"即"别名".C++中的引用代表的就是实际的存储空间.对其进行操作就是对存储空间进行操作. 而在Java中的引用:可以看做是C语言中的"指针"或者"地址".对java中引用的属性(即指针指向的存储空间)进行操作才是有效的. 1)Java引用作为函数(方法)参数 Java的方法参数只是传值,引用作为参数使用时,会给函数内引用的值的COPY,所以在函数内交换两个引用参数是没有意义的,因为函数交换

【Java】关于Java中参数传递方式与C++的比较

[写作原由] 今天刚刚刷了一道二叉树路径搜索的题(LeetCode 113 Path Sum II),在采用熟悉的C++解答之后,用Java语言再次撸了一遍,发现一些问题,特别是参数传递的问题: [C++] 在C/C++中,参数传递分为两种:值传递和地址传递,其中: 1.值传递:实际参数将值传递给形式参数,对形式参数进行操作不影响实际参数,如: int main() { int temp=100; printf("before:%d",temp); add1(temp); printf

Java中的引用和指针

java中内存的分配方式有两种,一种是在堆中分配,一种是在堆栈中分配,所有new出来的对象都是在堆中分配的,函数中参数的传递是在栈中分配的.通常情况下堆的内存可以很大,比如32位操作系统中的虚拟内存都可以被堆所使用(当内存紧张的时候甚至硬盘都可以是堆的存储空间),而堆栈的内存分配是有限的. 这和c++中内存分配差不多.java中有几种基本类型如int,float,double,char,byte等,他们不是对象,除此之外一切都是对象,所有的对象都是在堆上分配的.但好像在C#中这些都有封装好的一些

java中传值及引伸深度克隆的思考(说白了Java只能传递对象指针)

java中传值及引伸深度克隆的思考 大家都知道java中没有指针.难道java真的没有指针吗?句柄是什么?变量地址在哪里?没有地址的话简直不可想象! java中内存的分配方式有两种,一种是在堆中分配,一种是在堆栈中分配,所有new出来的对象都是在堆中分配的,函数中参数的传递是在栈中分配的.通常情况下堆的内存可以很大,比如32位操作系统中的虚拟内存都可以被堆所使用(当内存紧张的时候甚至硬盘都可以是堆的存储空间),而堆栈的内存分配是有限的. 这和c++中内存分配差不多(c++中还要有另一种方式用于全

【实战Java高并发程序设计 1】Java中的指针:Unsafe类

是<实战Java高并发程序设计>第4章的几点. 如果你对技术有着不折不挠的追求,应该还会特别在意incrementAndGet() 方法中compareAndSet()的实现.现在,就让我们更进一步看一下它把! public final boolean compareAndSet(int expect, int update){ returnunsafe.compareAndSwapInt(this, valueOffset, expect, update); } 在这里,我们看到一个特殊的变

Java中到底有没有指针;同时注意引用和指针的区别

Java中引用的作用类似于指针,但是有区别:()    (1) 指针必然指向一个内存地址,如果你定义的时候不指定,就会乱指(很可能造成安全隐患)但是引用定义出来后默认指向为空.     (2) 指针可以随意操作,但是引用不可以随便操作,永远只能指向对象的首地址,或者改变引用所指向的对象.     (3) 引用降低了指针的灵活性,但是更安全,便于人操作.     (4)引用是受控.安全.阉割版的指针.安全了,当然也就失去了一定的功能,不过还是利大于弊.    (5)Java 中没有指针,但是有一个

JAVA中堆栈和内存分配

(一).栈.堆 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中.)3. 堆:存放所有new出来的对象.4. 静态域(属于方法区) :存放静态成员(static定义的)5. 常量池 (属于方法区):存放字符串常量和基本类型常量(public static final).6. 非RAM存储:硬盘等永久存储空间这里我们主要关心栈

java中的null注意事件总结

对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者都承认这是他的一项巨大失误.Java为什么要保留null呢?null出现有一段时间了,并且我认为Java发明者知道null与它解决的问题相比带来了更多的麻烦,但是null仍然陪伴着Java. 我越发感到惊奇,因为java的设计原理是为了简化事情,那就是为什么没有浪费时间在指针.操作符重载.多继承实现的原因,null却与此正好相反.好吧,我真的不知道这个问题的答案,我知道的是不管null被Ja

看Java中==、equals、hashCode的来龙去脉

我有一个哥们去参加了面试,面试官这样问一个Java问题: 你说一下java对象的equals方法调用什么方法呢?我这个哥们想了想,回答说"应该是比较的引用".听了这个答案之后,那个面试官摇头晃脑的说:"不对,你回答的不对,equals方法调用的是hashCode方法".于是乎,我那个技术还不错的哥们就悲壮地栽在这道题目上了. 今天晚上,西安历史上少有的热,那就好好总结一下这个题目的来龙去脉好了,也方便给后面的朋友们提个醒,不要栽在这么简单的问题上.你说这个面试官回答