Use of final keyword in java with example

What is final keyword
final is a reserved word or a keyword in java. It can be applied to

  • A variable. This variable may be a method local variable or an instance variable. The instance(or class) variable may be static or non-static.
  • A method, or
  • A class.

Significance of final keyword for all of the above will be explained in this article.

final keyword for variables
There are two kinds of variables: class(or instance) variables and local variables. Local variables can be
1. Method arguments,
2. Variables declared inside a method,
3. Variables defined inside loops.
final keyword when applied to any of these variables means that the variable can be assigned a value only once. If you try to reassign a value to a variable, it results in a compiler error.
Local final variables
Variables defined inside a method, method arguments, variables inside a loop or as loop counters are local variables.
Below is an example of a final variable declared inside a method.

public class FinalVariableExample {
   public static void main(String[] args) {
     // declare and initialize a method local final variable
     final int count = 0;
     // re-initialize final variable
     count = 10;    // compiler error
   // final method argument
   void print(final String message) {

Above example declares and initializes a local final variable in a method and a final method argument. If an attempt is made to change their value, an error is raised “The final local variable i cannot be assigned.”

Following is an example of using final variable inside a loop.

public class FinalVariableExample {
   public static void main(String[] args) {
     for (int i = 0; i < args.length; i++) {
        // declare and initialize a loop local final variable
        final int count = i;

Above example declares a final variable inside a for loop. Since, in every iteration, a new variable is created, thus it is allowed but if you try to change the value of final variable, a compiler error will be raised.
Variables used as loop counters can not be marked final since they are incremented(and hence, reinitialized) after every iteration. Thus, following is illegal

for(final int counter = 0; counter < 10; counter++) {

resulting in compile time error “The final local variable counter cannot be assigned”.
final class variables
A final instance(or class) variable can be

  1. declared and initialized in the same line or
  2. declared and initialized later.

Only thing to remember is that it can be initialized only once. Thus, below code statements are valid

public class FinalClassVariableExample {
   // final variable declared and initialized
   final int count = 0;
   // final variable declared
   final int later;
   void go() {
      // final variable initialized
      later = 10;

A class variable which is only declared but not initialized is called blank final variable. It can only be initialized:
A. Inside the constructor of the class 

public class BlankFinalVariableExample{
   // blank final variable
   private double total;
   * Constructor
   public BlankFinalVariableExample() {
      total = 10.20;

If the class contains more than one constructor, then the final(or blank final) variable needs to be initialized in every constructor.
B. Inside initializer block 
An initializer block is an unnamed block of curly braces which is executed whenever an object of a class is created. Example,

public class BlankFinalVariableExample{
   // blank final variable
   private double total;
   * Initializer block
      total = 10.20;

A class variable which is static can only be

  1. initialized in the same line or
  2. inside a static block.

Trying to initialize it anywhere else will be a compiler error. Thus, below declarations are valid.

public class StaticVariableExample {
   // declare static final variable
   private static final int j;
   // static block
   static {
      // initialize static final variable
      j = 10;
   // declare and initialize at the same time
   static final int k = 20;

final keyword for method
final keyword when applied to a method means that a sub-class(or child class) cannot override a method. This is usually done when you want sub-classes to use the parent class implementation of a method and that they are not able to change it.
If a sub-class tries to override a method which is marked as final, then the compiler will raise an error. Example,

public class Parent {
   // final method in parent
   public final void print(){
      System.out.print("Parent method");
public class Child extends Parent {
   // Overridden method: Will be a Compiler Error !!!
   public final void print(){
      System.out.print("Child method");

Above example will result in a compiler error over the child class “Cannot override the final method from Parent”.
You also cannot apply @Override annotation over a method in child class that is marked final in parent class.
final keyword for class
final keyword when applied to a class means that you cannot extend this class. In other words, if a class is marked final, then its child class cannot be created.
A class is made final so that no one can extend and change its functionality. Often, final is also applied to make a class immutable. Example,

public final class FinalClassExample {
// Compiler Error !!!
public class Child extends FinalClassExample {

Above example will generate a compiler error “The type Child cannot subclass the final class FinalClassExample”. This is because a class is trying to extend a final class.

Remember that trying to break the rules of final keyword will always result in a compile time error. They will never lead to runtime exceptions.

final classes in java api
Following are final classes in java library

  • java.lang.String
  • java.lang.StringBuffer
  • java.lang.StringBuilder
  • Wrapper classes such as java.lang.Integer, java.lang.Character etc.
  • java.lang.Math

Advantages of final keyword
Applying final before classes, methods or variables have below benefits.

  1. final when written before a class prevents it from being sub-classed. Thus, you can be sure that the class is not modified by extending it and adding new methods to it.
  2. final keyword before a method makes it safe from being overridden. This means that the desired behavior of a class is not modified by its child classes.
  3. Adding final keyword before variables prevents their values from accidental modification thus, preventing unexpected behavior.

Hope this post clarified the use of final keyword in java and where it can be applied. Click the clap icon below to show that you liked it.

Liked the article ? Spread the word...

Leave a Reply