- As with class initialization, the simplest kind of object initialization is automatic initialization of object fields to default values.
- Example:
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);
}
}
- Output
b = false
by = 0
c =
d = 0.0
f = 0.0
i = 0
l = 0
s = 0
st = null
- There is no class loading and byte code verifying in between.
- The same way the explicit assignment is done.
- The default constructer initializes the contents of the object. For that it uses <init> methodfrom JVM perspective
- The same way as in class initialization the object initialization also allows us to refer to the previously initialized field.
- Object Block Initailazation
{
System.out.println ("Initializing object " + hashCode ());
int localVariable = 1;
}
- In many situations, you will not use object block initializers because you can use constructors to perform complex initialization tasks.
- For situations like: Anonymous inner classes often require object block initializers to perform complex initialization tasks.
Anonymous inner classes require object block initializers because anonymous inner classes have no names, constructors take on the names of their classes, and you cannot declare constructors in classes that have no names.
- In the case of hierarchies the class at the top most level is first initialized.
- In object field/block initialization , one can access the field of the subclass but at that time the explicit value is not assigned so it will give us default value.
The pattern is an organised way of solving some specific class of problems. These patterns come in to the picture at analysis and high-level-design phase. The first step of applying one pattern to the code base is first to understand the find the vector of change in the code base. Next step is to isolate the things that are subject to change form the things that are not. That is adding a layer of abstraction to the code. The goal of design patterns is isolating the changes in your code. Understand Inheritance and Composition as a solution to a specific class of problems. Inheritance : - It allows you to express differences in behavior (that's the thing that changes) in objects that all have the same interface (that's what stays the same). Composition : - Composition can also be considered a pattern, since it allows you to change—dynamically or statically—the objects that implement your class, and thus the way that class works. Some principles of designing the c...