- Java Tutorial
- Java Introduction
- Java Features
- Java Simple Program
- JVM, JDK and JRE
- Java Syntax
- Java Comments
- Java Keywords
- Java Variables
- Java Literals
- Java Separators
- Java Datatypes
- Java Operators
- Java Statements
- Java Strings
- Java Arrays
- Control Statement
- Java If
- Java If-else
- Java If-else-if
- Java Nested If
- Java Switch
- Iteration Statement
- Java For Loop
- Java For Each Loop
- Java While Loop
- Java Do While Loop
- Java Nested Loop
- Java Break/Continue
- Java Methods
- Java Methods
- Java Method Parameters
- Java Method Overloading
- Java Recursion
- Java OOPS
- Java OOPs
- Java Classes/Objects
- Java Inheritance
- Java Polymorphism
- Java Encapsulation
- Java Abstraction
- Java Modifiers
- Java Constructors
- Java Interface
- Java static keyword
- Java this keyword
- Java File Handling
- Java File
- Java Create File
- Java Read/Write File
- Java Delete File
- Java Program To
- Add Two Numbers
- Even or Odd Numbers
- Reverse a String
- Swap Two Numbers
- Prime Number
- Fibonacci Sequence
- Palindrome Strings
- Java Reference
- Java String Methods
- Java Math Methods
Java Modifiers
In Java, modifiers are keywords added to variable, method, or class declarations to change their meaning. Think of them as "settings" that define who can see a piece of code (Access Modifiers) and how that code behaves (Non-Access Modifiers). Mastering these is the first step toward writing secure, encapsulated, and efficient object-oriented code.
Access Modifiers:
Access modifiers regulate the "visibility" of your code. They help you implement encapsulation the practice of hiding internal data to prevent accidental corruption.
- public: The element is accessible from any other class in the entire project.
- private: The element is only accessible within the class it is declared in. This is the gold standard for data hiding.
- protected: Accessible within the same package and by subclasses even if they are in different packages.
- default (no modifier): If you don't type a keyword, Java defaults to "package-private," meaning it's visible only to classes in the same package.
private) and only increase visibility (to protected or public) if it is absolutely necessary.
Example of balancing visibility in a real-world UserAccount class:
public class UserAccount {
private double balance; // Hidden from outside world
public void deposit(double amount) { // Accessible to everyone
if(amount > 0) {
this.balance += amount;
}
}
protected void internalAudit() { // Accessible by subclasses like PremiumAccount
System.out.println("Running audit...");
}
}
private modifier on a top-level class. In Java, a top-level class can only be public or default.
Non-Access Modifiers:
These modifiers don't change visibility, but they do change how the code functions. They allow you to define constants, create class-wide variables, or force other developers to override certain methods.
- static: Belongs to the class itself rather than a specific object.
- final: Makes an element "immutable" or unchangeable.
- abstract: Used when a class or method is a "concept" that isn't fully defined yet.
- synchronized/volatile: Used in advanced multi-threaded programming to ensure data consistency.
public class AppConfig {
public static int connectionCount = 0; // Shared across all instances
public final String API_URL = "https://api.example.com"; // Cannot be changed
// Abstract method: sub-classes MUST provide their own logic
// abstract void processData();
}
Static Modifier:
The static keyword is used when you want a member to belong to the class rather than an instance (object). If you have 100 objects of a class, there is still only one copy of a static variable.
static for utility methods that don't need to store data, like Math.sqrt(). You don't need to create a "Math" object to use square root!
Example of a unique ID generator using static:
class Employee {
static int nextId = 1; // Shared by all employee objects
int id;
Employee() {
id = nextId;
nextId++; // Increment the shared counter
}
}
Final Modifier:
The final keyword acts as a "stop" sign. Its behavior depends on where you use it:
- On a Variable: It becomes a constant. You cannot change its value once assigned.
- On a Method: It cannot be overridden by subclasses. Use this for security to prevent someone from changing your logic.
- On a Class: It cannot be inherited (subclassed). For example, the Java
Stringclass isfinal.
public class DatabaseConnector {
final int TIMEOUT_SECONDS = 30; // Constant
public final void connect() {
// Critical logic that should never be altered by a subclass
System.out.println("Connecting...");
}
}
Abstract Modifier:
Abstract is used for "incomplete" items. An abstract class is a template that cannot be instantiated (you can't use new Shape()). An abstract method is a signature without a body, forcing the child class to fill in the details.
abstract class Payment {
// Every payment has an amount, but the "how" depends on the type
abstract void processPayment(double amount);
public void receipt() {
System.out.println("Thank you for your purchase.");
}
}
class CreditCardPayment extends Payment {
@Override
void processPayment(double amount) {
System.out.println("Processing " + amount + " via Credit Card.");
}
}
receipt() method above) among many similar classes while forcing them to implement their own specific logic.
Summary
Modifiers are the tools that allow you to define the architecture of your Java applications. Access Modifiers control the "Who" (security and visibility), while Non-Access Modifiers control the "How" (behavior and memory). By combining these effectively, you create code that is not only functional but also robust, predictable, and easy for other developers to read.