In Java, the final
and static
keywords serve different purposes. Here's a concise comparison of their roles and behaviors.
final
Keyword
- Purpose: Used to define constants, prevent method overriding, and prevent inheritance.
- Usage:
- Final Variables: Once assigned, cannot be changed. Example:
final int MAX_SIZE = 100;
- Final Methods: Cannot be overridden by subclasses. Example:
public final void display() { }
- Final Classes: Cannot be subclassed. Example:
public final class UtilityClass { }
static
Keyword
- Purpose: Used to define class-level variables and methods, shared across all instances.
- Usage:
- Static Variables: Shared among all instances of the class. Example:
public static int count = 0;
- Static Methods: Belong to the class and can be called without creating an instance. Example:
public static void displayCount() { }
- Static Blocks: Used for static initialization. Example:
static { // initialization code }
Summary of Differences
final
:- Variables: Immutable after initialization.
- Methods: Cannot be overridden.
- Classes: Cannot be subclassed.
static
:- Variables: Shared among all instances.
- Methods: Can be called without an instance.
- Blocks: Initialize static members when the class is loaded.
Follow-up Questions
- Can a
final
variable bestatic
? - Yes, making a variable both
final
andstatic
creates a constant that is shared among all instances of the class. - Can you override a
static
method? - No,
static
methods belong to the class, not instances, and therefore cannot be overridden. - What happens if you access a
static
variable using an object instance? - It works, but it’s misleading. It’s better to access
static
variables using the class name.