Difference between final, finally and finalize
1-Final
"Final is a keyword used for declaring classes, methods, and variables. Important points about the final keyword."
1-If classes declared as final it can't be extends or inherits.
2-If methods declared as final it can't be overridden.
3-If variables declared as final it's value can't be changed.
The below demo program shows the above-discussed points clearly.
CASE I: If the class declared as final
public class FinalClassDemo extends FinalClassText {
public static void main(String[] args) {
FinalClassText.print();
}}
final class FinalClassText {public static void print (){
System.out.println("This is final class statement");
}}
O/P:
D:>javac FinalClassDemo.java
FinalClassDemo.java:1: error: cannot inherit from final FinalClassText
public class FinalClassDemo extends FinalClassText {
^
1 error
CASE II- If method declared as final
public class FinalMethodDemo{public static void main(String[] args) {
}
public final void print(){System.out.println(?This is final method statement?);
}
}class FinalMethodText extends FinalMethodDemo{
public final void print(){System.out.println("This is final method statement");
}
}
O/P:
D:>javac FinalMethodDemo.java
FinalMethodDemo.java:16: error: print() in FinalMethodText cannot override print
() in FinalMethodDemo
public final void print(){
^
overridden method is final
1 error
CASE III- If the variable declared as final
package com.navneet.javatutorial;
public class FinalVariableDemo{
public static void main(String[] args) {
final int a=7;
a=6;
System.out.println(a);}
}
O/P
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The final local variable cannot be assigned. It must be blank and not using a compound assignment at com.navneet.javatutorial.FinalVariableDemo.main(FinalVariableDemo.java:7)
2-Finally
"Finally is a block used for resource clean up activity in Exception handling. This block is always executed if exceptions are raised inside try block or not."
try{
// try block
}
catch(Exception e){
// catch block
}
finally{
// finally block
}
3-Finalize
"Finalize is a method called by JVM for unused (unreachable) object resources clean up. This method is called before the garbage collector. This method is defined in Object class." and syntax of the Finalize method is
protected void finalize(){
}
Demo Program:
package com.navneet.javatutorial;
public class FinalizeMethodDemo {
protected void finalize() {
System.out.println("This method is executed before garbage collector method");
}public static void main(String[] args) {
FinalizeMethodDemo fm1=new FinalizeMethodDemo();
fm1.print();
fm1=null;
System.gc();
}
void print(){
System.out.println("This is print method");
}}