Course subjects
Module 1: The Java Platform
Introduce the Java platform and its architecture, including the Java Standard Edition, JVM responsibilities, and the lifecycle of a Java program. Students will also explore garbage collection and learn about Compact Source Files & Instance Main Methods for simplified program entry points.
Introduce the Java Platform
Explore the Java Standard Edition
Discuss the lifecycle of a Java Program
Explain the responsibilities of the JVM
Executing Java programs
Compact Source Files & Instance Main Methods
Garbage Collection
Module 2: Using the JDK
Walk through the JDK file structure and how to compile and run Java programs from the command line. This lesson emphasises documentation, code reuse.
Explain the JDK's file structure
Use the command line compiler to compile a Java class
Use the command line Java interpreter to run a Java application class
Documentation and Code Reuse
Lab: Exploring MemoryViewer
Lab: The SwingSet demo
Module 3: Using the IntelliJ IDE
Learn the basics of IntelliJ IDEA, including projects, modules, and running applications. Students practice with IntelliJ IDEA and gain experience navigating modern Java IDE workflows.
Introduce the IntelliJ IDE
The Basics of the IntelliJ interface
IntelliJ Projects and Modules
Creating and running Java applications
Tutorial: Working with IntelliJ (Community Edition)
Module 4: Writing a Simple Class
Understand the structure of a simple Java class, defining variables, creating instances, and implementing a main method. Students also learn about Java keywords, reserved words, and object references.
Write a Java class that does not explicitly extend another class
Define instance variables for a Java class
Create object instances
Primitives vs Object References
Implement a main method to create an instance of the defined class
Java keywords and reserved words
Lab: Create a Simple Class
Module 5: Adding Methods to the Class
Dive deeper into classes by writing accessor methods, constructors, and using this for clarity. This lesson also introduces annotations, deprecation, and reinforces best practices through a hands-on lab.
Write a class with accessor methods to read and write instance variables
Write a constructor to initialise an instance with data
Write a constructor that calls other constructors of the class to benefit from code reuse
Use the this keyword to distinguish local variables from instance variables
Introducing annotations
Deprecating classes and methods
Lab: Create a Class with Methods
Module 6: Object-Oriented Programming
Explore the principles of OO programming through real-world examples. Students learn how objects, classes, methods, and messages interact, building a strong conceptual foundation.
Module 7: Language Statements
Practice Java language constructs including operators, loops, and conditional logic. Special focus is placed on Switch Expressions, the yield keyword, and Pattern Matching with Primitive Types introduced in Java 25.
Arithmetic operators
Operators to increment and decrement numbers
Comparison operators
Logical operators
Return type of comparison and logical operators
Use for loops
Switch Expressions
Switch Expressions and yield
Primitive Types in Pattern Matching (instanceof and switch)
Lab: Looping (optional)
Lab: Language Statements
Lab: Switch Expressions
Module 8: Using Strings and Text Blocks
Work with the String class and related utilities, compare String, StringBuffer, and StringBuilder, and practice text handling with Text Blocks and Unicode support.
Create an instance of the String class
Test if two strings are equal
Perform a case-insensitive equality test
Contrast String, StringBuffer, and StringBuilder
Compact Strings
Text Blocks
Unicode support
Lab: Fun with Strings
Lab: Using StringBuffers and StringBuilders
Module 9: Fields and Variables
Clarify variable scope and distinguish between instance, method, and block variables. Students also learn about static and final fields, as well as default values.
Discuss Block Scoping Rules
Distinguish between instance variables and method variables within a method
Explain the difference between the terms field and variable
List the default values for instance variables
Final and Static fields and methods
Lab: Field Test
Module 10: Specialising in a Subclass
Examine inheritance by extending classes, overriding methods, and using instanceof. Students learn Pattern Matching for instanceof and explore Flexible Constructor Bodies added in Java 25 for improved subclass initialisation.
Constructing a class that extends another class
Implementing equals and toString
Writing constructors that pass initialisation data to parent constructor
Using instanceof to verify type of an object reference
Overriding subclass methods
Pattern matching for instanceof
Safely casting references to a more refined type
Flexible Constructor Bodies
Lab: Creating Subclasses
Module 11: Using Arrays
Introduce arrays, covering declaration, allocation, initialisation, and variable argument methods.
Declaring an array reference
Allocating an array
Initialising the entries in an array
Writing methods with a variable number of arguments
Lab: Creating an Array
Module 12: Records
Learn how Records serve as immutable data carriers. Students define records, write canonical and compact constructors, and build lightweight domain objects.
Module 13: Java Packages and Visibility
Understand packages, imports, accessibility levels, and modularity. This module highlights Module Import Declarations from Java 25, which simplify modular code.
Use the package keyword to define a class within a specific package
Discuss levels of accessibility/visibility
Using the import keyword to declare references to classes in a specific package
Using the standard type naming conventions
Introduce the Java Modular System
Visibility in the Java Modular System
Module Import Declarations (simplifying module dependencies)
Module 14: Utility Classes
Explore wrapper classes, autoboxing, enums, static imports, and the Date/Time API. Students practice formatting, enumerations, and text handling.
Introduce the wrapper classes
Explain Autoboxing and Unboxing
Converting String representations of primitive numbers into their primitive types
Defining Enumerations
Using static imports
Introduce the Date/Time API
LocalDate / LocalDateTime etc.
Apply text formatting
Using System.out.printf
Lab: Enumerations
Lab: TextBlocks
Lab: Working with Dates (optional)
Module 15: Inheritance and Polymorphism
Delve into polymorphism, type casting, and overriding rules. Students see how inheritance supports reusable, flexible designs.
Write a subclass with a method that overrides a method in the superclass
Group objects by their common supertype
Utilise polymorphism
Cast a supertype reference to a valid subtype reference
Use the final keyword on methods and classes to prevent overriding
Lab: Salaries - Polymorphism
Module 16: Interfaces and Abstract Classes
Contrast abstract classes and interfaces, and learn when to use each. Students implement both, gaining clarity on contracts and polymorphic design.
Define supertype contracts using abstract classes
Implement concrete classes based on abstract classes
Define supertype contracts using interfaces
Implement concrete classes based on interfaces
Explain advantage of interfaces over abstract classes
Explain advantage of abstract classes over interfaces
Lab: Interfaces
Module 17: Sealed Classes
Learn how Sealed Classes and Interfaces restrict and control inheritance hierarchies. Students also see how sealed types integrate with pattern matching.
Module 18: Pattern Matching
Explore modern Pattern Matching in Java, including switch expressions, sealed classes and record patterns.
Module 19: Introduction to Exception Handling
Cover the basics of Java's exception hierarchy, and practice writing try/catch blocks to handle runtime errors.
Introduce the Exception architecture
Defining a try/catch blocks
Checked vs Unchecked exceptions
Lab: Exceptions
Module 20: Exceptions
Deepen exception handling with custom exceptions, try-with-resources, suppressed exceptions, and enhanced null-safety features.
Defining your own application exceptions
Automatic closure of resources
Suppressed exceptions
Handling multiple exceptions in one catch
Enhanced try-with-resources
Helpful NullPointerException(s)
Lab: Exceptional
Lab: Helpful Nullpointers (optional)
Module 21: Building Java Applications
Learn the build process, standard project layout, and dependency management. Students practice with Maven.
Explain the steps involved in building applications
Define the build process
Introduce build scripts
Explain the standard folder layout
Resolving project dependencies
Tutorial: Importing code Using Maven
Module 22: Introduction to Generics
Understand the purpose of generics, parameterised types, bounded wildcards, and best practices for type-safe collections.
Explain the purpose of generics in Java
Identify the risks of using non-generic collections
Describe how to define and use generic classes
Implement generic methods in Java
Distinguish between raw types and parameterised types
Apply type parameter naming conventions in generic code
Demonstrate the use of bounded types and bounded wildcards
Lab: Working with Generics
Module 23: Introducing Lambda Expressions and Functional Interfaces
Introduce functional programming concepts in Java, focusing on lambda expressions, functional interfaces, and utility methods.
Identify the core differences between functional and object-oriented programming
Explain the purpose and structure of functional interfaces in Java
Demonstrate how to implement functional interfaces with lambda expressions
Utilise utility methods that accept functional interfaces as parameters
Optimise lambda expressions for clarity and conciseness
Use generic functional interfaces for flexible code reuse
Lab: Lambdas
Module 24: Collections
Review the Collection API, collection types, and iteration. This module includes newer collection features like Sequenced Collections.
Provide an overview of the Collection API
Review the different collection implementations (Set, List and Queue)
Explore how generics are used with collections
Examine iterators for working with collections
Sequenced Collections
Lab: Create a simple Game using Collections
Module 25: Using Collections
Apply sorting, comparators, and lambdas to collections. Students work with Sequenced Sets and practice collection manipulation.
Module 26: Streams
Shift from imperative to declarative programming using the Stream API. Students learn filtering, finding, and collecting elements effectively.
Understanding the problem with collections in Java
Thinking of program solutions in a declarative way
Use the Stream API to process collections of data
Understand the difference between intermediate and terminal stream operations
Filtering elements from a Stream
Finding element(s) within a Stream
Collecting the elements from a Stream into a List
Lab: Working with Streams
Module 27: Collectors
Practice advanced collection operations, grouping, and statistical aggregation using the Collectors utility class.
Using different ways to collect the items from a Stream
Grouping elements within a stream
Gathering statistics about numeric property of elements in a stream
Lab: Collecting