Java Constructors

In this article, you'll learn about Java constructors; how to create and use constructors with the help of examples.

What is a Constructor?

A constructor is similar to a method (but not actually a method) that is invoked automatically when an object is instantiated.

Java compiler distinguish between a method and a constructor by its name and return type. In Java, a constructor has same name as that of the class, and doesn’t return any value.

class Test {
    Test() {
        // constructor body
    }
}

Here, Test() is a constructor; it has same name as that of the class and doesn’t have a return type.


class Test {
    void Test() {
        // method body
    }
}

Here, Test() has same name as that of the class. However, it has a return type void. Hence, it’s a method not a constructor.

Recommended Reading: Why do constructors not return values?


Example: Java Constructor

class ConsMain {
    private int x;

    // constructor
    private ConsMain(){
        System.out.println("Constructor Called");
        x = 5;
    }

    public static void main(String[] args){
        ConsMain obj = new ConsMain();
        System.out.println("Value of x = " + obj.x);
    }
}

When you run the program, the output will be:

Constructor Called
Value of x = 5

Here, ConsMain() constructor is called when obj object is instantiated.

A constructor may or may not accept arguments.


No-Arg Constructor

If a Java constructor does not accept any parameters, it is a no-arg constructor. It's syntax is:

accessModifier ClassName() {
   // constructor body
}

Example of no-arg constructor

class NoArgCtor {

    int i;

    // constructor with no parameter
    private NoArgCtor(){
        i = 5;
        System.out.println("Object created and i = " + i);
    }

    public static void main(String[] args) {
        NoArgCtor obj = new NoArgCtor();
    }
}

When you run the program, the output will be:

Object created and i = 5

​​​​Here, NoArgCtor() constructor doesn’t accept any parameters.

Did you notice that the access modifier of NoArgCtor() constructor is private?

This is because the object is instantiated from within the same class. Hence, it can access the constructor.

However, if the object was created outside of the class, you have to declare the constructor public to access it. For example:

class Company {
    String domainName;
    // object is created in another class
    public Company(){
        domainName = "programiz.com";
    }
}

public class CompanyImplementation {
    
    public static void main(String[] args) {
        Company companyObj = new Company();
        System.out.println("Domain name = "+ companyObj.domainName);
    }
}

When you run the program, the output will be:

Domain name = programiz.com

Default Constructor

If you do not create constructors yourself, the Java compiler will automatically create a no-argument constructor during run-time. This constructor is known as default constructor. The default constructor initializes any uninitialized instance variables.

Type Default Value
boolean false
byte 0
short 0
int 0
long 0L
char \u0000
float 0.0f
double 0.0d
object Reference null

Example: Default Constructor

class DefaultConstructor {

    int a;
    boolean b;

    public static void main(String[] args) {

        DefaultConstructor obj = new DefaultConstructor();

        System.out.println("a = " + obj.a);
        System.out.println("b = " + obj.b);
    }
}

The above program is equivalent to:

class DefaultConstructor {

    int a;
    boolean b;

    private DefaultConstructor() {
        a = 0;
        b = false;
    }

    public static void main(String[] args) {

        DefaultConstructor obj = new DefaultConstructor();

        System.out.println("a = " + obj.a);
        System.out.println("b = " + obj.b);
    }
}

When you run the program, the output will be:

a = 0
b = false

Recommended Reading: Java Visibility Modifiers


Parameterized Constructor

A constructor may also accept parameters. It's syntax is:

accessModifier ClassName(arg1, arg2, ..., argn) {
    // constructor body
}

Example: Parameterized constructor

class Vehicle {

    int wheels;
    private Vehicle(int wheels){
        wheels = wheels;
        System.out.println(wheels + " wheeler vehicle created.");
    }

    public static void main(String[] args) {
        Vehicle v1 = new Vehicle(2);
        Vehicle v2 = new Vehicle(3);
        Vehicle v3 = new Vehicle(4);
    }
}

When you run the program, the output will be:

2 wheeler vehicle created.
3 wheeler vehicle created.
4 wheeler vehicle created.

Here, we have passed an argument of type int (number of wheels) to the constructor during object instantiation.


Constructors Overloading in Java

Similar like method overloading, you can also overload constructors if two or more constructors are different in parameters. For example:

class Company {

    String domainName;

    public Company(){
        this.domainName = "default";
    }

    public Company(String domainName){
        this.domainName = domainName;
    }

    public void getName(){
        System.out.println(this.domainName);
    }

    public static void main(String[] args) {
        Company defaultObj = new Company();
        Company programizObj = new Company("programiz.com");

        defaultObj.getName();
        programizObj.getName();
    }
}

When you run the program, the output will be:

default
programiz.com

Recommended Reading: this keyword in Java


Important notes

  • Constructors are invoked implicitly when you instantiate objects.
  • The two rules for creating a constructor are:
    • A Java constructor name must exactly match with the class name (including case).
    • A Java constructor must not have a return type.
  • If a class doesn't have a constructor, Java compiler automatically creates a default constructor during run-time. The default constructor initialize instance variables with default values. For example: int variable will be initialized to 0
  • Constructor types:
    • No-Arg Constructor - a constructor that does not accept any arguments
    • Default Constructor - a constructor that is automatically created by the Java compiler if it is not explicitly defined.
    • Parameterized constructor - used to specify specific values of variables in object
  • Constructors cannot be abstract or static or final.
  • Constructor can be overloaded but can not be overridden.