Constant is the concept, the property of the variable.

final is the java keyword to declare a constant variable.


As other people pointed out, from a semantic/linguistic point of view the expression constant variable is an oxymoron and, as such, we could argue about its correctness.

Quoting the specification, anyway, we can read

A variable of primitive type [...], that is final and initialized with a compile-time constant expression (§15.28), is called a constant variable.

I suppose, hence, that we can accept (and consider correct) this binomial for our purpose.

Answer from Luigi Cortese on Stack Overflow
🌐
TutorialsPoint
tutorialspoint.com › difference-between-constants-and-final-variables-in-java
Difference between constants and final variables in Java?
The main difference between a final ... create a final variable without the static keyword. Though its value is un-modifiable, a separate copy of the variable is created each time you create a new object. Where a constant is un-modifiable and has only one copy throughout the program.
🌐
Shiksha
shiksha.com › home › it & software › it & software articles › programming articles › difference between final and static in java
Difference Between Final and Static in Java
March 28, 2024 - This combination is used to define constants that are common to all instances of a class. For example, public static final int MAX_SIZE = 100; declares a constant MAX_SIZE that is shared across all instances of the class and cannot be changed.
People also ask

What are the best practices for using final and static in Java?
Best practices for using final: Use final for variables that should not change after initialization. Apply final to methods that should not be overridden to maintain the intended behavior across subclasses. Use final on classes that are not meant to be extended, often for reasons of security, simplicity, or design. Best practices for using static: Use static variables for class-level constants or fields shared by all instances. Apply static to methods that do not require access to instance-specific data. Utilize static blocks for initializing static variables or executing static initialization
🌐
shiksha.com
shiksha.com › home › it & software › it & software articles › programming articles › difference between final and static in java
Difference Between Final and Static in Java
Can a final variable be static in Java?
Yes, a variable can be both final and static in Java. This combination is used to define constants that are common to all instances of a class. For example, public static final int MAX_SIZE = 100; declares a constant MAX_SIZE that is shared across all instances of the class and cannot be changed.
🌐
shiksha.com
shiksha.com › home › it & software › it & software articles › programming articles › difference between final and static in java
Difference Between Final and Static in Java
How do final and static affect inheritance in Java?
Final and static keywords affect inheritance differently. A final class cannot be extended, meaning no subclass can inherit from a final class. A final method cannot be overridden by subclasses, which means the functionality defined by the final method is the same for all subclasses. On the other hand, static members (methods or variables) are not inherited in the same way instance members are; instead, they belong to the class level. While static methods can be hidden by subclasses (if they declare a static method with the same signature), this is not the same as overriding and does not follo
🌐
shiksha.com
shiksha.com › home › it & software › it & software articles › programming articles › difference between final and static in java
Difference Between Final and Static in Java
🌐
TheServerSide
theserverside.com › video › Why-we-use-static-final-in-Java-for-constants
Why we use static final in Java for constants | TheServerSide
For example, the ID of your bank account might be a good example of a final variable. Once you're assigned a bank account number, you have that account number for life. However, your bank account ID is different from mine. The variable is constant, but every instance of a bank account has a ...
Top answer
1 of 11
279

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, but in this case:

    • A blank final instance variable must be assigned at every constructor of its class.
    • A blank final static variable must be assigned in a static initializer in its class.

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.

2 of 11
45

static means it belongs to the class not an instance, this means that there is only one copy of that variable/method shared between all instances of a particular Class.

public class MyClass {
    public static int myVariable = 0; 
}

//Now in some other code creating two instances of MyClass
//and altering the variable will affect all instances

MyClass instance1 = new MyClass();
MyClass instance2 = new MyClass();

MyClass.myVariable = 5;  //This change is reflected in both instances

final is entirely unrelated, it is a way of defining a once only initialization. You can either initialize when defining the variable or within the constructor, nowhere else.

note A note on final methods and final classes, this is a way of explicitly stating that the method or class can not be overridden / extended respectively.

Extra Reading So on the topic of static, we were talking about the other uses it may have, it is sometimes used in static blocks. When using static variables it is sometimes necessary to set these variables up before using the class, but unfortunately you do not get a constructor. This is where the static keyword comes in.

public class MyClass {

    public static List<String> cars = new ArrayList<String>();

    static {
        cars.add("Ferrari");
        cars.add("Scoda");
    }

}

public class TestClass {

    public static void main(String args[]) {
        System.out.println(MyClass.cars.get(0));  //This will print Ferrari
    }
}

You must not get this confused with instance initializer blocks which are called before the constructor per instance.

