The final keyword in java is used to create a Constant Variable, Prevent method overloading and prevent Class Inheritance, etc. Java Final keyword restrict to the user and it can apply only to: –
- Variables
- Methods
- and Class
Java Final Variable
Defining a variable as a Final makes it constant, which means you can change (modified) the value of it. You must initialize The Final Variables.
Let’s see the Example of the final variable in Java.
There is a variable mark that has used the final keyword. We will try the change the value of it. As per the concept of final the value should not be changed. Once a java final variable value assign then it can’t be changed.
class TestCode { //final variable final int mark = 90; void run() { mark = 90; } public static void main(String args[]) { TestCode obj = new TestCode(); obj.run(); } }
Output: Error:(7, 9) java: cannot assign a value to final variable mark
Nowadays IDE is rich with features, where you will get direct messages about any error and problem. See below screenshot showed an error during programming in IntelliJ IDEA.
Java final method
The main advantage of the final method is it can’t override.
Must Read about what is:-
Let’s see the example of how to make the final method and try to override a final method in java.
class ObjectShapes { final void draw(){ System.out.println("Object Shape"); } } class Rectangle extends ObjectShapes{ @Override void draw() { System.out.println("Draw Rectangle"); } } class Shape{ public static void main(String args[]){ // object creating Rectangle rect1=new Rectangle(); rect1.draw(); } }
Output: Error:(10, 10) java: draw() in Rectangle cannot override draw() in ObjectShapes
IDE itself shows an error, see below screenshot of code.
Java final class
To prevent your class to be extend use the final keyword with the class. See below example of how to do it. Where ObjectShapes class is a final class and trying to extend, but it will show an error.
final class ObjectShapes { void draw(){ System.out.println("Object Shape"); } } class Rectangle extends ObjectShapes{ @Override void draw() { System.out.println("Draw Rectangle"); } } class Shape{ public static void main(String args[]){ // object creating Rectangle rect1=new Rectangle(); rect1.draw(); } }
Output: Error:(7, 25) java: cannot inherit from final ObjectShapes
IDE itself will show an error, see the below screenshot.
What is Java’s final parameter (Arguments)?
Answer: A parameter (argument) defined (declared) with the final keyword is called a final parameter. The value of the final parameter can’t be changed.
final class ObjectShapes { void draw(int w, final int h) { h = h + h; // can't change value w = w + w; // can change value System.out.println("Object W and H " + w + " " + h); } } class Shape { public static void main(String args[]) { // object creating ObjectShapes rect1 = new ObjectShapes(); rect1.draw(2, 3); } }
Output: Error:(3, 9) java: final parameter h may not be assigned
Does the final constructor exist in Java?
Or Final keyword with constructor?
Answer: Not it’s not possible a Java final constructor, because the constructor
Q: Can we use the final array in ja va?
Answer: You can declare Java Final Array without any problem. The final array of elements can change. Where Arrays are objects and object variables (elements of the array) are always references in Java.
Let’s see one simple example.
public class HelloTest { public static void main(String[] args) { final int arr[] = {1, 2, 3, 4, 5}; // Note: arr is final arr[2] = 4; //change the value of index 2 } }
Q: What is a blank or uninitialized final variable?
Answer: Which Final variables are not initialized at the time of declaration is called a blank final variable. It can be initialized only in the constructor.
Example of blank final variable:-
class Employee{ int id; String name; final String PAN_CARD_NUMBER; ... }
Let’s initialize the blank final variable.
class TestBank { final int intrestRate;//blank final variable TestBank(){ intrestRate=7; System.out.println(intrestRate); } public static void main(String args[]) { new TestBank(); } }
Q: What is a static blank final variable?
Answer: A static final blank variable is not initialized at the time of declaration. It can be initialized only in static blocks.
Example of static blank final variable:-
class TestBank { static final int accounts;//static blank final variable static { accounts = 10250; } public static void main(String args[]) { System.out.println(TestBank.accounts); } }
Tricky Question: Does the final method inherited?
Answer: Yes, you can inherit the final method but can’t override it. See below example:-
class ObjectShapes { void draw() { System.out.println("Method "); } } class Shape extends ObjectShapes { public static void main(String args[]) { new ObjectShapes().draw(); } }
Conclusion
You learned about the final keyword means for classes, methods, and variables in Java. You may not use the final keyword often in Java programming, it can be a good design solution.
Do comment if you have any doubts and suggestions on this tutorial.
Note: This example (Project) is developed in IntelliJ IDEA 2018.2.6 (Community Edition)
JRE: 11.0.1
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.14.1
Java version 11
All Java Final keyword examples are in Java 11, so it may change on different from Java 9 or 10 or upgraded versions.