What is Java?

Understanding the Java Programming Language and Platform

← Back to Index

Introduction to Java

Java is one of the most influential and widely-used programming languages ever created. Since its public release in 1995, it has fundamentally shaped how software is designed, built, and deployed across the globe. Today, Java powers everything from Android smartphones to enterprise banking systems, from scientific applications to video games, running on an estimated 3 billion devices worldwide.

Java is a general-purpose, object-oriented programming language designed with the philosophy of "Write Once, Run Anywhere" (WORA). This revolutionary concept means that Java code compiled on one platform can run on any other platform that has a Java Virtual Machine (JVM), without needing to be recompiled. This platform independence solved one of the biggest challenges of the early computing era: the need to rewrite software for every different operating system and hardware architecture.

What makes Java particularly powerful is its combination of simplicity and robustness. Unlike C++, which gives programmers direct access to memory management, Java handles memory automatically through garbage collection, eliminating entire categories of bugs that plagued earlier languages. At the same time, Java's strict type system catches errors at compile time rather than runtime, preventing many common programming mistakes before the code ever runs.

Java is not just a programming language—it's an entire ecosystem. The Java platform includes the language itself, the Java Virtual Machine (JVM), a comprehensive standard library with thousands of pre-built classes, and a rich collection of development tools. This ecosystem is supported by one of the largest developer communities in the world, with millions of developers, thousands of open-source projects, and extensive documentation available for virtually every use case imaginable.

The language continues to evolve with new features while maintaining backward compatibility—code written decades ago still runs on modern Java versions. This commitment to stability, combined with regular innovation, has made Java the backbone of enterprise computing and a top choice for organizations that need reliable, maintainable, long-lived software systems.

Why Java is Special
  • Platform Independent - Runs on Windows, Mac, Linux, and more
  • Object-Oriented - Everything is organized around objects and classes
  • Secure - Built-in security features protect against viruses and tampering
  • Robust - Strong memory management and error handling
  • Multithreaded - Can perform multiple tasks simultaneously
  • Rich Ecosystem - Massive library of pre-built tools and frameworks
  • Backward Compatible - Old code works on new versions
  • Performance - JIT compilation makes Java nearly as fast as C++

Historical Context: The Birth of Java

Understanding Java's history helps explain many of its design decisions and why it became so successful.

The Green Project (1991-1995)

Java was born out of a project called "Green" at Sun Microsystems, led by James Gosling, Mike Sheridan, and Patrick Naughton. The original goal wasn't to create a general-purpose programming language—it was to develop software for interactive television and consumer electronics. The team realized they needed a language that was:

The language was originally called "Oak" (after a tree outside Gosling's office), but was renamed to "Java" in 1995 due to trademark issues. The name "Java" was inspired by Java coffee, which the team consumed in large quantities.

The Internet Revolution

While the interactive TV market never materialized as expected, the rise of the World Wide Web provided the perfect platform for Java. In 1995, Netscape announced that their Navigator browser would support Java applets—small programs that could run inside web pages. This was revolutionary: for the first time, web pages could contain interactive, executable content.

Java's promise of "Write Once, Run Anywhere" was exactly what the web needed. Developers could write an applet once and know it would work on any computer with a Java-enabled browser, regardless of whether the user was running Windows, Mac, or Unix.

Enterprise Adoption

By the late 1990s, Java had evolved beyond browser applets to become the preferred language for enterprise server-side development. The introduction of Java 2 Enterprise Edition (J2EE, now Jakarta EE) provided a standardized platform for building large-scale business applications. Major companies like IBM, Oracle, and BEA invested heavily in Java, and it became the de facto standard for enterprise computing.

Key Historical Milestones
  • 1991 - Green Project begins at Sun Microsystems
  • 1995 - Java 1.0 released publicly; Netscape adds Java support
  • 1998 - Java 2 (J2SE 1.2) introduces Collections Framework
  • 2004 - Java 5 adds generics, enums, annotations
  • 2010 - Oracle acquires Sun Microsystems
  • 2014 - Java 8 introduces lambdas and streams
  • 2017 - Java 9 introduces modules; 6-month release cycle begins
  • 2021 - Java 17 LTS released
  • 2023 - Java 21 LTS brings virtual threads

How Java Works: Under the Hood

Understanding how Java executes code is fundamental to becoming an effective Java developer. Unlike languages that compile directly to machine code, Java uses a two-stage process that enables its platform independence.

The Java Compilation and Execution Process

/*
 * Java Compilation and Execution Flow
 * ====================================
 *
 *   SOURCE CODE                    BYTECODE                    MACHINE CODE
 *   (HelloWorld.java)              (HelloWorld.class)          (Platform-specific)
 *         │                              │                           │
 *         │    ┌──────────────┐          │    ┌──────────────┐       │
 *         └───▶│ Java Compiler │────────▶└───▶│     JVM      │──────▶│
 *              │   (javac)     │              │ (java)       │       │
 *              └──────────────┘              └──────────────┘       │
 *                                                   │               │
 *                                    ┌──────────────┼──────────────┐
 *                                    │              │              │
 *                              ┌─────▼────┐  ┌─────▼────┐  ┌──────▼─────┐
 *                              │ Windows  │  │  macOS   │  │   Linux    │
 *                              │   JVM    │  │   JVM    │  │    JVM     │
 *                              └──────────┘  └──────────┘  └────────────┘
 *
 *  The SAME .class file runs on ANY platform with a JVM!
 */

Step 1: Writing Source Code

You write your Java program in a plain text file with a .java extension. The filename must match the public class name exactly.

// File: HelloWorld.java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

Step 2: Compilation to Bytecode

The Java compiler (javac) transforms your human-readable source code into bytecode—a platform-independent intermediate representation stored in .class files. Bytecode is not native machine code; it's a set of instructions designed for the JVM.

# Compile the Java file
javac HelloWorld.java

# This creates HelloWorld.class containing bytecode
# You can view the bytecode with:
javap -c HelloWorld

Step 3: Execution by the JVM

The Java Virtual Machine (JVM) loads the bytecode and executes it. The JVM is an abstraction layer that translates bytecode into native machine instructions specific to your operating system and CPU architecture.

# Run the program
java HelloWorld

# Output: Hello, World!

The JVM Architecture

/*
 * JVM Internal Architecture
 * ==========================
 *
 *  ┌─────────────────────────────────────────────────────────────┐
 *  │                    Java Virtual Machine                      │
 *  │  ┌───────────────────────────────────────────────────────┐  │
 *  │  │                   Class Loader                         │  │
 *  │  │  • Loading: Finds and imports .class files             │  │
 *  │  │  • Linking: Verifies, prepares, resolves references    │  │
 *  │  │  • Initialization: Executes static initializers        │  │
 *  │  └───────────────────────────────────────────────────────┘  │
 *  │                           │                                  │
 *  │                           ▼                                  │
 *  │  ┌───────────────────────────────────────────────────────┐  │
 *  │  │               Runtime Data Areas                       │  │
 *  │  │  ┌─────────────┬─────────────┬─────────────────────┐  │  │
 *  │  │  │   Method    │    Heap     │   Stack (per thread) │  │  │
 *  │  │  │    Area     │  (Objects)  │  (Local variables)   │  │  │
 *  │  │  └─────────────┴─────────────┴─────────────────────┘  │  │
 *  │  │  ┌─────────────┬─────────────────────────────────────┐  │  │
 *  │  │  │ PC Register │     Native Method Stack            │  │  │
 *  │  │  └─────────────┴─────────────────────────────────────┘  │  │
 *  │  └───────────────────────────────────────────────────────┘  │
 *  │                           │                                  │
 *  │                           ▼                                  │
 *  │  ┌───────────────────────────────────────────────────────┐  │
 *  │  │                 Execution Engine                       │  │
 *  │  │  • Interpreter: Executes bytecode line by line         │  │
 *  │  │  • JIT Compiler: Compiles hot code to native code      │  │
 *  │  │  • Garbage Collector: Automatic memory management      │  │
 *  │  └───────────────────────────────────────────────────────┘  │
 *  └─────────────────────────────────────────────────────────────┘
 */

Just-In-Time (JIT) Compilation

One common misconception is that Java is slow because it's "interpreted." In reality, modern JVMs use Just-In-Time (JIT) compilation to achieve near-native performance:

This adaptive optimization can sometimes make Java code faster than statically compiled languages because the JVM can make optimizations based on actual runtime data that a static compiler cannot predict.

The Magic of Platform Independence

The same .class file (bytecode) can run on:

  • Windows PC with Intel processor
  • Mac computer with Apple Silicon
  • Linux server with ARM processor
  • Raspberry Pi
  • Android device (via ART/Dalvik)
  • Any device with a JVM!

You don't need to recompile for each platform—the JVM handles the platform-specific translation.

What Can You Build With Java?

Java is incredibly versatile and is used in virtually every domain of software development. Here are the major areas where Java excels:

1. Enterprise Applications

Java is the undisputed king of enterprise software. Large corporations choose Java for their mission-critical systems because of its reliability, scalability, and maintainability.

// Example: A simple banking transaction service
@Service
@Transactional
public class TransferService {

    public void transfer(Account from, Account to, BigDecimal amount) {
        if (from.getBalance().compareTo(amount) < 0) {
            throw new InsufficientFundsException();
        }
        from.debit(amount);
        to.credit(amount);
        auditLog.record(new TransferEvent(from, to, amount));
    }
}

2. Web Applications

Java powers millions of websites and web applications through frameworks like Spring Boot, which makes it easy to build scalable, production-ready applications.

3. Mobile Applications (Android)

Android, the world's most popular mobile operating system (70%+ market share), uses Java as one of its primary programming languages. While Kotlin is now also official, millions of Android apps are built with Java.

// Android Activity example
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = findViewById(R.id.myButton);
        button.setOnClickListener(v -> showMessage());
    }
}

4. Big Data & Distributed Systems

Many of the most important big data technologies are written in Java or run on the JVM:

5. Cloud & Microservices

Java's mature ecosystem and frameworks like Spring Boot make it ideal for cloud-native development:

6. Scientific & Research Applications

Java is widely used in scientific computing and research:

7. Desktop Applications

While less common today, many successful desktop applications are built with Java:

Java by the Numbers
  • 3+ billion devices run Java
  • 35+ million Java developers worldwide
  • 97% of enterprise desktops run Java
  • 89% of US desktops run Java
  • #1 or #2 language in most popularity indexes

Java Editions Explained

Java comes in different editions tailored for different types of applications:

Java SE (Standard Edition)

The core Java platform for general-purpose programming. This is what you learn first and what most tutorials cover.

Jakarta EE (Enterprise Edition)

Previously known as Java EE, now maintained by the Eclipse Foundation. Built on top of Java SE with additional APIs for enterprise features.

Java ME (Micro Edition)

For resource-constrained embedded devices. Less commonly used today but still found in:

Edition Target Use Case Key Technologies
Java SE Desktop, general-purpose Core APIs, Swing, JavaFX
Jakarta EE Enterprise, web applications Servlets, JPA, EJB, CDI
Java ME Embedded, IoT devices MIDP, CLDC

Java Version History

Java has evolved significantly since 1995. Understanding version history helps you know what features are available and make informed decisions about which version to use.

The Major Versions

Java 1.0 - 1.4: The Foundation Years (1996-2002)

These early versions established Java's core features: the JVM, garbage collection, platform independence, and the basic class library. Java 1.2 (called "Java 2") introduced the Collections Framework and Swing GUI toolkit.

Java 5 (2004) - The Modern Java Beginning

A watershed release that introduced features we now consider essential:

// Generics - type-safe collections
List<String> names = new ArrayList<String>();

// Enhanced for loop
for (String name : names) {
    System.out.println(name);
}

// Enums
enum Status { ACTIVE, INACTIVE, PENDING }

// Autoboxing
Integer num = 5;  // Automatic int to Integer

// Annotations
@Override
public String toString() { return "..."; }

Java 7 (2011)

// Try-with-resources - automatic resource management
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
    return reader.readLine();
}  // reader is automatically closed

// Diamond operator - less verbose generics
List<String> list = new ArrayList<>();  // Type inferred

// String in switch
switch (day) {
    case "Monday" -> startWeek();
    case "Friday" -> celebrate();
}

Java 8 (2014) - Revolutionary Release

The most significant release since Java 5, introducing functional programming to Java:

// Lambda expressions
Runnable r = () -> System.out.println("Hello!");

// Stream API - functional data processing
List<String> filtered = names.stream()
    .filter(name -> name.startsWith("A"))
    .map(String::toUpperCase)
    .collect(Collectors.toList());

// Optional - no more null pointer exceptions
Optional<User> user = findUser(id);
user.ifPresent(System.out::println);

// New Date/Time API
LocalDate today = LocalDate.now();
LocalDateTime meeting = LocalDateTime.of(2024, 1, 15, 10, 30);

// Default methods in interfaces
interface Vehicle {
    default void start() { System.out.println("Starting..."); }
}

Java 11 (2018) - LTS

// Local variable type inference with var
var message = "Hello";  // Type inferred as String
var numbers = List.of(1, 2, 3);

// New String methods
"  hello  ".strip();     // "hello"
"hello".repeat(3);       // "hellohellohello"
"line1\nline2".lines();  // Stream of lines

// HTTP Client (standardized)
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.example.com"))
    .build();

Java 17 (2021) - LTS

// Records - immutable data carriers
record Point(int x, int y) {}
Point p = new Point(10, 20);

// Sealed classes - restrict inheritance
sealed interface Shape permits Circle, Rectangle, Triangle {}

// Pattern matching for instanceof
if (obj instanceof String s) {
    System.out.println(s.toUpperCase());
}

// Text blocks (multi-line strings)
String json = """
    {
        "name": "John",
        "age": 30
    }
    """;

Java 21 (2023) - Latest LTS

// Virtual threads - lightweight concurrency
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
    executor.submit(() -> fetchData("api1"));
    executor.submit(() -> fetchData("api2"));
}  // Handles millions of concurrent tasks!

// Pattern matching in switch
String result = switch (obj) {
    case Integer i -> "Integer: " + i;
    case String s -> "String: " + s;
    case null -> "null value";
    default -> "Unknown";
};

// Sequenced collections
SequencedCollection<String> list = new ArrayList<>();
list.addFirst("first");
list.addLast("last");
String first = list.getFirst();
Understanding LTS (Long-Term Support)

LTS versions receive updates and security patches for years, making them ideal for production applications.

Current LTS versions: Java 8, 11, 17, 21

For new projects: Use Java 17 or Java 21

Non-LTS versions are supported for only 6 months and are mainly for testing new features.

Java vs Other Languages

Understanding how Java compares to other popular languages helps you appreciate its strengths and know when it's the right choice.

Aspect Java Python C++ JavaScript
Typing Static, strong Dynamic, strong Static, weak Dynamic, weak
Memory Automatic (GC) Automatic (GC) Manual Automatic (GC)
Performance Fast (JIT) Slower Fastest Fast (V8)
Learning Curve Moderate Easy Hard Easy-Moderate
Enterprise Use Dominant Growing Specific domains Web-focused
Mobile Android Limited Limited React Native
Java ≠ JavaScript

Despite the similar names, Java and JavaScript are completely different languages with different purposes, syntax, and runtime environments. The naming similarity was a marketing decision from 1995.

Java JavaScript
Compiled to bytecode Interpreted/JIT in browser
Runs on JVM Runs in browser/Node.js
Statically typed Dynamically typed
Backend, Android, desktop Frontend, web, Node.js

When to Use Java (and When Not To)

Java Excels At:

Consider Alternatives For:

Your First Java Program

Let's create and understand your first Java program step by step.

// File: HelloWorld.java
// Every Java program starts with a class definition
public class HelloWorld {

    // The main method is the entry point - execution starts here
    public static void main(String[] args) {

        // Print a message to the console
        System.out.println("Hello, World!");

        // Let's do a bit more to see Java in action
        String name = "Java Developer";
        int year = 2026;

        System.out.println("Welcome, " + name + "!");
        System.out.println("The year is " + year);
    }
}

Understanding Each Part

/*
 * Breaking down the code:
 *
 * public class HelloWorld
 * └─────┬─────┘ └────┬────┘
 *       │            └── Class name (must match filename)
 *       └── Access modifier (visible to all)
 *
 * public static void main(String[] args)
 * └──┬──┘ └──┬──┘ └─┬─┘ └─┬─┘ └────┬────┘
 *    │      │      │     │        └── Command-line arguments
 *    │      │      │     └── Method name (entry point)
 *    │      │      └── Return type (nothing returned)
 *    │      └── Belongs to class, not instance
 *    └── Accessible from outside
 *
 * System.out.println("Hello, World!");
 * └──┬──┘ └┬┘ └───┬───┘ └──────┬──────┘
 *    │     │      │            └── The text to print
 *    │     │      └── Method to print with newline
 *    │     └── Standard output stream
 *    └── System class (built-in)
 */

Compiling and Running

# Step 1: Navigate to your source file directory
cd /path/to/your/code

# Step 2: Compile the Java file
javac HelloWorld.java

# This creates HelloWorld.class (bytecode)

# Step 3: Run the program
java HelloWorld

# Output:
# Hello, World!
# Welcome, Java Developer!
# The year is 2026

# Java 11+ shortcut (compile and run in one step):
java HelloWorld.java

Common Pitfalls for Beginners

Filename Must Match Class Name
// File: MyProgram.java
public class HelloWorld { }  // ERROR! Class name doesn't match file

// File: HelloWorld.java
public class HelloWorld { }  // CORRECT!
Case Sensitivity Matters
String name = "John";   // Correct
string name = "John";   // ERROR! Java is case-sensitive

System.out.println();   // Correct
system.out.println();   // ERROR!
Semicolons Are Required
int x = 5    // ERROR! Missing semicolon
int y = 10;  // Correct
main Method Signature
// WRONG - these won't run as entry point:
public void main(String[] args) { }        // Missing static
public static void main() { }             // Missing String[] args
static void main(String[] args) { }        // Missing public

// CORRECT:
public static void main(String[] args) { }

Troubleshooting Common Errors

'javac' is not recognized

Problem: Java compiler not found in system PATH.

Solution:

  1. Verify JDK is installed: Check for a folder like C:\Program Files\Java\jdk-21
  2. Add JDK's bin folder to your PATH environment variable
  3. Restart your terminal/command prompt

Error: Could not find or load main class

Problem: JVM can't find your compiled class.

Solutions:

Error: class X is public, should be declared in a file named X.java

Problem: Filename doesn't match public class name.

Solution: Rename either the file or the class to match.

Error: reached end of file while parsing

Problem: Missing closing brace }.

Solution: Check that every { has a matching }.

Common Interview Questions

Interview Questions: What is Java?

Q: What does "Write Once, Run Anywhere" mean?

A: Java source code is compiled to platform-independent bytecode. This bytecode can run on any device that has a JVM, without needing to recompile. The JVM acts as an abstraction layer between the bytecode and the underlying hardware/OS.

Q: What's the difference between JDK, JRE, and JVM?

A:

  • JVM (Java Virtual Machine) - Executes bytecode, provides runtime environment
  • JRE (Java Runtime Environment) - JVM + standard libraries; needed to run Java programs
  • JDK (Java Development Kit) - JRE + development tools (compiler, debugger); needed to develop Java programs

Q: Why is Java considered platform-independent but the JVM is platform-dependent?

A: The bytecode is platform-independent—the same .class files work anywhere. However, each platform needs its own JVM implementation to translate bytecode to that platform's native instructions. The JVM absorbs platform differences so your code doesn't have to.

Q: Is Java compiled or interpreted?

A: Both. Java source code is compiled to bytecode by javac. The bytecode is then either interpreted by the JVM or compiled to native code by the JIT compiler at runtime. Modern JVMs primarily use JIT compilation for performance.

Q: What are the main features of Java?

A: Object-oriented, platform-independent, secure, robust (strong typing, exception handling, garbage collection), multithreaded, portable, high-performance (JIT), distributed computing support, and dynamic class loading.

Q: Why doesn't Java support multiple inheritance of classes?

A: To avoid the "diamond problem" where ambiguity arises if two parent classes have methods with the same signature. Java allows multiple inheritance of interfaces instead, and since Java 8, interfaces can have default methods.

Getting Started: Next Steps

What You Need to Install

  1. JDK (Java Development Kit)
    • Download Java 17 or 21 (LTS versions) from Oracle or adoptium.net
    • Set JAVA_HOME environment variable
    • Add JDK/bin to your PATH
  2. IDE (Integrated Development Environment)
    • IntelliJ IDEA - Most popular, excellent features (free Community edition)
    • Eclipse - Free, open-source, widely used
    • VS Code - Lightweight with Java extensions

Recommended Learning Path

  1. Variables & Data Types - Understand how data is stored
  2. Control Flow - if/else, loops, switch
  3. Methods - Organize code into reusable blocks
  4. OOP Fundamentals - Classes, objects, inheritance
  5. Collections - Lists, Maps, Sets
  6. Exception Handling - Dealing with errors
  7. Java 8+ Features - Lambdas, Streams, Optional
  8. Build Tools - Maven or Gradle
  9. Frameworks - Spring Boot for web development

See Also