匿名类的名称

时间:2013-10-12 19:15:55

标签: java anonymous-types

我描述的是一个班级

public class MyClass{ ... }
public class Main{
    public static void main(String[] args){
        MyClass m= new MyClass(){ };
        System.out.println(m.getClass.getName);
    }
}

输出:

main.Main$1

这个输出意味着什么?我描述了匿名类,因此m具有匿名类型。我预计会抛出NullPointerException

2 个答案:

答案 0 :(得分:4)

  

我除了NullPointerException

为什么呢?代码的哪一部分让你期待这个?

  

这个输出意味着什么?

您班级中使用的匿名班级按其出现在班级中的顺序编号。 main.Main$1表示这是第一个创建的匿名类。

例如,请考虑以下示例:

class MyClass { }

public class Demo {

    static MyClass obj = new MyClass() { 
        { 
            System.out.println("static field: " + this.getClass().getName());
        }
    };

    MyClass obj2 = new MyClass() { 
        { 
            System.out.println("instance field: " + this.getClass().getName());
        }
    };    

    public static void main(String[] args) {
        Demo obj4 = new Demo();

        MyClass obj3 = new MyClass() { 
            { 
                System.out.println("local variable: " + this.getClass().getName());
            }
        };    

    }
}

不要担心这些障碍。这些只是每个匿名类中的实例初始化块。

执行此代码时,您将获得以下输出:

static field: Demo$1
instance field: Demo$2
local variable: Demo$3

现在尝试移动static字段后的instance字段,看看他们得到的名称。

答案 1 :(得分:3)

  

这个输出意味着什么?

Main $ 1表示Main下的第一个匿名类。

注意: - $表示内部类

  

我除了`NullPointerException。

你为什么这么期待?请提供一些理由。 :)