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: