Constructor methods initialize new objects when they are created. Unlike regular methods, constructor methods cannot be called directly. They are called automatically when a new object is created. When an object is created in Java using the keyword new the following things happen:
• Memory is allocated for the new object.
• Instance variables of the object are initialized, either to their initial values or to default values (0 for numbers, null for objects, false for boolean, ‘\0’ for characters.)
• A constructor method is invoked. (A class may have one or more constructor methods with different arguments lists. Based on the number of parameters and their data types, the corresponding constructor will be invoked.)
If a class does not have any defined special constructor methods, the instance variables of the new object should be set or other methods that are needed by the object to initialize itself should be called.
By defining constructor methods in classes, the initial values of instance variables can be set. Java also facilitates overloading of constructors. Constructor overloading helps to create an object that has specific properties defined on the basis of the arguments given in the new expression.
Basic constructors
Constructors look a lot like regular methods, with two basic differences:
• Constructors always have the same name as the class.
• Constructors do not have a return type .
Program shows a simple class by the name Identity. The constructor method for Identity takes two arguments: a string object representing its name and an integer that stands for its age.
Using constructors.
123456789101112131415161718192021 class
Identity {
String name;
int
age;
Identity (String n,
int
a) {
name = n;
age = a;
}
void
printldentity() {
System.out.print(
"Name is"
+ name);
System.out.printin(
"Age is"
+ age);
}
public
static
void
main (String args[]) {
Identity I;
I =
new
Identity(
"Shyam"
,
30
);
I.printldentity ();
System.out.println(
" -------- "
) ;
I =
new
Identity(
"Johnny"
,
3
);
I.print Identity ();
System.out.printIn(
" -------- "
) ;
}
}
The output of this program is as follows:
Name is Shyam
Age is 30
Name is Johnny
Age is 3
The Identity class has three methods, The first is the constructor method which initializes the two instance variables of the class based on the arguments to new, The Identity class also includes a method called printIdentity() so that the object can ‘introduce’ itself and a main() method to test each of these things.
Calling another constructor
Some constructors may be supersets of other constructors defined within a class. This implies that the constructor might have the same behaviour as the other constructor plus other additional behaviour. Rather than duplicating identical behaviour in multiple constructors in a class, it is recommended to just call the first constructor from inside the body of the second constructor. Java provides a special syntax for doing this. A constructor defined within the current class can be called using the keyword this. The syntax would be as follows:
1 this
(arg1, arg2, arg3,..);
The arguments to this() are the arguments to the constructor.
Overloading constructors
Similar to methods, constructors can take many different numbers and types of parameters in the body of one program, enabling the programmer to create objects with desired functionality.
Program shows the example of a class Rectangle that has overloaded constructors.
Using overloaded constructors.
123456789101112131415161718192021222324252627282930313233343536373839404142434445 import
java.awt.Point;
class
Rectangle {
int
x1 =
0
;
int
y1 =
0
;
int
x2 =
0
;
int
y2 =
0
;
Rectangle(
int
x1,
int
y1,
int
x2,
int
y2) {
this
.x1 = x1;
this
.y1 = y1;
this
.x2 = x2;
this
.y2 = y2;
}
Rectangle(Point top Left. Point bottomRight) {
x1 = topLeft.x;
y1 = topLeft.y;
x2 = bottomRight.x;
y2 = bottomRight.y;
}
Rectangle(Point top Left.
int
w.
int
h) {
x1 = topLeft.x;
y1 = topLeft.y;
x2 = (x1 + w);
y2 = (y1 + h);
}
void
printRect() {
System.out.print(
"Rectangle: <"
+ x1 + “ , “+ y1);
System.out.println(
","
+ x2 +
","
+ y2 +
">"
);
}
public
static
void
main(String args[]) {
Rectangle rect;
System.out.println(
"Calling Rectangle with coordinates 5,5,25,25:"
);
rect =
new
Rectangle(
5
.
5
,
25
.
25
);
rect.printRect();
System.out.println(“………”);
System.out.println(
"Calling Rectangle with points (10,10). (20,20):"
);
rect =
new
Rectangle(
new
Point(
10
,
10
),
new
Point(
20.20
));
rect.printRect();
System.out.println(
" -----------"
);
System.out.print(
"Calling Rectangle with point (10,10)"
);
System.out.println(
" width (50) and height (50):"
);
rect =
new
Rectangle(
new
Point(
1
0.1
0
).
50
,
50
);
rect.printRect();
System.out.printIn(
" ---------- "
) ;
}
}
The output of Program is the following:
Calling Rectangle with coordinates 5,5,25,25:
MyRect: <5, 5, 25, 25>
Calling Rectangle with points (10,10), (20,20):
MyRect:<1 0,10,20,20>
Calling Rectangle with point (10,10), width (50) and height (50):
MyRect: < 10, 10,60, 60>