1

我在描述一个班级

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会被抛出。

4

2 回答 2

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字段,并查看它们的名称。

于 2013-10-12T19:19:36.477 回答
3

这个输出是什么意思?

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

注意:- $表示内部类

我除外`NullPointerException。

你为什么这么期待?请提供几个原因。:)

于 2013-10-12T19:19:05.040 回答