class acts as a blueprint for creating objects, which are instances of the class. Understanding these basics is essential before moving on to more advanced OOP topics like inheritance, polymorphism, and encapsulation.
Defining a Class
In Java, aclass is defined using the class keyword. A class serves as a blueprint to create objects. Here’s a simple example:
Person.java
class can have fields (variables), methods (functions), and constructors. In this snippet, we define a Person class with data members name and age.
What is an Object?
An object is an instance of a class. It represents a specific example of the class and holds the characteristics that define the class. Objects have three main characteristics:- State: The data or attributes of the object. In the
Personclass, thenameandageare the object’s state. - Behavior: The methods and functions that the object can perform. In the
Personclass, thedisplaymethod is an example of behavior. - Identity: A unique identifier that distinguishes the object from others, even if they have the same state. This is handled by the memory address in the JVM.
Using Constructors
Constructors are special methods used to initialize a newly created object’s state. They have the same name as the class and no return type.Default vs Parameterized Constructors
- Default Constructor: If you don’t define any constructor, Java inserts a default one that sets values to null/0.
- Parameterized Constructor: Allows you to initialize an object with specific values.
Person class, we can define a constructor to set the name and age:
Person.java
this refers to the current instance of the class. It is used to distinguish the class’s fields from the parameters with the same names.
Overloading Constructors
Java allows you to have multiple constructors in a class, each with a different parameter list. This is known as constructor overloading. Overloading constructors allows you to create objects in different ways, depending on the parameters provided. Here’s an example of a class with overloaded constructors:Car.java
Car class has three constructors:
- One that takes both
brandandyearas parameters. - One that takes only
brandand sets a default value foryear. - One that takes no parameters and sets default values for both
brandandyear.
Copy Constructors
A copy constructor in Java is a special type of constructor used to create a new object as a copy of an existing object. It takes a single parameter: an object of the same class. The fields of the new object are initialized with the values of the fields of the existing object, effectively cloning the object. This is useful when you want to create a duplicate object with the same state. Here’s how a copy constructor looks:Car.java
brand and year) from the original Car object are accurately copied to the new Car object.
Initialization Order
When you create an object (e.g.,new Car()), code executes in a specific order. It’s not just the constructor that runs!
The Order of Execution:
- Static Blocks / Fields: Run once when the class is loaded by the ClassLoader.
- Instance Initialization Blocks / Fields: Run every time an object is created, before the constructor.
- Constructor: Runs last to perform final initialization.
Demo.java
Member Functions
Member functions define the behavior of the object. For thePerson class, we can define a method to display the object’s data:
Person.java
Creating Objects from Classes
Once you have defined a class, you can create objects (instances of the class). Here’s how we can create and use objects of thePerson class:
Person.java
Main.java
person, with the name “Alice” and age 30 by using the new keyword along with the Person class’s constructor. The inputs “Alice” and 30 are passed directly to the constructor to initialize the object’s state.
The object then uses its display method to print its data to the console. This demonstrates how to instantiate a class and call its member functions in a Java program.
Object Destruction (Garbage Collection)
In languages like C++, we must manually destroy objects to free memory. In Java, this process is automatic.- Garbage Collection (GC): A background process in the JVM that identifies objects that are no longer in use (unreachable) and deletes them to free up Heap memory.
- Destructors? Java does not have destructors.
- The
finalize()method: Historically, Java had afinalize()method, but it is deprecated and should not be used.
If we need to close resources (like files or database connections), we should use the
try-with-resources statement or an explicit close() method rather than relying on the Garbage Collector.