We may earn an affiliate commission when you visit our partners.
Dr. Seán Kennedy OCA, OCP

[UPDATE January 2025] - 2 OCP Certification Quizzes added. As per Oracle OCP certification tests, each quiz contains 50 questions; has a time limit of 120 mins and requires 68% to pass.  Every question is explained with a video solution and in numerous cases I delve into code to further enhance the explanation. Even if you do not intend to do a Certification exam, these solution videos present lots of valuable information and therefore, provide many excellent learning opportunities.

Read more

[UPDATE January 2025] - 2 OCP Certification Quizzes added. As per Oracle OCP certification tests, each quiz contains 50 questions; has a time limit of 120 mins and requires 68% to pass.  Every question is explained with a video solution and in numerous cases I delve into code to further enhance the explanation. Even if you do not intend to do a Certification exam, these solution videos present lots of valuable information and therefore, provide many excellent learning opportunities.

[UPDATE June 2024] - Spring Boot 3 added. I have added a Spring Boot v3 application. Topics include: configuring the application (including its dependencies); how RESTful applications work and how dependency injection and inversion of control operate. I walk through the code in detail and demonstrate it in action with Postman. An assignment is also included and I explain the solution in detail.

[UPDATE September 2023] - Java 21 added. Java 21 has now been officially released. Among its topics include the eagerly anticipated "Unnamed classes and instance main methods". In addition, other topics include sequenced collections; record patterns and pattern matching for switch.

[UPDATE April 2023] - MAJOR NEWS - this course has been selected by Udemy for inclusion in their Udemy Business program.

  • "Udemy Business is a curated (carefully chosen) selection of high-quality Udemy courses — like yours" [Udemy email]. 

  • "Only 3% of all courses are chosen for Udemy Business." [Udemy email].

Java has now 4 LTS (Long Term Support) releases: This course covers them all : it addresses advanced Java 8 programming in addition to Java 11, 17 and 21.

This course is a successor to my "Java 8 OCA (1Z0-808) Certification - Master the Fundamentals", which covers Java fundamentals in great detail. As a result, this course starts with lambdas i.e. fundamentals such as classes, interfaces, operators and methods are not in this course. It is important to realise that while familiarity with Java is helpful, certification is certainly not a pre-requisite.

This course starts with the advanced topics of Java 8 - lambdas, streams, collections, generics, concurrency etc.. There are assignments for lambdas, streams and collections.

Java 11 is then covered - LVTI, private interface methods, annotations, security and modules. Modules are examined in detail (with examples).

Java 17 is covered next - sealed classes, records, switch expressions, pattern matching and text blocks. A significant assignment covering all topics is included.

Lastly, Java 21 is covered - unnamed classes and instance main methods, record patterns, pattern matching for switch and sequenced collections. An assignment covering all topics that builds on the Java 17 assignment, is included.

All the code used throughout the course is available.

