About the course
Mastering modern Java is fundamental for building the robust and efficient applications needed in today's technology landscape. This comprehensive Java training course is meticulously designed to provide you with the core language skills and contemporary programming techniques required to develop professional, commercial-quality Java applications.
Starting with the foundational syntax, data types, and control structures, you will rapidly move on to mastering Object-Oriented Programming principles, including classes, objects, inheritance, interfaces, and abstract classes. The course then delves into essential modern Java features such as Records, Sealed Types, the Java Module System (JPMS), and the powerful concepts of functional programming, including Lambdas and the Streams API.
Learning is reinforced through extensive hands-on exercises integrated throughout the course, ensuring you gain practical experience with every topic. You will work effectively with the Collections Framework, handle errors and exceptions gracefully, understand file I/O, and be introduced to crucial development practices like using build tools and writing unit tests.
Guided by an expert Java instructor, you will gain the practical skills and confidence to apply these techniques to real-world development scenarios, enabling you to write cleaner, more efficient, and maintainable Java code for commercial applications.
Instructor-led online and in-house face-to-face options are available - as part of a wider customised training programme, or as a standalone workshop, on-site at your offices or at one of many flexible meeting spaces in the UK and around the World.
-
- Write clean, efficient Java code using modern language features and syntax.
- Apply Object-Oriented Programming (OOP) principles to design and structure Java applications effectively.
- Utilise functional programming constructs, including Lambdas and the Streams API.
- Work effectively with the Java Collections Framework and modern data structures like Records.
- Design and build applications using the Java Platform Module System (JPMS).
- Implement robust error handling and exception management in your code.
- Use build tools such as Maven or Gradle for project management and dependency handling.
- Write and execute basic unit tests using JUnit to ensure code quality.
- Build maintainable and well-structured Java applications suitable for real-world scenarios.
-
This course is designed for anyone looking to build a strong foundation in modern Java programming. It is ideal for:
Individuals who are new to programming and wish to start with Java.
Developers experienced in other programming languages who want to learn Java.
Existing Java developers seeking to refresh their core skills and get up to speed with modern Java features.
Those preparing for further specialisation in areas like enterprise development, mobile applications, or data science using Java.
-
Delegates will ideally have some previous programming experience in another language such as Python, JavaScript, Perl, PHP, C# or C++. No previous Object-Oriented Programming is assumed but would certainly be helpful.
Please let us know if you have any questions about getting started with Java - we can customise the training to match your team's experience and needs - with more time and coverage of fundamentals for new developers, or a swifter pace for experienced coders.
-
This Java course is available for private / custom delivery for your team - as an in-house face-to-face workshop at your location of choice, or as online instructor-led training via MS Teams (or your own preferred platform).
Get in touch to find out how we can deliver tailored training which focuses on your project requirements and learning goals.
-
Java Overview
Current Release Plan and Recent History (LTS releases: Java 11, 17, 21, etc., and the release cadence)
How the Java Environment Works (JVM, JRE, JDK)
HelloWorld Program
Launch Single-File Source Code (Java 11+)
jShell REPL (Java 9+)
Comments and Terminators
Identifiers
Syntax, Types, and Operators
Java Variables and Data Types (Primitive and Reference Types)
var declarations (Local-Variable Type Inference - Java 10+)
Text Blocks (Java 15+)
String interpolation / String Templates (Preview/Incubating in recent versions - mention current status)
Numerical Operators and Casting
Conditional Expressions and Logical Operators
Control Flow Statements (if, while, do-while, for)
Special flow of control operators (break, continue)
The switch statement (Traditional and Updated switch expressions/statements - Java 14+)
Pattern Matching for instanceof (Java 14+)
Pattern Matching in switch statements (Java 17+)
Classes and Objects
What is an Object? Objects and Encapsulation
What is a Class? Class-Object Relationship
Defining Classes and Instance Variables
Constructors (Defining and Overloading)
Working with Objects
The toString() method
Adding behaviour with Methods
Static Members (Class Side Data and Behaviour)
The final Keyword
Working with Methods
Method Definitions, Arguments, and Return Types
Overloading Methods
Method Invocations
Constructors Versus Methods (Revisited)
Method References (Revisited in Functional Programming context)
Class Inheritance
Inheritance in Java
Implementing Inheritance (extends)
Rules for Overriding Methods (@Override)
Rules for Polymorphic Variables
Casting and Inheritance
The super Keyword
Constructors and Inheritance
Abstract Classes, Interfaces, and Sealed Types
Abstract Classes (Defining, Extending, Using)
Java Interfaces (Basic Definitions, Implementing, Default and Static Methods - Java 8+)
Using Interfaces as Contracts
Inheritance by Interfaces and Types (Multiple Interface Inheritance)
Sealed Types (Classes and Interfaces - Java 15+)
Purpose of sealed types, defining and extending/implementing sealed types.
Constraints on sealed subclasses, subclasses in the same file, records as subclasses.
Records
Traditional Class Definition vs. Record Version (Java 14+)
Defining Record Classes
Instantiating Records
Automatic methods (equals(), hashCode(), toString(), accessors)
Overriding auto-generated methods
Adding static data and behaviour to Records
Other features of Records (Annotations, Local Records - Java 16+)
Packages and Modules
Packages (Declaring, Class-Package Relationship, Classpath, JAR Files)
Encapsulation and Access Modifiers (Class, Constructor, Variable, Method modifiers)
Introduction to the Java Platform Module System (JPMS - Java 9+)
Why we need modules, looking at what modules are
How to define a module (module-info.java)
Creating single and multiple module applications
Linking Modules
Arrays and the Collections Framework
What is a Java Array? Creating and Accessing Arrays
main method args array
Ragged Arrays
Implications of Inheritance for Arrays
The Collections API Overview
Key Collection Interfaces and Classes (List, Set, Map, ArrayList, HashMap, etc.)
Iteration and Enumeration
Generics and Collections (Adding Generics to classes, Type Equality, Generic Collection Assignment, Generics and Inheritance with Collections)
For Loops (Enhanced for loop)
Boxing and Unboxing (Autoboxing/Unboxing)
Raw Collections (Why to avoid them)
Java 9+ Immutable Collections (Factory methods List.of(), Set.of(), Map.of(), etc.)
Error and Exception Handling
Errors & Exceptions Overview
Exception types in Java (Checked, Unchecked, Errors)
The Exception Hierarchy
Exception Handling (try, catch, finally)
Local Handling and Passing the Buck
Try-with-Resources (Java 7+)
Defining New Exceptions
Chained Exceptions
Nested and Inner Classes
Four types of Nested/Inner Classes
Properties of Member-level, Method-local, Anonymous, and Static Nested Classes
Java 11 Nest-based Access
Functional Programming in Java
Functional Programming Concepts
Functional Interfaces (@FunctionalInterface)
Using Built-in Functional Interfaces (Predicate, Consumer, Supplier, Function)
Lambdas in Java (Syntax, Using Lambdas)
Closing / Capturing Variables (Closures)
Returning Functions, Higher-Order Functions
Method References
The Java Optional Type
The Problem with Null (NullPointerException)
Introduction to the Optional Type (Java 8+)
Creating Optional Values
Working with Optional (Checking presence, Getting values, Providing defaults, Chaining operations)
Method Summary
Java Streams API
What are Streams? (Java 8+)
Streams from Collections and other sources
Intermediate vs. Terminal Operations
Common Intermediate Operations (map, filter, sorted, distinct, peek, limit, skip)
Common Terminal Operations (forEach, collect, reduce, count, min, max, anyMatch, allMatch, noneMatch, findFirst, findAny)
Using Collectors (toList, toSet, toMap, groupingBy, partitioningBy)
Pipelining Stream Operations
Parallel Streams (Introduction and considerations)
Streams for I/O operations (Files.lines())
Files, Paths, and I/O Streams
Introduction to NIO.2 (Java 7+)
The Path Interface and Paths Class
The Files Class (Working with files and directories)
File Attributes
The File Watcher Service (Monitoring directory changes)
Traditional I/O Streams (Input Streams, Output Streams, Readers, Writers)
Using Scanner for input
Introduction to Build Tools
Why use a build tool? (Dependency Management, Building, Testing, Packaging)
Overview of Apache Maven and Gradle
Setting up a simple project with Maven or Gradle
Managing dependencies
Introduction to Unit Testing
The importance of Unit Testing
Introduction to JUnit (Using JUnit 5)
Writing and running simple test methods
Assertions
-
Get the latest OpenJDK - https://openjdk.org/install/
Get the Oracle Java JDK - https://www.oracle.com/java/technologies/downloads/
Popular Java IDE (IntelliJ IDEA) - https://www.jetbrains.com/idea/
Popular Development Environment (Eclipse IDE) - https://www.eclipse.org/downloads/
Official Java SE Documentation (Java API, Tutorials) - https://docs.oracle.com/en/java/javase/index.html
Download Apache Maven (a common build tool) - https://maven.apache.org/download.cgi
Install Gradle (another popular build tool) - https://gradle.org/install/
Trusted by