Final Variable

Final Instance Variable

  • If value changes object to object → instance variable
  • Each object has its own copy
  • Gets default value from JVM
class Test {
  int x;
  public static void main(String[] args) {
    Test t = new Test();
    System.out.print(t.x); // 0
  }
}
Rule: Final instance variable must be initialized explicitly.
  • At declaration → final int x = 10;
  • Instance block
  • Constructor
// Declaration
final int x = 10;

// Instance block
{
  x = 10;
}

// Constructor
Test() {
  x = 10;
}

Invalid: assigning outside constructor/instance block → compile error


Final Static Variables

Static → shared among all objects

class Test {
  static int x;
  public static void main(String[] args) {
    System.out.print(x); // 0
  }
}
Rule: Final static must be initialized before class loads.
  • At declaration
  • Static block
// Valid
final static int X = 10;

// Static block
static {
  X = 10;
}

// Invalid
public void m() {
  X = 10; // error
}

Final Local Variables

  • Declared inside method
  • No default value
  • Must initialize before use
  • Only final allowed
// Error
int x;
System.out.print(x);

// Valid
int x;
System.out.print("Hello");

// Final local
final int x;
System.out.print("Hello");

// Final parameters
void m(final int x) {
  // x = 10; // error
}
Example

Summary

  • Final Instance → constructor / block / declaration
  • Final Static → declaration / static block
  • Final Local → must assign before use

0 Comments