Topics are presented with both general understanding and certification in mind i.e. the course caters for both. Regarding certification, Java 8 OCP (1Z0-809), Java 11 OCP (1Z0-819) and Java 17 OCP (1Z0-829) are targeted. This course would be a great training support in conjunction with the excellent MCQ Certification tool from Enthuware (as there are no MCQ's on this course).

The theory of the topic is explained with lots of code examples used to reinforce the topic. The videos are annotated in detail to help the learner follow my explanations. Having access to the code is a great learning aid as you can get the code running and see what happens when you change it. In addition, the assignments/exercises are a great aid for learning.

Topics include:

Spring Boot Application:

  • configuring a Spring Boot application, including its dependencies

  • understanding how RESTful applications work

  • architecture overview

  • code explained in detail

  • testing the application with Postman

Java 21:

  • Unnamed classes and instance main methods

  • Record patterns

  • Pattern matching for switch

  • Sequenced collections

Java 17:

  • Sealed classes

  • Records

  • switch expressions and pattern matching

  • Text blocks

Java 11:

  • Modules

  • private interface methods

  • LVTI (local variable type inference)

  • Annotations

  • Security

Java 8 Advanced:

  • Lambda Expressions

  • Streams

  • Generics

  • Collections

  • Concurrency

  • JDBC

  • File IO

  • NIO.2

  • Serialisation

  • Localisation

2 x OCP Certification Quizzes

By way of background, I am a PhD-qualified University lecturer since 2002. For over a decade, I have taught Java on a bespoke Masters on behalf of a highly regarded software company.

I have recently co-authored two books on Java: "Learn Java with Projects" and "Java Memory Management: a comprehensive guide to garbage collection and JVM tuning". Both were co-authored with Maaike van Putten.

I love teaching and this course has all my experience in explaining advanced concepts of Java. In addition, I have a strong attention to detail which lends itself perfectly to the Oracle Java Certification exams.

Enroll now

What's inside

Learning objectives

  • Apply functional programming techniques in java i.e. lambda expressions (including method references) and streams.
  • Obtain the knowledge of many advanced java concepts such as concurrency, generics/collections, localization, jdbc and io/nio.2.
  • Master the important topics introduced java since java 8 e.g. modules, sealed classes, records, switch expressions, unnamed classes and instance main methods.
  • Acquire the skills to pass the java ocp exams.

Syllabus

Lambda Expressions
Lambdas - Introduction
Lambdas - using a custom Functional Interface (in code)
Lambdas - using Predicate (in code)
Read more
API Functional Interfaces - Predicate and BiPredicate
API Functional Interfaces - Supplier
API Functional Interfaces - Consumer and BiConsumer
API Functional Interfaces - Function and BiFunction
API Functional Interfaces - UnaryOperator and BinaryOperator
Lambdas - final and 'effectively final'
Method References
Bound Method References
Unbound Method References
Static Method References
Constructor Method References
The Importance of Context for Method References
Lambdas Assignment
Lambdas and Method References
Cloning the Repositories
Cloning Advanced Java repo
Cloning Spring Boot repos
Streams
Introduction and Stream Pipelines
Stream Laziness
Creating Streams
Terminal Operations
Terminal Operations - reduce()
Terminal Operations - collect()
Terminal Operations - collect() - Collectors.toMap()
Terminal Operations - collect() - Collectors.groupingBy()
Terminal Operations - collect() - Collectors.partitioningBy()
Intermediate Operations - filter(), distinct(), limit()
Intermediate Operations - map(), flatMap(), sorted()
Primitive Streams - Creating
Primitive Streams - API
Primitive Streams - Functional Interfaces
Primitive Streams - Mapping Streams
Code - mappingObjectStreams()
Code - mappingPrimitiveStreams()
Optionals
Parallel Streams
Streams Assignment
Collections and Generics
Collections - Introduction
Common Collection Methods in Code
List
Lists in Code
Set
Sets in Code
Maps
Maps in Code
Queue and Deque
Queue and Deque in Code
PriorityQueue
Sorting - Comparable and Comparator
Code: Comparable - Product
Code: Comparable and Comparator - Sorting Arrays and Lists - Dog
Code: Sorting by Multiple Fields
Code: TreeSet Comparable issue - how to resolve with Comparator
Code: Binary Search
Generics - Introduction
Generics - polymorphism, extends, super
Generics - super and extends (in detail)
Generic Classes and Interfaces
Generic Methods
equals()
hashCode()
Hashing in code
Watch out for mutable fields in hashing
Collections Assignment
Concurrency
Introduction
Creating Threads
sleep() and join()
ExecutorService (Introduction)
ExecutorService (code)
Submitting Task Collections (code)
Scheduling Tasks
Thread Safety - Introduction
Data Race Demo
Atomic Classes
AtomicInteger example (code)
synchronized keyword
synchronized example (code)
Lock interface
Lock example (code)
Concurrent Collections - Introduction
Concurrent Collections - API
Concurrent Collections - SkipList Collections
Concurrent Collections - CopyOnWriteCollections
Concurrent Collections - BlockingQueue
Concurrent Collections - synchronized collections
Concurrency - Threading problems - Race Condition
Concurrency - Threading problems - Deadlock
Concurrency - Threading problems - Livelock and Starvation
Localisation
Introduction and Creating locales
Localising Numbers and Currencies (Introduction)
Localising Numbers and Currencies
Localising numbers using custom formats

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Covers Java 8, 11, 17, and 21, which allows learners to stay up-to-date with the latest features and improvements in the Java ecosystem
Includes Spring Boot 3 content, which is widely used for building Java-based web applications and microservices in the industry
Addresses advanced Java 8 topics like lambdas, streams, and collections, which are essential for modern Java development
Targets Java 8 OCP (1Z0-809), Java 11 OCP (1Z0-819), and Java 17 OCP (1Z0-829) certifications, which can enhance career prospects
Requires familiarity with Java fundamentals, which means that beginners may need to take a prerequisite course first
Recommends using Enthuware's MCQ Certification tool, implying that this course does not include its own practice questions

Save this course

Save Java 21, Java 17, Java 11, Java 8 (adv.) and Spring Boot 3 to your list so you can find it easily later:
Save

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Java 21, Java 17, Java 11, Java 8 (adv.) and Spring Boot 3 with these activities:
Review Java Fundamentals
Solidify your understanding of Java fundamentals before diving into advanced topics. This will make it easier to grasp the more complex concepts covered in the course.
Show steps
  • Review basic syntax and data types.
  • Practice writing simple Java programs.
  • Study object-oriented programming principles.
Review 'Effective Java'
Improve your Java coding skills by studying industry best practices. This book provides a wealth of knowledge on how to write effective and efficient Java code.
Show steps
  • Read and understand the key principles in the book.
  • Apply the principles to your own Java projects.
Practice Lambda Expressions and Streams
Reinforce your understanding of lambda expressions and streams through practice exercises. This will help you become more comfortable using these powerful features of Java 8 and later.
Show steps
  • Solve coding challenges involving lambda expressions.
  • Implement stream pipelines to process data.
  • Experiment with different stream operations.
Four other activities
Expand to see all activities and additional details
Show all seven activities
Write a Blog Post on Java Modules
Deepen your understanding of Java modules by writing a blog post explaining their benefits and usage. This will force you to organize your thoughts and communicate your knowledge effectively.
Show steps
  • Research Java modules and their purpose.
  • Outline the key concepts and benefits of modules.
  • Write a clear and concise blog post with code examples.
  • Publish the blog post on a platform like Medium or your own website.
Build a Simple REST API with Spring Boot
Gain hands-on experience with Spring Boot by building a REST API. This will help you understand how to configure a Spring Boot application, handle REST requests, and use dependency injection.
Show steps
  • Set up a Spring Boot project with necessary dependencies.
  • Define REST endpoints and request mappings.
  • Implement business logic and data persistence.
  • Test the API using Postman or a similar tool.
Review 'Java Concurrency in Practice'
Master Java concurrency by studying this classic book. This book provides in-depth coverage of concurrency concepts and techniques.
Show steps
  • Read and understand the core concepts of concurrency.
  • Study the different concurrency tools and techniques.
  • Apply the concepts to your own concurrent Java programs.
Contribute to a Java Open Source Project
Apply your Java skills by contributing to an open-source project. This will give you valuable experience working on real-world code and collaborating with other developers.
Show steps
  • Find a Java open-source project that interests you.
  • Study the project's codebase and contribution guidelines.
  • Identify a bug or feature to work on.
  • Submit a pull request with your changes.

Career center

Learners who complete Java 21, Java 17, Java 11, Java 8 (adv.) and Spring Boot 3 will develop knowledge and skills that may be useful to these careers:
Java Developer
A Java developer specializes in building applications using the Java programming language. This course directly supports a Java developer by providing deep dives into advanced Java features across multiple versions, including Java 8, 11, 17, and 21. A Java developer will gain practical skills in functional programming with lambda expressions and streams, along with the knowledge of generics, concurrency, modules, and newer language constructs. This course will help by offering hands-on assignments, practical code examples, and certification quizzes that help a Java developer to develop expertise in Java development.
Software Engineer
A software engineer develops, tests, and maintains software applications. This course helps a software engineer by covering advanced Java concepts, including lambdas, streams, collections, generics, concurrency, modules, records, and pattern matching. A software engineer can leverage this knowledge to build robust, modern applications. The course's focus on Java 8, 11, 17, and 21 ensures that the software engineer is up-to-date with the latest features and best practices. The course also provides practical assignments and code examples which are useful for real-world situations, enhancing the software engineer's ability to tackle complex projects.
Software Development Engineer
A software development engineer is involved in the entire software development lifecycle, from design to deployment. This course helps a software development engineer significantly by providing in-depth knowledge of advanced Java features including lambdas, streams, collections, generics, and concurrency, which are very important to build high-quality software. The course's inclusion of Java 8, 11, 17, and 21 topics ensures the software development engineer is equipped with the most up-to-date skills and best practices. The practical assignments and certification quizzes reinforce these concepts and prepare the software development engineer for real world scenarios.
Application Developer
An application developer designs and builds software applications for various platforms. This course may be useful to an application developer by covering advanced Java concepts such as lambdas, streams, and concurrency. The course will provide an application developer with the knowledge needed to build scalable and efficient applications with the most current features of the Java language. The assignments and the code examples will give an application developer practical experience in using advanced Java features making this course well suited for an aspiring application developer.
Backend Developer
A backend developer focuses on the server-side logic and databases that power applications. This course may be useful by helping a backend developer to master advanced Java features like concurrency, modules, and file I/O. This course will help the backend developer to learn how to build robust and efficient server-side applications and also provide an introduction to RESTful Web services with Spring Boot 3. The breadth of topics, from advanced Java 8 to Java 21, equip a backend developer with the skills to handle modern development challenges. The assignments also allow a backend developer to practice and explore advanced Java concepts.
Full-Stack Developer
A full stack developer works on both the front-end and back-end of a software application. This course helps the full stack developer by providing them with comprehensive knowledge of Java, which is frequently used in back-end development. A full stack developer can use the course's coverage of Lambdas, Streams, Generics, Concurrency, and Spring Boot to develop more robust server-side application logic. The inclusion of topics from Java 8 to Java 21 ensures the full stack developer is acquainted with the latest features and best practices in Java development. The practical assignments and examples help the full stack developer to build practical experience across multiple versions.
Technical Lead
A technical lead manages and guides a team of developers, setting technical direction for projects. This course may be useful to a technical lead by helping them to stay current with the latest versions of Java. A technical lead can use the course’s materials on lambdas, concurrency, and modules to make informed decisions regarding their projects. The course's inclusion of advanced topics from Java 8 to Java 21 provides a technical lead with the latest expertise in the Java ecosystem. This knowledge enables them to lead their team more effectively and make better technical judgments.
Cloud Engineer
A cloud engineer designs, implements, and manages cloud-based systems. This course may be useful to a cloud engineer by providing them with a strong foundation in Java, a language widely used in cloud environments. A cloud engineer will find value in the course's coverage of Spring Boot 3, which enhances their ability to configure and deploy applications in a cloud native way. In addition, the concurrency and module features covered in this course help cloud engineers to understand the nature of scalable systems.
Test Engineer
A test engineer designs and executes tests to ensure software quality. This course helps a test engineer by giving them an understanding of advanced Java concepts as they might need to write automated tests in Java. A test engineer can use the course's coverage of lambda expressions, stream, concurrency, and other advanced Java concepts to write more robust and efficient test cases. Knowing the intricacies of Java 8,11,17 and 21 ensures that test engineers can align their automated tests with the latest programming paradigms.
System Architect
A system architect designs the structure and components of complex software systems. This course may be useful to a system architect by offering advanced understanding of Java's capabilities. A system architect can leverage the course to learn the details of the latest versions of Java, including Java 21. The sections on concurrency and module features will help an architect to design scalable, robust and maintainable systems. Familiarity with the latest Java features can also give better informed architectural decisions.
Solutions Architect
A solutions architect designs software solutions to meet specific business needs, focusing on integration and scalability. This course may be useful to a solutions architect by providing them with an understanding of the capabilities of Java. A solutions architect can utilize the advanced concepts of lambda expressions, streams, and concurrency as well as new Java features like modules, records, and pattern matching that are covered by the course. This gives a solutions architect the knowledge to make informed decisions about which Java features to use in the design and implementation of software solutions.
Database Developer
A database developer designs, implements, and manages databases. While this course focuses on Java programming, it helps a database developer by providing knowledge of JDBC and Java's interaction with databases. A database developer can use the course's section on JDBC to understand how Java applications interact with databases and also use the knowledge of concurrency to develop database applications that are robust and highly performant. The course helps in providing a broader understanding of the Java ecosystem and its relevance in data management.
Mobile Application Developer
A mobile application developer builds applications for mobile devices. This course may be useful to a mobile application developer by helping them learn Java for server-side development or for Android development. A mobile application developer can use the course's coverage of Java 8, 11, 17 and 21 to create efficient and reliable mobile backend systems or use the knowledge of Java to build applications for Android. This course may enhance the skills for the back end or give a greater understanding of Android development.
Embedded Systems Engineer
An embedded systems engineer designs and develops software for embedded devices. This course may be useful to an embedded systems engineer because they may use Java for certain embedded applications. An embedded systems engineer will benefit from understanding concurrency and memory management in Java which can be useful in embedded systems development. The course may serve as a secondary skill to support such applications. This gives the embedded systems engineer more complete expertise in the software aspects of embedded applications.
Research Scientist
A research scientist conducts research and develops new technologies in various fields. This course may be useful to a research scientist who needs to use Java for data analysis, simulation, or other scientific computing tasks. The course's coverage of concurrency and advanced Java features can help a research scientist utilize Java in high-performance computing and data processing applications. This knowledge may allow the research scientist to explore computational solutions within the Java ecosystem.

Reading list

We've selected two books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Java 21, Java 17, Java 11, Java 8 (adv.) and Spring Boot 3.
Provides invaluable insights into best practices for Java programming. It covers a wide range of topics relevant to the course, including generics, collections, concurrency, and more. Reading this book will help you write more robust, maintainable, and efficient Java code. It is commonly used as a reference by industry professionals.
Comprehensive guide to Java concurrency. It covers topics such as threads, locks, atomic variables, and concurrent collections. Reading this book will help you write thread-safe and performant Java code. It is commonly used as a reference by industry professionals.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Similar courses are unavailable at this time. Please try again later.
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2025 OpenCourser