Java Modifiers

Modifiers in Java are keywords that you add to definitions of classes, methods, and variables to change their meanings. Modifiers fall into two categories: access modifiers and non-access modifiers.

1. Access Modifiers

Access modifiers set the accessibility (visibility) of classes, methods, and variables.

  • public: Accessible from any other class.
  • private: Accessible only within the declared class.
  • protected: Accessible within the same package or subclasses.
  • default (no modifier): Accessible within the same package.

2. Non-Access Modifiers

Non-access modifiers provide functionality other than access control.

  • static: Belongs to the class, rather than an instance.
  • final: Cannot be changed or inherited.
  • abstract: Cannot be instantiated and may contain abstract methods.
  • synchronized: Used in multithreading to control access.
  • transient: Skipped during serialization.
  • volatile: Value is not cached thread-locally.

3. Examples

3.1 Using Access Modifiers

public class Example {
    private int privateVar;
    public int publicVar;
    protected int protectedVar;
    int defaultVar; // default access modifier
}

3.2 Using Non-Access Modifiers

public final class Constants {
    public static final double PI = 3.14159;
}

public abstract class Shape {
    public abstract void draw();
}

4. Key Takeaways

  • Modifiers adjust the behavior and accessibility of classes, methods, and variables.
  • Access modifiers control visibility across different classes and packages.
  • Non-access modifiers provide additional functionality like immutability and concurrency control.
  • Understanding modifiers is crucial for encapsulation and proper class design.