`

匿名类中this的特殊用法(class.this)

阅读更多
今天中午趁休息时间玩了玩android发现这样的一段代码

package com.lidongbo;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MyActivity extends BaseActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button button=(Button)findViewById(R.id.Button01);
        button.setOnClickListener(backOnClickListener);
    }
    
    private Button.OnClickListener backOnClickListener=new Button.OnClickListener() {
    	public void onClick(View v) {
    		MyActivity.this.setResult(RESULT_OK, intent);
		MyActivity.this.finish();
		}
    };
}



从以上代码中可见MyActivity.this的用法,平时一直搞J2EE也没注意过这种写法,来了兴趣,网上找了找,没找到有用的信息(和目前搜索引擎和自己描述有关),自己尝试豁然晓得了,写个例子总结下


上班时间时间紧举不出什么好的例子来




package lidongbo.test;

public class Water {

	public void wash(){
	}
	
	public void run(){
		System.out.println("Water run");
	}
	
	public static void byDrink (People man){
		//...
	}
}





package lidongbo.test;

public class People {

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

	public void run(){
		System.out.println("People run");
	}
	
	public void drink(){
		People.this.talk();
		
		new Water(){
			void play(){
				talk();//默认得到全部的(包括Water和People的)
				this.wash();//直接this.只得到Water
				People.this.talk();
				byDrink(People.this);//默认得到全部但是需要传递People引用,就要使用People.this
				run();
				this.run();
				People.this.run();//如果想调用People的run方法,就要用People.this
			}
		}.play();
		
	}
	
	
	public static void main(String[] args) {
		
		People man=new People();
		man.drink();
		
	}
	
}






在People.eat()里面如果不用People.this那么得到this指向的是匿名的Water,这样就可以区分两个不通的this,和两个实例下的同名方法了

2
1
分享到:
评论
3 楼 gzzjsoft 2013-06-10  
我就是其中不幸的人之一
Mybeautiful 写道
呵呵,这个问题很多人都搞不清白。 至少我碰见的10个至少有9个人不知道这个方法,以至与内部类与外部类有一样的方法时,不知道在内部类中调用外部类的那个方法。

2 楼 ldbjakyo 2010-10-22  
Mybeautiful 写道
呵呵,这个问题很多人都搞不清白。 至少我碰见的10个至少有9个人不知道这个方法,以至与内部类与外部类有一样的方法时,不知道在内部类中调用外部类的那个方法。

1 楼 Mybeautiful 2010-10-22  
呵呵,这个问题很多人都搞不清白。 至少我碰见的10个至少有9个人不知道这个方法,以至与内部类与外部类有一样的方法时,不知道在内部类中调用外部类的那个方法。

相关推荐

    Java语言中this的应用方法研究.pdf

    在Java语言中,this关键字可以用于四个方面:作为当前对象的引用、作为方法的参数传递、在匿名类和内部类中使用this、在构造方法中的this。 1.this作为当前对象的引用 在Java语言中,每一个类的方法成员都会隐含一...

    Java中this用法.pdf

    在上面的例子中,setName 方法中的 name 是局部变量,而 this.name 就是指全局变量 name。 2. 构造方法相互调用 在 Java 中,这个关键字也可以用来实现构造方法的相互调用。例如: ```java class B { String ...

    Java匿名类的分析和理解.pdf

    然后,我们在test方法中创建了两个实例,一个是Son的实例aa,另一个是TestClass的一个匿名类的实例bb,该匿名类的方法与Son中的方法相同。最后,我们使用这两个实例分别调用相应的cry方法。运行结果都为”this ...

    java 匿名内部类的使用规范

    Java匿名内部类是Java语言中一个独特且强大的特性,它允许我们在不需要定义一个单独的类的情况下创建类的实例。这在处理回调、事件监听、单例模式以及其他需要短时间内定义一个简单类的情况时非常有用。本篇文章将...

    java中内部类的分类及用法.pdf

    成员变量”来引用外部类的成员变量,如果在内部类中直接引用成员变量,会存在一个隐藏的“this.”,即如果内部类和外部类有同名成员变量,则内部类中的引用会指向内部类的成员变量。 根据给定的文件内容,我们看到...

    JAVA中this的使用.zip

    当类中的局部变量(方法内的变量)和成员变量(类级别的变量)名称相同时,`this`可以帮助我们明确地引用成员变量。例如: ```java class Example { int count = 10; void method() { int count = 20; System...

    java this关键字的使用

    在`setName`方法中,`this.name`表示当前对象的`name`属性,而`name`则是方法的参数。 2. **构造器的调用** `this`关键字可以用来调用同一个类中的其他构造器,这在初始化对象时非常有用。例如: ```java ...

    this关键字的总结.doc

    通过使用`A.this.run()`,明确指出了要调用的是外部类`A`的方法。 ##### 4. 在构造函数中调用本类的其他构造函数 在同一个类的不同构造函数之间,可以使用`this`关键字来调用另一个构造函数。例如: ```java ...

    java 内部类 局部内部类 匿名类 实例代码

    本篇文章将深入探讨Java中的四种内部类:实例内部类、局部内部类、匿名类和静态内部类,并通过实例代码进行详细解析。 1. **实例内部类**:这是最常见的内部类形式,它在外部类的实例方法或成员位置定义。实例内部...

    this的主要用法

    在这个例子中,匿名内部类的`run`方法使用了`this`关键字,它指向匿名内部类自身。如果需要访问外部类`Timer`的方法或属性,则需要使用`Timer.this`。 通过以上几个方面的详细介绍,我们可以看到`this`关键字在Java...

    Java4Android 16_this的使用方法

    下面将详细阐述`this`的使用方法及其在Java中的各种应用场景。 首先,`this`关键字可以用来访问当前对象的成员变量。当成员变量和局部变量名称相同时,`this`可以帮助我们区分两者,确保正确地引用成员变量。例如:...

    java this方法的使用

    `this`关键字在类的方法或构造器中使用时,它总是指向调用该方法或构造器的那个对象。这意味着`this`是当前对象的引用,可以帮助我们区分局部变量和实例变量。 2. **访问实例变量** 当类中存在同名的实例变量和...

    Prototype的Class.create函数解析

    `Class.create`函数是Prototype库中用于创建类的一个方法,它的作用是简化类的定义过程,模仿传统的面向对象语言如Java或Ruby中的类创建机制。下面我们将深入探讨`Class.create`的原理和使用方式。 首先,让我们看...

    java中的this关键字

    5. **匿名内部类中的`this`**:在匿名内部类中,`this`可能表示内部类本身,而`OuterClass.this`则表示外部类的实例。例如: ```java public class Outer { String outerValue; public void someMethod() { new...

    java内部类解析.......

    - **通过静态方法访问**:在静态方法中访问内部类需要先创建外部类实例,然后通过该实例创建内部类实例。 #### 静态内部类的特点 静态内部类不依赖于外部类的实例,可以通过外部类名直接访问。这意味着它们可以...

    this用法很重要

    // 使用this.x来访问实例变量 } } ``` 2. **调用本类的构造器**: 在一个构造器中,可以使用`this`关键字来调用同一个类的其他构造器,实现代码复用。例如: ```java public class Demo1 { private String ...

    “this”在Java中的应用分析.pdf

    在这个例子中,"this.name"和"this.salary"用来明确地引用类的成员变量,而不是方法内的局部变量(如果存在同名局部变量)。 2. **调用本类中的其他构造函数** 在类中,如果存在多个构造函数(重载构造函数),...

    java中带有this关键字的程序内存分析

    例如,当我们在`display`方法中调用`this.firstName`时,JVM会在当前对象的堆内存中查找`firstName`实例变量,并返回其值。 此外,`this`还可以在匿名内部类和lambda表达式中使用,用来引用外部类的实例变量。这...

    Java内部类和匿名内部类的用法说明

    内部类可以调用外部类的方法,如果内部类有同名方法必须使用"OuterClass.this.MethodName()"格式调用,否则将出现编译错误。 例如: ```java package innerclass; public class OuterClass { private void ...

Global site tag (gtag.js) - Google Analytics