Let us see some significant details about final modifier in Java:
1) In Java, the final is considered as the modifier which can be offered to a method, variable or a class.
2) With a class, when a final modifier is used then the class cannot be extended further. You can protect your class with this method and it will not be subclassed and provides the final due along for security reasons.
3) At the time of usage of a final keyword with a method, it is not possible to override in Java which implies that you cannot override the method in the subclass. The actual logic of the method is protected with this method. It is a stake to make a choice between just one method as final and whole class as final. The power of inheritance is taken out by making a class and it sometimes is apt for making the sensitive method rather than the entire class.
4) At the time of using final keywords along with a variable, there is no possibility to change it after it is assigned. Although it is very difficult to understand when you make a reference variable implying towards a collection or an array.
This actually implies that a final reference variable cannot be referred to another object but it is possible to change the internal state of the object that is you can include or remove elements. This actually implies a final reference variable is not possible for pointing another object but it is possible to change the internal state of the object.
5) At the time of using static keyword along with the final modifier then the variable turns to become a compile-time constant. The static final variable is the value it implies and is copied completely as such a variable can be shared among various JARS by updating its value in one JAR and it will not be enough.
Read More : An overview of Java Access Modifiers
6) A blank final variable is also considered as a non-static final variable and it is not initialized in the same line and it has to be declared. A blank final variable is supposed to be permitted by Java by initializing all the constructor. If a blank final variable is not initialized promptly all the constructors will throw an error.
7) Apart from lambda expression, there are a couple of other changes done along with streams. A new concept is introduced by Java 8 known as an effective final variable which permits a non-final variable for accessing the internal class or lambda expression.
A non-final local variable cannot be accessed by you before an anonymous class or inner but from Java 8 onwards you can offer its effective final that is the value cannot be modified after assignment.
8) After making a class final all the methods become a final class effectively and it cannot be extended without inheritance and there is no possibility to override them. In the inside of the class, there is a discussion going on about overriding final methods and that is not true as the inner class cannot extend a final class.
9) Finally, both the member variables and local variables can use the final modifier specified inside a local code block or a method.