public class Bird
{
private static int id = 0;
private String kind;
public Bird(String requiredKind)
{
id = id + 1;
kind = requiredKind;
}
public String toString()
{
return "Kind: " + kind + ", Id: " + id + "; ";
}
public static void main(String [] args)
{
Bird [] birds = new Bird[2];
birds[0] = new Bird("falcon");
birds[1] = new Bird("eagle");
for (int i = 0; i < 2; i++)
System.out.print(birds[i]);
System.out.println();
}
}
This is a question from a sample exam, The output is asked and the correct answer is Kind: falcon, Id: 2; Kind: eagle, Id: 2;
I didn't understand why id is 2 and it is same for both instances. Can you please explain?
Because the
id
isstatic
. That means that is a "Class variable/field" and there is only one per Class. All the instances of that Class share it the sameid
(indeed calling it "id" feels kinda weird).See here
static variables are shared across objects unlike instance variables. So when this executes
the
id
increments to 1. After that the below is executed incrementing it to 2because we are calling
toString
in the end. WhentoString
takes value ofid
to return its always 2. Better to print references one by one .in addition to static variable 'for' loop only put
not
so until end of execute 'for' loop it print only one Line because 'for' loop have not {} bracket it loop only one line
Since the
id
field is static, it will have the same value throughout (and outside of) all instances ofBird
.After creating two
Bird
objects, the constructor will have been called twice, therefore theid
will be2
.See: Understanding Instance and Class Members
because here
private static int id = 0;
id is declared static or class variable. Static variables are class variable they are not initialized or created every time an object is created.So, only one copy of static variable exist. No, new copies are created when object are created using
new
operator.