|
|
Optimize with a SATA RAID Storage Solution
Range of capacities as low as $1250 per TB. Ideal if you currently rely on servers/disks/JBODs
Page 7 of 9
Now that you have seen class initialization at work, it is time to focus on object initialization. As you will discover, the initializers that perform object initialization mirror those initializers that perform class initialization. As with class initialization, the simplest kind of object initialization is automatic initialization of object fields to default values. Listing 9 illustrates that type of initialization:
Listing 9. ObjectInitializationDemo1.java
// ObjectInitializationDemo1.java
class ObjectInitializationDemo1
{
boolean b;
byte by;
char c;
double d;
float f;
int i;
long l;
short s;
String st;
public static void main (String [] args)
{
ObjectInitializationDemo1 oid1 = new ObjectInitializationDemo1 ();
System.out.println ("oid1.b = " + oid1.b);
System.out.println ("oid1.by = " + oid1.by);
System.out.println ("oid1.c = " + oid1.c);
System.out.println ("oid1.d = " + oid1.d);
System.out.println ("oid1.f = " + oid1.f);
System.out.println ("oid1.i = " + oid1.i);
System.out.println ("oid1.l = " + oid1.l);
System.out.println ("oid1.s = " + oid1.s);
System.out.println ("oid1.st = " + oid1.st);
}
}
ObjectInitializationDemo1 mirrors ClassInitializationDemo1 in that it introduces a variety of fields -- object fields, to be exact. Furthermore, no explicit values assign to any of
those fields.
You see the following output when ObjectInitializationDemo1 runs:
b = false by = 0 c = d = 0.0 f = 0.0 i = 0 l = 0 s = 0 st = null
This time, the JVM zeroes all object fields' bits. Unlike class fields, which the JVM zeroes after a class loads and is verified, the JVM only zeroes the bits of a class's object fields when a program creates an object from that class. That activity should come as no surprise when you consider that object fields bind to objects. Therefore, object fields do not exist until a program creates an object. Furthermore, each object receives its own copies of a class's object fields.
The next simplest kind of object initialization is the explicit initialization of object fields to values. Each object field explicitly initializes to a value via an object field initializer. Listing 10 shows several object field initializers:
Listing 10. ObjectInitializationDemo2.java
// ObjectInitializationDemo2.java
class ObjectInitializationDemo2
{
boolean b = true;
byte by = 1;
char c = 'A';
double d = 1.2;
float f = 3.4f;
int i = 2;
long l = 3;
short s = 4;
String st = "abc";
public static void main (String [] args)
{
ObjectInitializationDemo2 oid2 = new ObjectInitializationDemo2 ();
System.out.println ("oid2.b = " + oid2.b);
System.out.println ("oid2.by = " + oid2.by);
System.out.println ("oid2.c = " + oid2.c);
System.out.println ("oid2.d = " + oid2.d);
System.out.println ("oid2.f = " + oid2.f);
System.out.println ("oid2.i = " + oid2.i);
System.out.println ("oid2.l = " + oid2.l);
System.out.println ("oid2.s = " + oid2.s);
System.out.println ("oid2.st = " + oid2.st);
}
}
In contrast to ObjectInitializationDemo1, in ObjectInitializationDemo2 an object field initializer explicitly assigns a nondefault value to each object field. Essentially, an object field initializer
consists of the assignment operator (=) and an expression that evaluates during object creation. The assignment operator assigns the expression's value to the associated
object field. When run, ObjectInitializationDemo2 produces the following output: