Instance initializer block:
- Instance initializer
block
- Example of Instance
initializer block
- What is invoked firstly
instance initializer block or constructor?
- Rules for instance
initializer block
- Program of instance
initializer block that is invoked after super()
Instance
Initializer block is
used to initialize the instance data member. It run each time when object of
the class is created.
|
The
initialization of the instance variable can be directly but there can be
performed extra operations while initializing the instance variable in the
instance initializer block.
|
Que) What is the use of
instance initializer block while we can directly assign a value in instance
data member? For example:
1. class Bike{
2. int speed=100;
3. }
Why use instance initializer block?
Suppose
I have to perform some operations while assigning value to instance data
member e.g. a for loop to fill a complex array or error handling etc.
|
Example of
instance initializer block
Let's
see the simple example of instance initializer block the performs
initialization.
|
1. class Bike7{
2. int speed;
3.
4. Bike7(){System.out.println("speed is "+speed);}
5.
6. {speed=100;}
7.
8. public static void main(String args[]){
9. Bike7 b1=new Bike7();
10. Bike7 b2=new Bike7();
11. }
12. }
Output:speed is 100
speed is 100
There
are three places in java where you can perform operations:
1. method
2. constructor
3. block
|
What is invoked firstly instance initializer block or
constructor?
1. class Bike8{
2. int speed;
3.
4. Bike8(){System.out.println("constructor is invoked");}
5.
6. {System.out.println("instance initializer block invoked");}
7.
8. public static void main(String args[]){
9. Bike8 b1=new Bike8();
10. Bike8 b2=new Bike8();
11. }
12. }
Output:instance initializer block invoked
constructor is invoked
instance initializer block invoked
constructor is invoked
In
the above example, it seems that instance initializer block is firstly
invoked but NO. Instance intializer block is invoked at the time of object
creation. The java compiler copies the instance initializer block in the
constructor after the first statement super(). So firstly, constructor is
invoked. Let's understand it by the figure given below:
|
Note: The java compiler
copies the code of instance initializer block in every constructor.
Rules for instance initializer block :
There
are mainly three rules for the instance initializer block. They are as
follows:
|
- The
instance initializer block is created when instance of the class is
created.
- The
instance initializer block is invoked after the parent class constructor
is invoked (i.e. after super() constructor call).
- The
instance initializer block comes in the order in which they appear.
Program of instance initializer block that is invoked after
super()
1. class A{
2. A(){
3. System.out.println("parent class constructor invoked");
4. }
5. }
6. class B2 extends A{
7. B2(){
8. super();
9. System.out.println("child class constructor invoked");
10. }
11.
12. {System.out.println("instance initializer block is invoked");}
13.
14. public static void main(String args[]){
15. B2 b=new B2();
16. }
17. }
Output:parent class constructor invoked
instance initializer block is invoked
child class constructor invoked
Another example of instance block
1. class A{
2. A(){
3. System.out.println("parent class constructor invoked");
4. }
5. }
6.
7. class B3 extends A{
8. B3(){
9. super();
10. System.out.println("child class constructor invoked");
11. }
12.
13. B3(int a){
14. super();
15. System.out.println("child class constructor invoked "+a);
16. }
17.
18. {System.out.println("instance initializer block is invoked");}
19.
20. public static void main(String args[]){
21. B3 b1=new B3();
22. B3 b2=new B3(10);
23. }
24. }
Output:parent class constructor invoked
instance initializer block is invoked
child class constructor invoked
parent class constructor invoked
instance initializer block is invoked
child class constructor invoked 10
No comments:
Post a Comment