Confused about type declaration in Java after seeing enum
作为Java初学者,我被引入了枚举,这使我非常困惑于类型声明。我想分享我所知道的,这样你们中的一个可能会在我的想法中发现问题。
我知道有两种数据类型,原始数据类型和对象数据类型。声明变量时,首先编写数据类型,然后编写变量的标识符。
当我声明一个数据类型int变量时,我脑子里有以下想法:
1 | int a = 1; int as datatype references to the primitive integer datatype. |
当我声明一个数据类型整型变量时,我脑子里有以下想法:
1 |
当我声明一个枚举器变量时,我脑子里有以下想法:
1 | enum C {EXAMPLE1, EXAMPLE2}; No clue what enum references to.. Is it an object datatype and an instance of class enum? If so, where is the capital letter E in enum. |
所以问题开始了。我了解到枚举不是原始数据类型,所以唯一的可能性是它是一个对象。但是我也了解到,将类的对象声明为数据类型意味着标识符应该以大写字母开头,如integer、boolean等。但是,我可以声明一个没有大写字母的枚举。这是否意味着它不是一个物体?或者是一个枚举器,它只是一个类似关键字的类,而不是我假定的变量数据类型。
如果枚举不是一个变量数据类型,而是一个类似关键字的类,那么我想知道以下思想是否正确:
1 2 3 | enum Test {EXAMPLE1, EXAMPLE2} Test e = Test.EXAMPLE; Does Test reference to the object datatype? (That in this case is an instance of the enumerator Test) |
如果测试是枚举器测试的一个实例,这是怎么可能的?我只认为从类中创建对象是可能的,但我也读过一些关于枚举器中的构造函数的内容。
几个小时来我一直在寻找这个问题的答案,但都没有成功。希望我现在还没弄乱你的脑袋。但我真的希望有人能理解这一点,并真正帮助我。
I can however declare an enum without a capital letter. Does this mean it is not an object?
不。
Or is an enumerator just a keyword like class and not a variable datatype like I assumed it to be.
An enum declaration specifies a new enum type, a special kind of class type.
枚举常量是枚举类型的实例,它反过来扩展了
1 | enum Test {EXAMPLE1, EXAMPLE2} |
所以这里
1 | Test e = Test.EXAMPLE |
所以这里,局部变量e指向枚举常量;可以说,
很像
但不是完全
欢迎使用StackOverflow!
您可以将EDCOX1 0作为一种特殊的Java类型,用于声明"常量组"。简单例子:
1 2 3 4 | enum Language { PORTUGUESE, ENGLISH } |
用途:
1 2 3 4 5 | Language yourLanguage = Language.ENGLISH; if (language == Language.ENGLISH) { System.out.println("Hi!"); } |
在这种情况下,可以将
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | enum Language { PORTUGUESE("Olá!"), // Call to constructor initializing PORTUGUESE instance ENGLISH("Hi!"); // Call to constructor initializing ENGLISH instance private final String greeting; // Instance field // Constructor! Language(String greeting) { this.greeting = greeting; } public void greet() { System.out.println(greeting); } } |
用途:
1 2 | Language yourLang = Language.ENGLISH; yourLang.greet(); |