使用“this”和“class”作为成员

时间:2010-01-15 17:04:37

标签: java

我看过类似的Java代码:

SomeClass.this.someMethod(someArg);
Blah(AnotherClass.class);
Blah(YAClass.this);

“this”和“class”在这里意味着什么?我习惯将它们作为关键字来引用当前对象并定义一个类,但这是不同的。我的Java书和在线搜索没有得到任何解释。

4 个答案:

答案 0 :(得分:7)

SomeClass.this / YAClass.this - 封闭this / SomeClass课程的内部课程的YAClass引用。

class SomeClass {
    private InnerClass {
        public void foo() {
            SomeClass outerThis = SomeClass.this;
            [...]
        }
    }
}

(在处理可应用于任何this引用的操作时,您需要非常小心Object。一个常见的情况是内部this上的同步class,当代码应该在外部实例上同步时(在这种情况下更好的方法是使用显式锁对象)。)

AnotherClass.class - java.lang.Class类的AnotherClass对象。在Java 1.5之前,这是使用Class.forName实现的(初始化类);从1.5开始,ldc字节码已经扩展为直接支持。

Class<AnotherClass> clazz = AnotherClass.class;

两者都是在Java 1.1中引入的。

答案 1 :(得分:3)

内部类的快速示例,以完成其他答案:

class SomeClass {
     public void someMethod() {
          System.out.println("Hello, I have someMethod");
     }
     public void otherMethod() {
          addListener(new MyListener() {
              public void someMethod () {
                  System.out.println("I too, have someMethod");
              }
              public void listen() {
                   // I will call someMethod of SomeClass:
                   SomeClass.this.someMethod();
              }
          });
     }
}

答案 2 :(得分:1)

.class指的是与您的实例类对应的Class对象。 Java在每个引用类型的内存中保留一个Class

以下是Classhttp://java.sun.com/j2se/1.5.0/docs/api/java/lang/Class.html

的Javadoc

我唯一看到SomeClass.this使用的是你在处理嵌套类时,需要从内部类引用外部类的实例。请参阅此处以获取示例:http://juixe.com/techknow/index.php/2009/04/07/java-nested-inner-class-this/

答案 3 :(得分:1)

.class语法指的是Class类的特定实例。

.this语法通常在内部类中用于引用顶级类的封闭实例。如果你在内部类中只使用this,它将引用内部类的实例而不是封闭类。