java枚举类型书上也没有在枚举类里声明有static的枚举变量,为啥我这就不行了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java枚举类型书上也没有在枚举类里声明有static的枚举变量,为啥我这就不行了相关的知识,希望对你有一定的参考价值。

import java.util.Arrays;import java.util.Scanner;
enum sea s2,s1,s3;
public class ex String str[] = "1","23456";
public static void main(String[] args) sea.x = sea.s1; System.out.println("S1");

必须在enum里加个static sea x;

参考技术A 净信书不如无书,书上是可能有印刷错误等等什么的,你理解透彻了就没问题了。enum通常被用做为是一个含有相同类型常量的特殊类,既然是类,那么肯定可以在其内定义成员变量,比如你说的static sea x;而为什么必须要加static sea x;才能正确运行,那是因为main方法是static的,所以在main方法里想要直接类名.属性名访问某一个类的(非私有权限的)类成员变量,那么就必须在被访问类的成员变量前加上static修饰咯,^_^ 参考技术B 你的main方法中访问了非静态的变量。这就是原因。

Java 枚举类型必须定义在静态类中

在内部类中,定义枚举类型 Direction 时,eclipse 报错,错误信息为:
The member enum Direction must be defined inside a static member type
而将该枚举类型定义放在外部类,或者将该内部类声明为 static, 则顺利通过。这是什么机制?

应该是enum类型本质是静态类,普通内部类里当然不能定义静态类。静态类是编译期确定的,普通内部类是运行时确定的,所以静态内部类的普通成员父类要到运行期才能确定,就不可能编译确定该普通内部类的静态内部类,就是说,该静态内部类的上层父类当中不能有一层是普通内部类,编译器编译时中间就断链了。即在内部类中只能静态包含静态,不能普通包含静态。希望你能理解。 参考技术A 我帮你翻译下句子,应该就一目了然了。
句意为:枚举成员Direction 必须被定义为静态成员类型。
希望对你有点帮助

以上是关于java枚举类型书上也没有在枚举类里声明有static的枚举变量,为啥我这就不行了的主要内容,如果未能解决你的问题,请参考以下文章

Java 枚举类型必须定义在静态类中

java 如何将String 转换成 枚举

java枚举有啥不好

Java枚举类的serialVersionUID

java中的enum

java怎么声明枚举类型