Tag: 初始化器

执行初始化程序块和变量定义等的顺序是什么? (在java中)

我在理解初始化发生的顺序时遇到问题。 这是我假设的顺序: *Once per 1. Static variable declaration 2. Static block *Once per object 3. variable declaration 4. initialization block 5. constructor 但根据这段代码,我显然是错的: class SomethingWrongWithMe { { b=0; //no. no error here. int a = b; //Error: Cannot reference a field before it is defined. } int b = 0; } 如果我这样做,错误就会消失: class SomethingWrongWithMe { […]

无法访问枚举初始化程序中的静态字段

在这段代码中我得到一个编译器错误,请参阅注释: public enum Type { CHANGESET(“changeset”), NEW_TICKET(“newticket”), TICKET_CHANGED(“editedticket”), CLOSED_TICKET(“closedticket”); private static final Map tracNameMap = new HashMap(); private Type(String name) { tracNameMap.put(name, this); // cannot refer to static field within an initializer } public static Type getByTracName(String tn) { return tracNameMap.get(tracNameMap); } } 有没有办法让这项工作,从其中一个字段的Map获取枚举值?