Yandex

Java Advanced ConceptsJava Advanced Concepts3

Java ReferenceJava Reference1

Java final Keyword
Usage and Examples



final Keyword in Java

In Java, the final keyword is a powerful modifier that brings immutability and restriction to your code. It's used to signal that something should not be changed — whether it’s a variable, a method, or even an entire class. Think of it as Java’s way of saying: "Hands off!"

1. Final Variables – Making Data Immutable

When you declare a variable as final, you are telling Java: “This variable’s value should be assigned only once.” Once a final variable is assigned, it cannot be modified again.

public class FinalVariableExample {
  public static void main(String[] args) {
    final int speedLimit = 60;
    System.out.println("Speed Limit: " + speedLimit);

    // speedLimit = 80; // Uncommenting this will cause a compile-time error
  }
}
Speed Limit: 60

Explanation: The variable speedLimit is marked as final. Attempting to change its value results in a compilation error. This is especially useful for constants or values you want to protect from accidental changes.

2. Final with Reference Types

With objects, final prevents reassignment — but does not make the object immutable.

class Car {
  String model = "Honda";
}

public class FinalReferenceExample {
  public static void main(String[] args) {
    final Car myCar = new Car();
    myCar.model = "Toyota"; // Allowed
    // myCar = new Car(); // Not allowed
    System.out.println("Car model: " + myCar.model);
  }
}
Car model: Toyota

Explanation: The reference myCar is final, so it cannot point to another Car object. However, the contents of the object (like its model) can still be changed.

3. Final Methods – Locking Down Behavior

When you mark a method as final, it cannot be overridden by subclasses. This ensures that the core logic of the method remains untouched — ideal for methods that form the backbone of a class’s behavior.

class Parent {
  final void show() {
    System.out.println("Final method in Parent");
  }
}

class Child extends Parent {
  // void show() { System.out.println("Trying to override"); } // Error!
}
Final method in Parent

Explanation: The method show() is declared final in the parent class, so any attempt to override it in a child class will lead to a compile-time error.

4. Final Classes – Preventing Inheritance

A final class is the ultimate boundary — it cannot be extended or subclassed. This is commonly seen in utility or security-related classes.

final class Vehicle {
  void drive() {
    System.out.println("Driving safely...");
  }
}

// class Bike extends Vehicle {} // Compile-time error
Driving safely...

Explanation: Once a class is marked final, it’s sealed. It can still be instantiated, but no subclassing is allowed — this ensures the class's design is preserved as-is.

5. Final Parameters – Read-Only Inputs

You can also declare method parameters as final to ensure that their values are not reassigned within the method.

public class FinalParameterExample {
  void display(final int x) {
    System.out.println("Value: " + x);
    // x = 50; // Not allowed
  }
}
Value: [whatever value is passed]

Explanation: This is useful for making sure that parameters passed to methods remain consistent, especially in recursive logic or callback scenarios.

When to Use final



Welcome to ProgramGuru

Sign up to start your journey with us

Support ProgramGuru.org

You can support this website with a contribution of your choice.

When making a contribution, mention your name, and programguru.org in the message. Your name shall be displayed in the sponsors list.

PayPal

UPI

PhonePe QR

MALLIKARJUNA M