🌐
BYJUS
byjus.com › gate › difference-between-static-and-final-variable-in-java
Difference between Static and Final Variable in Java
March 31, 2023 - Static and final are two important ... like Java. The static keyword is used to represent the class member. It is basically used with methods and variables to indicate that it is a part of the class, not the object.
🌐
CodingTechRoom
codingtechroom.com › question › -difference-final-const-static-variables-java
Understanding the Differences Between final, const, and static Variables in Java - CodingTechRoom
This guide aims to clarify the distinctions among final, const (not applicable in Java), and static variables. ... public class Example { public static final int MAX_USERS = 10; // static constant private final String userName; // instance constant public Example(String name) { this.userName = name; // initialized only once } public static void main(String[] args) { Example e1 = new Example("User1"); Example e2 = new Example("User2"); System.out.println(e1.userName); System.out.println(e2.userName); System.out.println(MAX_USERS); } } // This shows how final and static work.
Find elsewhere
🌐
Codementor
codementor.io › community › java 101: what is the difference between final and static in java? is it same as const in c++ ?
Java 101: What is the difference between final and static in Java? Is it same as const in c++ ? | Codementor
April 20, 2017 - For example - final variables cannot be reassigned, final fields in a class cannot be set once they’re defined, final methods cannot be overridden, and, final classes cannot be extended/subclassed. final in Java is more analogous to const in C++. ...
🌐
Baeldung
baeldung.com › home › java › core java › difference between “final static” and “static final”
Difference Between “final static” and “static final” | Baeldung
January 5, 2024 - The keywords final and static in Java have different meanings, but they can be used together to declare a constant variable.
🌐
Tech Differences
techdifferences.com › home › difference between static and final in java
Difference Between Static and Final in Java (with Comparison Chart) - Tech Differences
December 25, 2019 - The main difference between a static and final keyword is that static is keyword is used to define the class member that can be used independently of any object of that class. Final keyword is used to declare, a constant variable, a method which ...
🌐
Reddit
reddit.com › r/javahelp › difference between static, final and static final (variable pov)
r/javahelp on Reddit: Difference between static, final and static final (variable pov)
March 3, 2022 -

final - The value assigned to the variable cannot be changed.

static - Even in different class instances, compiler will allocate the same memory location to the variable which it had assigned no matter how many instances of that class. The value can be changed.

My question is: Why is the final keyword not allocating the same memory location to the variable, if the value cannot change?

Let us have different instances of a class and still we will have the same value in the variable as it has been declared as final.

Why do we need to write static final then, it could have been done via final only, am I missing on thinking some cases?

If someone can please clarify?

Top answer
1 of 5
11
Final can only be set once, but it still can be set and it can have a different value for each instance. Say you have a car class. Your make and model could be final and set in the constructor. Each new car can have a different make and model, but you can't change their make and model after it is set. Static variables are specific to the class and are cannot have seperate values for each instance. Your car class can have a car registry. To track all cars ever created, there is a static int that starts at 0 and is incremented by one each time a car is constructed. If this wasn't static, each car would have its own totalCars which would be one, since each instance starts at zero and that gets incremented in the constructor. However, since it is static, it is initialized with the class and each new car increases it by one so that it's value is equal to how many cars have been made. Static final is for constants. You need to know how fast your cars accelerate due to gravity. This value is set to 9.8. It is static because it doesn't matter which instance, it belongs to the class as a whole and you don't allow the value to be changed, so it can be final.
2 of 5
5
You have two completely separate concepts here: final - the value cannot be changed, once it has been assigned. (Unstated assumption here is that the value can be assigned after creation, and that it can be declared on a per-instance basis.) static - all instances share a common value. Nothing less, nothing more. What that means is that if one instance changes the value, it changes for all instances. Why do we need to write static final then, You don't need to write that, unless you want a specific behavior. Namely, that the variable can only be set once, and that it will be shared by all instances. Typically, you would declare the value with the variable, but I don't think you have to do that. It would be possible for you to create multiple instances, and then have one of them set the value for all of them, permanently.
🌐
Testbook
testbook.com › home › key differences › difference between static and final variable in java - testbook.com
Difference between Static and Final Variable in Java - Testbook.com
The main differences between static and final variables in Java include points like static variables are class members and can be reinitialized, while final variables are constant and cannot be reinitialized.
🌐
Quora
quora.com › Why-is-a-constant-defined-as-a-static-final-in-Java
Why is a constant defined as a static final in Java? - Quora
Answer (1 of 6): In Java a constant is declared with 'final'. Now there's really no need to define it static (or public static), however, if you do so, the final variable is accessible through the class, rather than through an object of that class. Imagine PI is a constant declared inside a class...
🌐
YouTube
youtube.com › watch
Why Java Uses static & final for Constants - YouTube
In Java, the `static final` combination is used to create constants, rather than using `const` as in some other programming languages. This choice is due to ...
Published   February 3, 2024
🌐
Difference Between
differencebetween.com › difference-between-static-and-vs-final-in-java
Difference Between static and final in Java | Compare the Difference Between Similar Terms
March 9, 2018 - The difference between static and final in Java is that static is used to define the class member that can be used independently of any object of the class while final is used to declare a constant variable or a method that cannot be overridden or a class that cannot be inherited.
🌐
Scaler
scaler.com › topics › constant-in-java
What is Constant in Java? - Scaler Topics
September 9, 2022 - In the example above, the final variable obj2 points to an object obj1, not a primitive data type. Although the object assigned to the obj2 variable cannot be changed, the properties of the object obj2 can be changed. Constant in Java is an entity that cannot be changed once assigned. Constant in Java makes the primitive data types immutable. Syntax: static final datatype identifier_name = value;...
🌐
TutorialsPoint
tutorialspoint.com › difference-between-static-and-final-in-java
Difference Between Static and Final in Java
In this article, we will learn about the difference between static and final keywords in Java. Two of the most frequently used and frequently confused keywords are static and final. Although they may at times be used together in code, they have basic
🌐
ThoughtCo
thoughtco.com › constant-2034049
Here's How to Create a Java Constant Variable
May 13, 2025 - Final keyword ensures the variable's reference stays consistent but doesn't prevent changes to mutable objects. A constant is a variable whose value can't change once assigned. Java doesn't have built-in support for constants, but you can use ...
🌐
Coderanch
coderanch.com › t › 671314 › java › Constant-final-static-final-variable
Constant final static vs final variable and Enum (Beginning Java forum at Coderanch)
They are only constants if they have a set value which does not change. public static final double ABSOLUTE_ZERO = -273.15;
🌐
Pediaa
pediaa.com › home › technology › it › programming › what is the difference between static and final
What is the Difference Between static and final - Pediaa.Com
October 3, 2018 - Static is used to define the class member that can be used independently of any object of the class. Final is used to declare a constant variable or a method that cannot be overridden or a class that cannot be inherited.