Final Keyword |
---|
The final keyword in java is used to restrict the user. The java final keyword can be use with :
- Variable
- Method
- Class
Final variable ( Stop value change ) :
If you make any variable as final, you cannot change the value of final variable(It will be constant).
Example of final variable
There is a final variable speedlimit, we are going to change the value of this variable, but It can't be changed because final variable once assigned a value can never be changed.
class Bike
{
final int speedlimit=90; //final variable
void run()
{
speedlimit=400;
}
public static void main(String args[])
{
Bike obj=new Bike();
obj.run();
}
}
{
final int speedlimit=90; //final variable
void run()
{
speedlimit=400;
}
public static void main(String args[])
{
Bike obj=new Bike();
obj.run();
}
}
Output: Compile time error
mukesh@ubuntu:~/Desktop/javaPrograms$ javac Test.java
Test.java:6: error: cannot assign a value to final variable speedlimit
speedlimit=400;
^
1 error
Final method ( Stop method overriding ):
Example of final method
class Bike
{
final void run()
{
System.out.println("Bike running");
}
}
class Hero extends Bike
{
void run()
{
System.out.println("Bike running safely with 100kmph");
}
public static void main(String args[])
{
Hero obj= new Hero();
obj.run();
}
}
{
final void run()
{
System.out.println("Bike running");
}
}
class Hero extends Bike
{
void run()
{
System.out.println("Bike running safely with 100kmph");
}
public static void main(String args[])
{
Hero obj= new Hero();
obj.run();
}
}
Output: Compile time error
mukesh@ubuntu:~/Desktop/javaPrograms$ javac Test.java
Test.java:10: error: run() in Hero cannot override run() in Bike
void run()
^
overridden method is final
1 error
Final class ( Stop inheritance ) :
If you make any class as final, you cannot extend it.
Example of final class
final class Bike
{
}
class Hero extends Bike
{
void run()
{
System.out.println("running safely with 100kmph");
}
public static void main(String args[])
{
Hero obj= new Hero();
obj.run();
}
}
{
}
class Hero extends Bike
{
void run()
{
System.out.println("running safely with 100kmph");
}
public static void main(String args[])
{
Hero obj= new Hero();
obj.run();
}
}
Output: Compile time error
mukesh@ubuntu:~/Desktop/javaPrograms$ javac Test.java
Test.java:5: error: cannot inherit from final Bike
class Hero extends Bike
^
1 error
Point to be remember regarding Final.
- Final is almost opposite to the polymorphism.
- Final value can't be re-assigned.
- A final keyword can we used with 1)Variable 2)method & 3)class
- final method can be inherited but cannot overridden.
- A final variable that is not initialized at the time of declaration is known as blank final variable.
- We can not declare a cunstructor final, because constructor is never inherited.
Programs for Practice on Final Keyword |
---|
Program # 1
class A
{
public static void main(String[] args)
{
int i=0;
final int j=1;
System.out.println(i);
System.out.println(j);
i=10;
//j=1;
System.out.println(i);
System.out.println(j);
}
}
{
public static void main(String[] args)
{
int i=0;
final int j=1;
System.out.println(i);
System.out.println(j);
i=10;
//j=1;
System.out.println(i);
System.out.println(j);
}
}
Output:
i value can be modify anytime but j cant cause of final
0
1
10
1
Program # 2
class B
{
public static void main(String[] args)
{
final int i=10;
i++;
System.out.println(i);
}
}
{
public static void main(String[] args)
{
final int i=10;
i++;
System.out.println(i);
}
}
Output:
compilation error:
B.java:6: cannot assign a value to final variable i
i++;
^
1 error
Program # 3
Note :Here array x is final ,we are modifying x[0],x[1] ie index value ,not array x hence no error.
class C
{
public static void main(String[] args)
{
final int[]x=new int[2];
x[0]=10;
x[1]=20;
System.out.println(x[0]);
System.out.println(x[1]);
}
}
class C
{
public static void main(String[] args)
{
final int[]x=new int[2];
x[0]=10;
x[1]=20;
System.out.println(x[0]);
System.out.println(x[1]);
}
}
Output:
10
20
Program # 4
Note : Here reassigning a final array hence error
class D
{
public static void main(String[] args)
{
final int[]x=new int[3];
x=new int[3];
System.out.println("done");
}
}
class D
{
public static void main(String[] args)
{
final int[]x=new int[3];
x=new int[3];
System.out.println("done");
}
}
Output:
D.java:7: cannot assign a value to final variable x
x=new int[3];
Program # 5
Note : In this program we are modifying the i value not e1,Hence it is valid
class E
{
int i;
public static void main(String[] args)
{
final E e1=new E();
e1.i=20;
System.out.println("done");
}
}
{
int i;
public static void main(String[] args)
{
final E e1=new E();
e1.i=20;
System.out.println("done");
}
}
Output:
done
Program # 6
Note : In this program reference variable f1 can not re-initialize because of final.
class F
{
int i;
public static void main(String[] args)
{
final F f1=new F();
//f1=new F(); --here trying to re-initialize a final ref var
//f1=null; --here trying to re-initialize a final ref var
System.out.println("done");
}
}
{
int i;
public static void main(String[] args)
{
final F f1=new F();
//f1=new F(); --here trying to re-initialize a final ref var
//f1=null; --here trying to re-initialize a final ref var
System.out.println("done");
}
}
Output:
done
Program # 7
Note : A global final variable sud be initilize.
class F
{
final int i=0;
public static void main(String[] args)
{
F f1=new F();
//f1.i=20; --cannot re-initilize final variable
//System.out.println(f1.i);
}
}
{
final int i=0;
public static void main(String[] args)
{
F f1=new F();
//f1.i=20; --cannot re-initilize final variable
//System.out.println(f1.i);
}
}
Output:
Program # 8
Note : final argument in main method can not be re-assigned
class G
{
public static void main(final String[] args)
{
System.out.println("Hello world");
args=null;
}
}
{
public static void main(final String[] args)
{
System.out.println("Hello world");
args=null;
}
}
Output:
compiler error
Program # 9
class H
{
final int i=10;
}
class Manager
{
public static void main(final String[] args)
{
H obj=new H();
System.out.println(obj.i);
obj.i=10;//error :can't re-assign a final value.
System.out.println(obj.i);
}
}
{
final int i=10;
}
class Manager
{
public static void main(final String[] args)
{
H obj=new H();
System.out.println(obj.i);
obj.i=10;//error :can't re-assign a final value.
System.out.println(obj.i);
}
}
Output:
error :can't assign a final value.
Program # 10
Note : Eventhough not calling test() ,final x can't be reassigned in test().
class I
{
final int x=10;
void test()
{
x=11;
}
}
Output: {
final int x=10;
void test()
{
x=11;
}
}
I.java:7: cannot assign a value to final variable x
x=10;
Program # 11
Note:
1.Global final variable must be initilized at any cost.
By the time of object creation global final variable can't survive with its default value
2.Not only at the place of declaration ,it can be initilize in constructor or in the IIB.
class J
{
final int i;
}
class Manager1
{
public static void main(String[] args)
{
J obj=new J();
System.out.println(obj.i);
}
}
{
final int i;
}
class Manager1
{
public static void main(String[] args)
{
J obj=new J();
System.out.println(obj.i);
}
}
Output:
J.java:2: variable i might not have been initialized
class J
Program # 12
class J
{
final int i;
}
{
final int i;
}
Output:
J.java:2: variable i might not have been initialized
class J
Program # 13
Note : A global final variable can be initialize inside constructor.
class L
{
final int i;
L()
{
i=10;
}
}
{
final int i;
L()
{
i=10;
}
}
Output:
compile successfull
Program # 14
class M
{
final int i=10;
M()
{
i=10;
}
}
{
final int i=10;
M()
{
i=10;
}
}
Output:
J.java:7: cannot assign a value to final variable i
i=10;
Program # 15
Note : If multiple constructor final value should be initilizing in each constructor.
class N
{
final int i;
N()
{
i=10;
}
N(int j)
{
i=10;
}
N(int k,double l)
{
i=10;
}
}
{
final int i;
N()
{
i=10;
}
N(int j)
{
i=10;
}
N(int k,double l)
{
i=10;
}
}
Output:
successful compile
Program # 16
Note : Non-static final global works on object wise.create object N() nad N(int i) and analyse.
class N
{
final int i;
N()
{
i=5;
}
N(int i)
{
this.i=i;
}
N(int i,double d)
{
this.i=i;
}
}
public class Demo
{
public static void main(String[] args)
{
N obj1=new N();
N obj2=new N(10);
N obj3=new N(15,800);
System.out.println(obj1.i);
System.out.println(obj2.i);
System.out.println(obj3.i);
}
}
Output:
5
10
15
Program # 17
Note : In every constructor final variable should be initialize , this() is used to initialize the final in the second constructor. if removing this() then it will give compiler error
class Q
{
final int i;
Q()
{
i=10;
}
Q(String s1)
{
this();
}
}
{
final int i;
Q()
{
i=10;
}
Q(String s1)
{
this();
}
}
Output:
compile success
Program # 18
Note :IIB executing on object creation,hence through IIB we can initilize the final global variable
class R
{
final int i;
{
i=0;
}
}
Output:
compile sucess
Program # 19
Note : While crating obj first IIB will execute and i will get initilized,then constructor will execute and try to re-initilize the final value hence error
class S
{
final int i;
S()
{
i=0;
}
{
i=0;
}
}
Output:
J.java:7: variable i might already have been assigned
i=0;
Program # 20
Note : we can keep multiple IIB in a class.
class S
{
final int i;
{
i=0;
}
{
i=0;
}
}
{
final int i;
{
i=0;
}
{
i=0;
}
}
Output:
J.java:7: variable i might already have been assigned
i=0;
Program # 21
Note :
Arguments of constructors and Method can be declare as a final,if argument declare as final then that should not be re-initilized.
Argument is also a local variable,if lacal variable is final then that should not be re-initilized.
while creating object we have to supply value to i,j.
j is final here so j should not re-initilized here
class U
{
U(int i,final int j)
{
i=20;
j=20;
}
}
{
U(int i,final int j)
{
i=20;
j=20;
}
}
Output:
J.java:7: final parameter j may not be assigned
j=20;
Program # 22
Note :
Static final global variable : means it acts as a perfect constant,static means only single copy on one execution Hence it can't be re-initilized
class V
{
static final int i=10;
public static void main(final String[] args)
{
System.out.println(i);
i=20;
System.out.println(i);
}
}
{
static final int i=10;
public static void main(final String[] args)
{
System.out.println(i);
i=20;
System.out.println(i);
}
}
Output:
J.java:7: final parameter j may not be assigned
j=20;
Program # 23
Note: global final variable can't survive with its default value,no matter it static or non-static.
class W
{
final static int i;
}
{
final static int i;
}
Output:
J.java:2: variable i might not have been initialized
Program # 24
Note :gloabal final variable can be initilize in static block.
class W
{
static final int i;
static
{
i=0;
}
}
{
static final int i;
static
{
i=0;
}
}
Output:
compile success
Program # 25
class W
{
static final int i=0;
static
{
i=0;
}
}
{
static final int i=0;
static
{
i=0;
}
}
Output:
J.java:7: cannot assign a value to final variable i
i=0;
Program # 26
class Z
{
static final int i;
static
{
i=0;
}
static
{
i=0;
}
}
{
static final int i;
static
{
i=0;
}
static
{
i=0;
}
}
Output:
J.java:11: variable i might already have been assigned
i=0;
Program # 27
Note :final keyword can be use with method also, so a final method can not be override in the subclass.
class C
{
void test1()
{
}
final void test2()
{
}
}
class D extends C
{
void test1()
{
}
void test2()
{
}
}
{
void test1()
{
}
final void test2()
{
}
}
class D extends C
{
void test1()
{
}
void test2()
{
}
}
Output:
K.java:16: test2() in D cannot override test2() in C; overridden method is final
void test2(
Program # 28
Note : class can be also declare final. final class can not have a sub class
final class F
{
//some member
}
class G extends F
{
}
Output:
Program # 29
Note: Abstract method means that method should be get implement in sub-class,so we can not use a final keyword with an abstract method.
abstract class E
{
final abstract void test();
}
{
final abstract void test();
}
Output:
J.java:4: illegal combination of modifiers: abstract and final
final abstract void test();
Program # 30
abstract final class E
{
//
}
{
//
}
Output:
J.java:2: illegal combination of modifiers: abstract and final
abstract final class E
Program # 31
Note : Compile success but can't create an object of abstract class
abstract class I
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
Output:
Hello World!
Program # 32
Note:
static method is not inheriting in sub-class ,hence the combination of :
[static & abstract] and [final & abstract] are not possible for method
abstract class J
{
static abstract void test1();
}
{
static abstract void test1();
}
Output:
K.java:4: illegal combination of modifiers: abstract and static
Program # 33
Note:
Every interface attributes are public static and final so in interface all attributes must be initilized at place of declaration.
we can't put SIB in interface
interface A
{
int i;
}
Note:
Every interface attributes are public static and final so in interface all attributes must be initilized at place of declaration.
we can't put SIB in interface
interface A
{
int i;
}
Output:
A.java:3: = expected
int i;
^
1 error*/
Program # 34
interface B
{
String s1=null;
int j=0;
}
{
String s1=null;
int j=0;
}
Output:
compile success
Program # 35
Note: a1.j--> compiler will modify reference variable to class name.
class A
{
int i;
static int j;
public static void main(final String[] args)
{
System.out.println(j);
System.out.println(A.j);
A a1=new A();
System.out.println(a1.i);
System.out.println(a1.j);
}
}
{
int i;
static int j;
public static void main(final String[] args)
{
System.out.println(j);
System.out.println(A.j);
A a1=new A();
System.out.println(a1.i);
System.out.println(a1.j);
}
}
Output:
0
0
0
0
Program # 36
1.In every non-static definition block there is a default reference variable that is 'this'.
2.'this' is available in all non-static definition block,constructor,IIB and non-static methods
3.In main method this is not available ,so here we have to use reference variable to access.
4.Non-static member should be access with refernce variable.compiler will incorporate this inside the non-static block to access non-static member
class B
{
int i;
void test1()
{
System.out.println("test1:"+i);
System.out.println("test1 by using this keyword:"+this.i);
i=10;
test2();
}
void test2()
{
System.out.println("test2:"+i);
System.out.println("test1 by using this keyword:"+this.i);
i=20;
test3();
}
void test3()
{
System.out.println("test3:"+i);
System.out.println("test1 by using this keyword:"+this.i);
i=30;
}
public static void main(final String[] args)
{
B b1=new B();
System.out.println("main1:"+b1.i);
b1.i=5;
b1.test1();
System.out.println("main2:"+b1.i);
}
}
{
int i;
void test1()
{
System.out.println("test1:"+i);
System.out.println("test1 by using this keyword:"+this.i);
i=10;
test2();
}
void test2()
{
System.out.println("test2:"+i);
System.out.println("test1 by using this keyword:"+this.i);
i=20;
test3();
}
void test3()
{
System.out.println("test3:"+i);
System.out.println("test1 by using this keyword:"+this.i);
i=30;
}
public static void main(final String[] args)
{
B b1=new B();
System.out.println("main1:"+b1.i);
b1.i=5;
b1.test1();
System.out.println("main2:"+b1.i);
}
}
Output:
main1:0
test1:5
test1 by using this keyword:5
test2:10
test1 by using this keyword:10
test3:20
test1 by using this keyword:20
main2:30
Program # 37
class G
{
int i;
G obj;
public static void main(final String[] args)
{
G g1=new G();
System.out.println(g1.i);
System.out.println(g1.obj);
g1.obj=new G();
g1.obj.i=10;
g1.i=20;
System.out.println(g1.i);
System.out.println(g1.obj.i);
}
}
{
int i;
G obj;
public static void main(final String[] args)
{
G g1=new G();
System.out.println(g1.i);
System.out.println(g1.obj);
g1.obj=new G();
g1.obj.i=10;
g1.i=20;
System.out.println(g1.i);
System.out.println(g1.obj.i);
}
}
Output:
0
null
20
10
Program # 38
class C
{
int i;
}
class D
{
C c1;
public static void main(final String[] args)
{
D d1=new D();
System.out.println(d1.c1);
}
}
class E
{
C c1=new C();
public static void main(final String[] args)
{
E e1=new E();
System.out.println(e1.c1);
System.out.println(e1.c1.i);
}
}
class F
{
C c1=null;
public static void main(final String[] args)
{
F f1=new F();
f1.c1=new C();
System.out.println(f1.c1);
System.out.println(f1.c1.i);
}
}
{
int i;
}
class D
{
C c1;
public static void main(final String[] args)
{
D d1=new D();
System.out.println(d1.c1);
}
}
class E
{
C c1=new C();
public static void main(final String[] args)
{
E e1=new E();
System.out.println(e1.c1);
System.out.println(e1.c1.i);
}
}
class F
{
C c1=null;
public static void main(final String[] args)
{
F f1=new F();
f1.c1=new C();
System.out.println(f1.c1);
System.out.println(f1.c1.i);
}
}
Output:
D:
null
--------------
E:
C@3e25a5
0
--------------
F:
C@3e25a5
0
Program # 39
class P
{
int i=1;
}
class Q extends P
{
int i=2;
}
class R extends Q
{
int i=3;
}
class Manager1
{
public static void main(final String[] args)
{
P p1=new P();
System.out.println(p1.i);
P p2=new Q();
System.out.println(p2.i);
Q q1=new Q();
System.out.println(q1.i);
R r1=new R();
System.out.println(r1.i);
P p3=r1;
System.out.println(p3.i);
System.out.println(((Q)p3).i);
}
}
{
int i=1;
}
class Q extends P
{
int i=2;
}
class R extends Q
{
int i=3;
}
class Manager1
{
public static void main(final String[] args)
{
P p1=new P();
System.out.println(p1.i);
P p2=new Q();
System.out.println(p2.i);
Q q1=new Q();
System.out.println(q1.i);
R r1=new R();
System.out.println(r1.i);
P p3=r1;
System.out.println(p3.i);
System.out.println(((Q)p3).i);
}
}
Output:
1
1
2
3
1
2
Program # 40
class A
{
void test1()
{
System.out.println("test1:"+this);
test2();//this.test2();
}
void test2()
{
System.out.println("test2:"+this);
test3();//this.test3();
}
void test3()
{
System.out.println("test3:"+this);
}
public static void main(final String[] args)
{
A a1=new A();
System.out.println("Main:"+a1);
a1.test1();
}
}
{
void test1()
{
System.out.println("test1:"+this);
test2();//this.test2();
}
void test2()
{
System.out.println("test2:"+this);
test3();//this.test3();
}
void test3()
{
System.out.println("test3:"+this);
}
public static void main(final String[] args)
{
A a1=new A();
System.out.println("Main:"+a1);
a1.test1();
}
}
Output:
Main:A@1a46e30
test1:A@1a46e30
test2:A@1a46e30
test3:A@1a46e30
No comments:
Post a Comment