关于java switch语句的问题

public class D {

public static final int A = 1;

public static void main(String[] args) {

    D d = new D();

    switch (1) {
    case d.A:
        System.out.println("aaa");
        break;
    }

}

}

这段代码中,为什么用Class D 的实例d去访问常量A时,编译器不会认为A是一个常量
错误提示为:case expressions must be constant expressions

我个人认为这个问题可能要从指令层来理解,任何代码最终要翻译成指令才能让机器执行,如果你学过《计算机原理》,那么应该知道立即寻址和直接寻址的区别。我想这条语句对应的指令的相应位置上需要的是立即数而你给他d.a的地址就明显出现指令错误了呀。
以上仅代表个人意见,只供参考,希望对你有帮助。祝好!

D这个类里有A这个变量或常量吗?

都final了还用对象点

switch (1) 是这句代码有问题,里面应该是变量

你可以用D.A 或者A