gpt4 book ai didi

java - “this”指针未在 Java 程序中初始化

转载 作者:搜寻专家 更新时间:2023-11-01 01:33:27 25 4
gpt4 key购买 nike

我有一个程序如下:

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;
}
}

当我运行该程序时,出现以下异常:

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

这是什么原因呢?当 Color 类在其构造函数中调用 Main.getRegionName(this) 时,是否为 Color 类初始化了“this”?

最佳答案

代码的执行可以这样描述:

  • 类加载器加载枚举 Color
  • 它为第一个值 RED 调用 Color 的构造函数。
  • 在构造函数中,调用了方法 Main#getRegionName
  • 在方法 Main#getRegionName 中,switch 将调用 Color#values 以获取 的枚举值>切换
  • 由于 Color 值尚未加载,它会因 NullPointerException 而中断,并传播异常。

堆栈跟踪中的这一行注意到了这种行为:

Caused by: java.lang.NullPointerException
at com.company.Color.values(Main.java:3)

更多信息:

关于java - “this”指针未在 Java 程序中初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29996122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com