Difference between Static and final?

后端 未结 11 1042
天涯浪人
天涯浪人 2020-11-27 08:51

I\'m always confused between static and final keywords in java.

How are they different ?

相关标签:
11条回答
  • 2020-11-27 09:24

    The static keyword can be used in 4 scenarios

    • static variables
    • static methods
    • static blocks of code
    • static nested class

    Let's look at static variables and static methods first.

    Static variable

    • It is a variable which belongs to the class and not to object (instance).
    • Static variables are initialized only once, at the start of the execution. These variables will be initialized first, before the initialization of any instance variables.
    • A single copy to be shared by all instances of the class.
    • A static variable can be accessed directly by the class name and doesn’t need any object.
    • Syntax: Class.variable

    Static method

    • It is a method which belongs to the class and not to the object (instance).
    • A static method can access only static data. It can not access non-static data (instance variables) unless it has/creates an instance of the class.
    • A static method can call only other static methods and can not call a non-static method from it unless it has/creates an instance of the class.
    • A static method can be accessed directly by the class name and doesn’t need any object.
    • Syntax: Class.methodName()
    • A static method cannot refer to this or super keywords in anyway.

    Static class

    Java also has "static nested classes". A static nested class is just one which doesn't implicitly have a reference to an instance of the outer class.

    Static nested classes can have instance methods and static methods.

    There's no such thing as a top-level static class in Java.

    Side note:

    main method is static since it must be be accessible for an application to run before any instantiation takes place.

    final keyword is used in several different contexts to define an entity which cannot later be changed.

    • A final class cannot be subclassed. This is done for reasons of security and efficiency. Accordingly, many of the Java standard library classes are final, for example java.lang.System and java.lang.String. All methods in a final class are implicitly final.

    • A final method can't be overridden by subclasses. This is used to prevent unexpected behavior from a subclass altering a method that may be crucial to the function or consistency of the class.

    • A final variable can only be initialized once, either via an initializer or an assignment statement. It does not need to be initialized at the point of declaration: this is called a blank final variable. A blank final instance variable of a class must be definitely assigned at the end of every constructor of the class in which it is declared; similarly, a blank final static variable must be definitely assigned in a static initializer of the class in which it is declared; otherwise, a compile-time error occurs in both cases.

    Note: If the variable is a reference, this means that the variable cannot be re-bound to reference another object. But the object that it references is still mutable, if it was originally mutable.

    When an anonymous inner class is defined within the body of a method, all variables declared final in the scope of that method are accessible from within the inner class. Once it has been assigned, the value of the final variable cannot change.

    0 讨论(0)
  • 2020-11-27 09:26

    final -

    1)When we apply "final" keyword to a variable,the value of that variable remains constant. (or) Once we declare a variable as final.the value of that variable cannot be changed.

    2)It is useful when a variable value does not change during the life time of a program

    static -

    1)when we apply "static" keyword to a variable ,it means it belongs to class.
    2)When we apply "static" keyword to a method,it means the method can be accessed without creating any instance of the class

    0 讨论(0)
  • 2020-11-27 09:29

    Static and final have some big differences:

    Static variables or classes will always be available from (pretty much) anywhere. Final is just a keyword that means a variable cannot be changed. So if had:

    public class Test{    
       public final int first = 10;
       public static int second = 20;
    
       public Test(){
         second = second + 1
         first = first + 1;
       }
    }
    

    The program would run until it tried to change the "first" integer, which would cause an error. Outside of this class, you would only have access to the "first" variable if you had instantiated the class. This is in contrast to "second", which is available all the time.

    0 讨论(0)
  • 2020-11-27 09:29

    Static is something that any object in a class can call, that inherently belongs to an object type.

    A variable can be final for an entire class, and that simply means it cannot be changed anymore. It can only be set once, and trying to set it again will result in an error being thrown. It is useful for a number of reasons, perhaps you want to declare a constant, that can't be changed.

    Some example code:

    class someClass
    {
       public static int count=0;
       public final String mName;
    
       someClass(String name)
       {
         mname=name;
         count=count+1;
       }
    
      public static void main(String args[])
      {
        someClass obj1=new someClass("obj1");
        System.out.println("count="+count+" name="+obj1.mName);
        someClass obj2=new someClass("obj2");
        System.out.println("count="+count+" name="+obj2.mName);
      }
    }
    

    Wikipedia contains the complete list of java keywords.

    0 讨论(0)
  • 2020-11-27 09:34

    Think of an object like a Speaker. If Speaker is a class, It will have different variables such as volume, treble, bass, color etc. You define all these fields while defining the Speaker class. For example, you declared the color field with a static modifier, that means you're telling the compiler that there is exactly one copy of this variable in existence, regardless of how many times the class has been instantiated.

    Declaring

    static final String color = "Black"; 
    

    will make sure that whenever this class is instantiated, the value of color field will be "Black" unless it is not changed.

    public class Speaker {
    
    static String color = "Black";
    
    }
    
    public class Sample {
    
    public static void main(String args[]) {
        System.out.println(Speaker.color); //will provide output as "Black"
                Speaker.color = "white";
        System.out.println(Speaker.color);  //will provide output as "White"
    }}
    

    Note : Now once you change the color of the speaker as final this code wont execute, because final keyword makes sure that the value of the field never changes.

    public class Speaker {
    
    static final String color = "Black";
    
    }
    
    public class Sample {
    
    public static void main(String args[]) {
        System.out.println(Speaker.color); //should provide output as "Black"
                Speaker.color = "white"; //Error because the value of color is fixed.  
        System.out.println(Speaker.color); //Code won't execute.
    }}
    

    You may copy/paste this code directly into your emulator and try.

    0 讨论(0)
  • 2020-11-27 09:34

    Easy Difference,

    Final : means that the Value of the variable is Final and it will not change anywhere. If you say that final x = 5 it means x can not be changed its value is final for everyone.

    Static : means that it has only one object. lets suppose you have x = 5, in memory there is x = 5 and its present inside a class. if you create an object or instance of the class which means there a specific box that represents that class and its variables and methods. and if you create an other object or instance of that class it means there are two boxes of that same class which has different x inside them in the memory. and if you call both x in different positions and change their value then their value will be different. box 1 has x which has x =5 and box 2 has x = 6. but if you make the x static it means it can not be created again. you can create object of class but that object will not have different x in them. if x is static then box 1 and box 2 both will have the same x which has the value of 5. Yes i can change the value of static any where as its not final. so if i say box 1 has x and i change its value to x =5 and after that i make another box which is box2 and i change the value of box2 x to x=6. then as X is static both boxes has the same x. and both boxes will give the value of box as 6 because box2 overwrites the value of 5 to 6.

    Both final and static are totally different. Final which is final can not be changed. static which will remain as one but can be changed.

    "This is an example. remember static variable are always called by their class name. because they are only one for all of the objects of that class. so Class A has x =5, i can call and change it by A.x=6; "

    0 讨论(0)
提交回复
热议问题