我有一个程序如下:
package com.company;
enum Color {
RED, GREEN;
Color() {
System.out.println(Main.getRegionName(this));
}
}
public class Main {
public static String getRegionName(Color region) {
switch (region) {
case RED:
return "red";
case GREEN:
return "green";
default:
return "false";
}
}
public static void main(String[] args) {
Main m = new Main();
Color color = Color.RED;
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,我得到以下例外:
Exception in thread "main" java.lang.ExceptionInInitializerError
at com.company.Main.getRegionName(Main.java:13)
at com.company.Color.<init>(Main.java:7)
at com.company.Color.<clinit>(Main.java:4)
at com.company.Main.main(Main.java:25)
Caused by: java.lang.NullPointerException
at com.company.Color.values(Main.java:3)
at com.company.Main$1.<clinit>(Main.java:13)
... 4 more
Run Code Online (Sandbox Code Playgroud)
它是什么原因?当它在构造函数中调用Main.getRegionName(this)时,是否为Color类初始化了'this'?
代码的执行可以这样描述:
Color.Color第一个值的构造函数,RED.Main#getRegionName.Main#getRegionName,switch将调用以Color#values获取枚举的值switch.Color尚未加载值,因此它会被a打破NullPointerException,异常会被传播.stacktrace中的这一行注意到了这种行为:
引起:
com.company.Color.values的java.lang.NullPointerException (Main.java:3)
更多信息:
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |