Java Programming
Master enterprise-grade Java — 50 lessons from first program to advanced multithreading and architecture.
Sign in to track your progress through this course
👋 New to Java? No experience needed.
Start with Lesson 1 and learn one of the world's most in-demand programming languages step by step.
Beginner Track
✦ Start Here ~2–3 hoursWrite your first Java programs, understand the type system, and learn to control program flow.
Introduction to Java
What Java is, how it runs, and how to write and compile your first program
Variables and Data Types
Declare int, String, boolean, double — the types you'll use every day
Operators
Arithmetic, comparison, and logical operators with practical examples
Control Flow
Write decisions in code with if, else if, else, and switch statements
Loops
Repeat actions with for, while, and do-while loops
Intermediate Track
~3–4 hoursWrite methods, work with arrays and strings, and start building with object-oriented programming.
Methods
Write reusable methods, pass parameters, and return values
Arrays
Store and access lists of values with Java arrays
Strings
Manipulate text with String methods, concatenation, and formatting
Object-Oriented Programming
Create classes and objects to model real-world concepts
Inheritance
Extend classes and reuse code through Java inheritance
Expert Track
~2–3 hoursMaster interfaces, exceptions, the Collections framework, and Java Generics.
Interfaces and Abstract Classes
Define contracts with interfaces and share behaviour with abstract classes
Exception Handling
Catch and handle runtime errors with try-catch-finally
Collections Framework
Use ArrayList, HashMap, HashSet, and other collection types effectively
Generics
Write type-safe, reusable code with Java Generics
Advanced Track
~12–16 hoursDeep-dive Java for experienced developers — JVM internals, concurrency, design patterns, testing, and enterprise architecture.
Advanced Java Methods & Overloading Mastery
Overloading, varargs, method references, and lambda-compatible signatures
Deep Dive into Java OOP Design Patterns
Apply Singleton, Factory, Builder, and Decorator patterns in Java
Interfaces, Abstraction & Best Practices
Default methods, sealed interfaces, and interface-first design
Java Inner Classes & Anonymous Classes
Static, non-static, local, and anonymous inner classes explained
Exception Handling Architecture in Large Systems
Custom exception hierarchies, chained exceptions, and error strategies
Java Generics: Bounded Types, Wildcards & Type Erasure
Upper/lower bounds, ? wildcards, and how type erasure affects runtime
Streams API Advanced Operations & Pipelines
Build complex data pipelines with filter, map, collect, and flatMap
Lambda Expressions Deep Dive
Functional interfaces, method references, and lambda best practices
Working with Optionals the Right Way
Eliminate null pointer exceptions with Optional chains and patterns
Java Collections Framework Internals & Performance
How ArrayList, LinkedList, and HashSet work under the hood
Advanced HashMap, TreeMap & LinkedHashMap Behaviors
Choose the right Map type and understand hashing, ordering, and complexity
Multithreading in Java: Threads, Runnables & Executors
Create and manage threads, use thread pools and ExecutorService
Concurrency Utilities: Locks, Semaphores & Latches
Coordinate threads safely with ReentrantLock, Semaphore, and CountDownLatch
CompletableFuture & Asynchronous Programming
Chain async operations and handle results with CompletableFuture
Memory Management & JVM Garbage Collection
How the JVM allocates memory and which GC algorithms to choose
JVM Internals: Classloaders & Bytecode
How the JVM loads, verifies, and executes bytecode at runtime
Reflection API & Dynamic Code Analysis
Inspect and invoke classes, fields, and methods at runtime
Java Annotations: Custom, Built-In & Processing
Use and create annotations for frameworks, validation, and code generation
I/O Streams & NIO2 for High-Performance File Handling
Read/write files efficiently with NIO2, Paths, and FileChannel
Working with Databases using JDBC & Connection Pools
Query databases with JDBC, prepared statements, and connection pools
Building REST APIs in Java (Servlets + HTTP basics)
Handle HTTP requests and build RESTful endpoints with Java Servlets
JSON & XML Parsing with Jackson & JAXB
Serialise and deserialise JSON with Jackson and XML with JAXB
Unit Testing in Java with JUnit & Mockito
Write tests with JUnit 5, mock dependencies with Mockito
Maven & Gradle: Dependency Management at Scale
Manage dependencies, build lifecycle, and plugins with Maven and Gradle
Modular Java (JPMS) Architecture Essentials
Structure large Java projects with the Java Platform Module System
Deploying Java Applications (JAR/WAR)
Package and deploy Java apps as JARs, WARs, and Docker containers
Logging & Monitoring with Log4j2 & SLF4J
Add structured logging with SLF4J and configure Log4j2 for production
Secure Coding Practices for Java Developers
Prevent injection, insecure deserialization, and common Java vulnerabilities
JavaFX for Desktop UI Development
Build desktop GUI applications with JavaFX scenes, controls, and CSS
Networking in Java: Sockets, Clients & Servers
Build TCP/UDP clients and servers with Java socket programming
Working with Threads Pools & Scheduled Executors
Execute tasks concurrently with ScheduledExecutorService and ForkJoinPool
Performance Profiling with VisualVM & JProfiler
Find bottlenecks and memory leaks using Java profiling tools
Microservices with Spring Boot (Intro)
Build and deploy a simple microservice with Spring Boot and REST
Building CLI Tools with Java
Create command-line applications with argument parsing and output formatting
Clean Architecture & Enterprise Patterns in Java
Structure enterprise Java apps with Clean Architecture and SOLID principles
Final Project Ideas
Guided project ideas to put your Java skills into a real application