This week's giveaway is in the Android forum.
We're giving away four copies of Android Security Essentials Live Lessons and have Godfrey Nolan on-line!
See this thread for details.
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes Constructor in enum Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


Win a copy of Android Security Essentials Live Lessons this week in the Android forum!
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "Constructor in enum" Watch "Constructor in enum" New topic
Author

Constructor in enum

Deepak Bobal
Ranch Hand

Joined: Feb 06, 2008
Posts: 96


Output-
Color is called RRR
Color is called YYY
Color is called GGG

but i expect that only Green constructor should be invoked and output would be "Color is called GGG"

Moreover if i create an overloaded constructor with two parameters and if only that is invoked ,we get rest of the constructors called too.

Does it happen in case of enum unkile to class contructors?


Constant dripping hollows out a stone....
Tom Reilly
Rancher

Joined: Jun 01, 2010
Posts: 618
Enums are classes. The compiler just treats them a little special. Their constructors are the same. The difference is in how the instances can be created. Class instances are created using the new operator by any other code that has access to the class (and a couple other ways that are not relevant to this conversation). The compiler prevents you from using the new operator on enums (it adds protection even greater than defining a constructor as private).

The compiler (under the covers) defines and initialises one static final reference for each enum element that you define. For example, you defined an enum called Color and defined the Color elements RED, WHITE, and BLUE (well, I changed the colors for the good ol' USA). Then only three static final references are defined and initialized by the compiler. So enum instances are created the same as any other object that must be assigned to a static reference - before any code uses the class (or enum).

As an illustration of enums being classes, I modified your code as follows. As you mentioned, there can be multiple constructors. One constructor can even call the other one. An enum can override methods and can even have a main() method. To show when enum instances are created I modified the printlns to illustrate.


BTW, the static final instances are also the reason why you can use the == operator to compare two enum references.

Also BTW, I started to answer your question and then got carried away. I hope I did not add confusion.
Deepak Bobal
Ranch Hand

Joined: Feb 06, 2008
Posts: 96
Thank you Tom.

output of your program is -

First reference to Color is next
this.color = Red
this.color = White
this.color = Blue
this.favorite = true
COLOR.RED is Red

So do i consider that all the constructors of enum are invoked with a single call of an enum.

As at line 17 we call only RED but WHITE is called automatically.
Ikpefua Jacob-Obinyan
Ranch Hand

Joined: Aug 31, 2010
Posts: 394

Deepak Bobal wrote:

Output-
Color is called RRR
Color is called YYY
Color is called GGG

but i expect that only Green constructor should be invoked and output would be "Color is called GGG"

Moreover if i create an overloaded constructor with two parameters and if only that is invoked ,we get rest of the constructors called too.

Does it happen in case of enum unkile to class contructors?


Hello Deepak I was precisely studying enums yesterday, you know enum constructors are automatically INVOKED.
Modify your code like this and the out-put will be GGG:



OCPJP 6.
In Your Pursuit Towards Certification, NEVER Give Up.
 
Consider Paul's rocket mass heater.
 
subject: Constructor in enum
 
Similar Threads
Enum member variable access
question on enum
Strange behaviour of enum
Abstract Method in enum
Enum constants in Switch