Java provides a set of non access modifiers to produce some other functionality.
- static
- final
- abstract
- synchronized
- native
- transient
- volatile
- strictfp
Static
Static variables
- We have learned about this thing as class variables in Java variables post in this blog.
- You can get the idea about static variables after referring that post.
Static methods
- These methods are defined using 'static' keyword.
- Class variables and also class methods ( static methods ) can be accessed using class name.
- Static methods can directly access to other static members in the class.
- But non static members can't access to static methods.
Try this program
public class StaticDemo{
int x;
static int y=10;
public static void main(String args[]){
Apple.test(); // Static methods are called using class name
}
public static void test(){
System.out.println(y);//Static variables can be used directly in static method
//System.out.println(x); you can't access x in a static method
}
}
You can remove comment on last line and compile it.
Then you can see a error message as follow .
Static initialization block
- This is a simple block With static keyword and { }.
- Only static members can accessed to this block.
- When you run the program, static initialization blocks are called to the order to their positions in the program
Try this program to understand static block.
public class StaticDemo{
static{
System.out.println("Static block 1");
}
public static void main(String args[]){
System.out.println("Main method");
}
static{
System.out.println("Static block 2");
}
static{
System.out.println("Static block 3");
}
}
- You can get the idea about this keyword thinking on its real meaning.
- This can be used to classes, methods, objects and variables.
- If you used this once the value can't be changed again.
Final variables
- We have discussed three types of variables ( instance, static,local ) in this series.
- This ' Final ' keyword can be used all of these types.
- These are like constants.
Try this program.
public class FinalDemo{
public static void main(String args[]){
final int MAX_DIS = 5;
System.out.println(MAX_DIS);
//MAX_DIS = 10;
//System.out.println(MAX_DIS);
}
}
Now you can see the output is 5.
- You can see I commented some lines.
- If you can remove these comments and compile it again.
- Then it will give a error message as follow.
- Final methods cannot be overridden in other sub classes.
- It means the behavior of that method cannot be changed.
public class Fruit{
public static void main(String args[]){
Fruit obj1 = new Fruit();
Banana obj2 = new Banana();
obj1.eat();
obj2.drink();
}
final void eat (){
System.out.println("Fruit-->eat");
}
}
class Banana extends Fruit{
void drink(){
System.out.println("Banana-->drink");
}
//void eat(){ }
}
- Now I think you can understand what this program does.
- In my super class ( Apple ) I have defined two methods ( main, eat ).
- The eat( ) method is final method.
- Then I have created another sub class Banana which extends keyword. It means that Banana class is inherited by Apple class ( Apple - parent, Banana - child ). This is oop concept, so it will discussed later on the series.
- When you compile and run this program it is ok and it gives the output.
- Now you can remove comments in the program and compile it. Then you will be able to see the error message as follow.
- Final classes cannot be extended.
- It is a final segment of class hierarchy of the program.
Try this program...
public class Apple{
public static void main(String args[]){
Apple obj1 = new Apple();
Banana obj2 = new Banana();
obj1.eat();
obj2.drink();
}
final void eat (){
System.out.println("Apple-->eat");
}
}
final class Banana{
void drink(){
System.out.println("Banana-->drink");
}
}
/* class Pear extends Banana{
* void steam() { }
* }
*/
- This is same as above example.
- If you remove comment on this program and compile it, you will be able to see a error message.
Abstract
- Abstract keyword can be applied to classes and instance methods only.
- This means things incomplete or to be complete later.
- Abstract is like opposite of 'final' keyword.
Abstract classes
- The class can be declared as abstract class using ' abstract ' keyword.
- But even if you not declared class as abstract, the can become abstract if there is at least one abstract method.
- Abstract class can have non abstract methods also.
- An abstract class can never be instantiated. It can't be created objects using abstract class.
abstract class Apple{
public abstract void mix(); //abstract class
public void blend () { }; //non abstract class
}
Abstract methods
- Abstract methods doesn't have a method body. It has only specification.The method body is provided by sub class.
- These methods can never be final and it can't be used private access modifier.
- The method declaration of this methods are different from other methods.
Ex:- public abstract void eat();
Try this.
abstract class Apple{
public abstract void eat();
public void cook(){ } ;
}
class Mango extends Apple{
public void eat(){
System.out.println("Mango-->eat()");
}
}
public class Fruit{
public static void main(String args[ ]){
Mango obj1 = new Mango();
Apple obj2 = new Mango();
//Apple obj3 = new Apple();
obj1.eat();
obj2.eat();
}
}
See more about abstraction.
Synchronized
- This can only be used to methods or you can use is as a block.
- If you use this keyword in a method, that indicate the method can be accessed by only one thread at a time.
- You can use any of access modifiers to set access level.
Ex:- public synchronized void DisplayDate( ) { }
You may look at this post which is about Synchronization.
Native
- This can only be used for methods.
- Native methods are used to access some other platforms by loading native libraries.
- Native methods do not have method body.
Ex:- native void DoSomething( );
Transient
- This can be used to variables.
- The types of variables are used to signify the JVM to skip this variable in serialization process.
- In serialization process, it can be stored the state of object.
- Serialization transform object into output type.
public transient int avg = 10; //transient value public int spd; //persist value
Volatile
- This can be applied to interfaces, classes and methods.
- Strictfp ensures that you get exactly the same results from your floating point calculations on every platform.
- But most programmers never need to use strictfp modifier, because it affects only a very small class of problems in programming.
- A strictfp method ensures that all code in the method is executed strictly.
Non access modifiers
Reviewed by Ravi Yasas
on
5:22 AM
Rating:
Reviewed by Ravi Yasas
on
5:22 AM
Rating:







No comments: