
Tim Buchalka welcomes you to the Java SE 11 1Z0-819 OCP Part 2 course, covering the single exam format, Oracle exam nuances, and essential Java 11 material.
Master the Java 1Z0-819 exam with code samples and slides, exploring official Oracle topics and iterating code to reveal nuances and strategies.
Focus on Java 11 as the Oracle LTS and the basis for the 1Z0-819 exam, and choose a reputable JDK 11 to stay supported.
Explain which course parts you need for the 1Z0-819 exam. Part 1 covers essentials, part 2 covers advanced topics, and together they prepare you to pass the single new exam.
Demystify Oracle's Java exam codes, focusing on the 10Z-819 / 1Z0-819 for Java 11, including 50 questions in 90 minutes and a 68% pass, plus upgrade to 1Z0-817.
Choose a JDK 11 from Oracle, Amazon Corretto, Red Hat, AdoptOpenJDK, or other vendors. Prefer Amazon Corretto JDK 11 for easy download, no registration, and long-term free support.
Choose your Java IDE with a recommendation for IntelliJ IDEA Community Edition, free to download, noting other IDEs that support Java and JDK 11 and command line differences.
Explore advanced Java fundamentals aligned with the 1Z0-819 exam, covering final classes, nested and anonymous classes, and the enum type.
Explore the valid modifiers for the class, interface, and enum reference types, including access modifiers, abstract, static, final, and strictfp, and learn top-level constraints and common compiler errors.
Master the final modifier in class definitions by exploring final classes and final methods through practical Java examples, including overriding behavior and compiler errors in a hands-on IntelliJ project.
Explore the behavior of abstract classes versus final classes in Java by adding code to demonstrate instantiation, subclassing, and method overriding, including final methods and final classes.
Explore how abstract and final modifiers oppose each other, why final classes cannot be subclassed, and why final methods have bodies, with private constructors and the singleton pattern.
Explore how java defines nested classes, including static nested classes and inner classes, with examples of static and instance members, local and anonymous inner classes, and practical code scenarios.
Explain how static nested classes in Java cannot reference enclosing instance members, forcing access to instance members through nested class instance, while static members remain accessible in a static context.
Explains how to instantiate and use a non-static inner member class in a Java enclosing class, showing access through an enclosing instance, constructors, and inner methods.
Explore how to add a field to the enclosing class, access it via the inner class, resolve shadowing with EnclosingClass.this, and note enums and interfaces can't be in inner classes.
Explore local variable shadowing in inner member classes, compare static nested and inner classes, and learn how to instantiate and access enclosing class members.
Discover how local classes in Java are declared within a block or method, access enclosing class attributes including private ones, and use effectively final locals, with no static members.
Explore creating local classes inside static methods and anonymous inner classes, demonstrating how local classes can extend abstract classes and implement interfaces, while noting their limitations and syntax.
Explore how anonymous classes interact with abstract classes and interfaces, extend any class, and use local, inner, and static nested types to improve encapsulation, readability, and maintainability.
Learn how to create and use Java enums with days of the week, including constants, values and ordinal methods, and a switch example.
Explore enums as classes by adding fields, constructors, and methods to weekdays; see how different constructors populate attributes and how enum constants can invoke a method in main.
Explore how enum constants can have class bodies that define anonymous classes extending the enum, and see how abstract methods, overrides, and describe logic apply to Pinochle meld.
Explore effectively final local variables used by local and anonymous classes. Understand enum compilation, initialization order, and how enums implement interfaces in Java.
Learn advanced exception handling and assertions in Java SE 11, building on 1Z0-819 part 1 concepts. Use try-with-resources, custom exception classes, and assertions to test invariants and prepare for exam.
Compare legacy finally blocks with the Java SE 7 try-with-resources construct and show auto closable resources that close in reverse order.
Design and implement custom exception classes in Java by using constructors from Throwable, and differentiate checked versus unchecked exceptions to guide usage and handling.
Develop custom checked and unchecked exceptions in Java SE 11, implementing custom throwable and custom exception classes, and exploring catch/specifier, throws clauses, and exception chaining with stack traces.
Explore testing program invariants with Java assertions, including enabled and disabled modes, assertion forms with messages, overflow handling, and how assertions document assumptions.
Explore when to use Java assertions for internal, control-flow, precondition (non-public), postcondition, and class invariants; learn best practices, including avoiding public parameter checks and enabling -ea to test invariant logic.
Explore advanced assertion techniques and handling assertions in Java SE 11, including postconditions, else blocks, and using -ea and -da to enable or disable assertions by class or package.
Explore suppressed exceptions and advanced try-with-resources scenarios, inspecting close methods, nested resources, and capturing suppressed errors from Java 8 to 9.
Explore interfaces with a focus on default methods from JDK 8 and private methods from JDK 9, and master the rules governing interface members for the 10Z-819 exam.
Explore how default methods enable evolving interfaces in Java 8, with examples of a Defaultable interface, abstract methods, and defaultNotAbstractMethod, plus how superclass methods take precedence over interface defaults.
Examine how the JVM prioritizes default methods and resolves conflicts across interfaces, including using a specific interface's super method to select getGait. Note Java 9 introduced private interface methods.
Learn how private methods in Java interfaces (JDK 9) encapsulate reusable logic without exposing public nested classes. Compare this approach with default and static methods to simplify interface design.
Explore how default, private, and static interface methods interact, including static context calls, class and interface qualifiers, and the limits on invoking default or non-static methods.
Identify and resolve interface method conflicts with default methods, including prohibitions on overriding Object methods like toString, equals, and hashCode, and understand class versus interface method precedence.
Demonstrate interface method override rules, including private and static vs default methods, and mastery of method selection when multiple interfaces clash.
Explore generics and collections in Java, covering lists, linked lists, queues, sets and maps, and compare and sort elements with Comparator, Comparable, and the Collections class.
Explore primitive wrapper classes, autoboxing, and unboxing in Java, including how null wrappers cause exceptions and how valueOf replaces deprecated constructors.
Examine common methods of primitive wrappers in Java, including compare, valueOf, parse and equals, with code demonstrations and tests showing behavior for nulls, radix, and type-specific nuances.
Explore advanced wrapper class methods and operator interactions in Java, including value retrieval, parsing, equals behavior, compare methods, autoboxing limits, and system property lookups.
Discover how generics enable type abstraction in Java by using generic classes and methods with type parameters, and learn how wildcards provide flexible use for different types.
Explore creating and using generic classes, understand type parameters, type arguments, and the diamond operator, and learn about type inference, raw types, and compile-time errors.
Explore restrictions on generic classes, including not extending Throwable, static type-parameter usage, and invalid type arguments. Learn how upper bounds like T extends Exception guide safe generics.
Explore bounded and unbounded generics, upper bounds with number and comparable, and how type erasure translates generic code into bytecode, highlighting common compile errors and design considerations.
Master generic methods by declaring method-level type parameters, exploring their scope, and learning to invoke them with explicit arguments or type inference in static and non-static contexts.
Explore combining generic class type parameters with generic methods to enforce type relationships, using upper-bounded and unbounded parameters, and apply to constructors and methods with lists and comparable types.
Learn how Java generics wildcards enable unbounded, upper-bounded, and lower-bounded type arguments, with practical guidance on where they work and where they cannot be used.
Explore practical use cases and limitations of generics wildcards in Java, including upper and lower bounds, unbounded wildcards, and the effects of type erasure on compilation.
Explore inheritance with generics and type parameters, clarifying why a generic list of integers is not a subtype of a list of numbers. Learn how wildcards enable safe cross-type use.
Explore advanced generic concepts by examining hiding type parameters and erasure, constructor overloading, and diamond notation in a generics-heavy example, highlighting standard naming conventions and type inference.
Explore the Java collections framework core interfaces, including list, map, set, queue, and deque, and understand their ordering, duplicates and null handling, and access methods.
Explore the collection interface methods and set implementations, including contains, isEmpty, contains all, add all, remove all, retain all, and clear, and examine HashSet, TreeSet, and LinkedHashSet.
Examine hashset, treeset, and linkedhashset by running tests that add, remove, and check elements, including nulls and duplicates, and compare ordering and equality across implementations.
Investigate null handling and set behavior, including equality with nulls, comparing HashSet and LinkedHashSet with and without nulls, and explore TreeSet's navigable methods: lower, floor, higher, and ceiling.
Explore the list interface in Java collections, its ordered, zero-based index access, support for duplicates and nulls, and key operations like add, get, set, and subList.
Explore practical and advanced usage of the list interface with array lists, covering add, addAll, set, indexOf, lastIndexOf, subList, reverse order, and immutable lists via copyOf and of.
Explore Java queues and deques, explain first-in, first-out and double-ended access, and review core methods such as add, offer, element, peek, remove, poll, push, and pop.
Master the map interface in Java collections, handling keys and values, nulls, and common operations like compute, merge, replaceAll, and computeIfAbsent/Present across HashMap, TreeMap, and LinkedHashMap.
Master advanced map operations in Java, including merge semantics, replaceAll, and compute-based updates. Leverage Map.of, Map.ofEntries, Map.copyOf, and entrySet, keySet, values views, while managing immutable versus mutable maps.
Explore uncommon scenarios in the collections framework by examining views backed by source collections, including subList behavior with arrays and ArrayList, and how modifications may trigger an UnsupportedOperationException.
Explore comparable and comparator interfaces to define natural and custom sorting in Java, using compareTo, TreeSet, and key-extractor comparators to sort by various criteria.
Sort lists and arrays with reverseorder and naturalorder, and use a last-name comparator to order by surname. Handle nulls with nullsFirst or nullsLast and build comparators via the comparing method.
Explore the java.util.Collections methods for data manipulation and creating unmodifiable or singleton collections. See examples of sort, shuffle, min, max, and copy operations, and how immutable lists trigger an exception.
Explore how tree set sorts by natural ordering with comparable or by a constructor-parsed comparator, such as sorting by id ascending or value descending.
Explore wrappers and generics, showing how primitive literals autoboxed to wrappers, why lists with raw types break type safety, and how upper and lower bounds affect adding elements.
Explores generics and wild cards, demonstrating upper and lower bounds in a generic container and how extends and super affect add/get operations and compiler behavior.
Explore functional interfaces and lambda expressions in Java SE 11, including compact lambdas, statement lambdas, SAM concept, and local variables for lambda parameters.
Explore functional interfaces in Java: one abstract method, how to use lambdas and anonymous classes, and the impact of default methods and inheritance on functional behavior.
Explore how to create and use lambda expressions in Java, leveraging functional interfaces, lambda syntax, parameters, the arrow notation, and scope rules with practical examples.
Explore functional interfaces and lambda use by examining Functionable with three abstract methods and a default method in Confuseable, noting how extends Comparator influences functional interface status.
Explore the core functional interfaces in the java.util.function package, including Consumer, Function, Operator, Predicate, and Supplier. Learn their methods accept, apply, test, and get, and how they support exam objectives.
Explore unary operator and binary operator in java.util.function through lambda examples, highlighting their extension of Function and BiFunction and their compose and then methods, including maxBy and minBy with comparator.
Explore the built-in java.util.function predicate interface for boolean-valued tests, including the test method, generic typing, short-circuiting with and/or chaining, and utilities like isEqual and not.
Explore the Function and BiFunction interfaces, using lambdas to transform data, chain operations with compose and andThen, and compare generic and non-generic forms across UnaryOperator, BinaryOperator, and Predicate.
Explore specialized primitive interfaces for double and int in Java, including DoubleUnaryOperator and IntUnaryOperator. Learn how methods like applyAsDouble and getAsInt differ from their generic counterparts.
Explore built-in interfaces such as Consumer, BiFunction, Predicate, Supplier, and UnaryOperator, using lambdas and method references. Learn about overloading ambiguities, casting, and how to choose appropriate functional interfaces in Java.
Explore andThen and compose default methods across functional interfaces in Java, focusing on Function and UnaryOperator, and Consumer, BiFunction, and BinaryOperator; learn lazy invocation, re-assignment, and method chaining.
Explore how Java streams act like a query language for data in collections, chaining filters, sorts, and transforms into a pipeline that ends with collect.
Explore the java.util.stream.Stream interface, creating streams (including primitive streams) and forming pipelines with intermediate and terminal operations such as forEach, collect, and limit.
Learn how Java stream pipelines work, with sources and terminal operations, lazy intermediate operations, stateless and stateful forms, and short-circuiting on infinite streams.
Explore how lambda expressions and method references integrate with Java streams, mapping functional interfaces to stream methods like map, reduce, filter, and takeWhile. Learn about signature rules and practical examples.
Explore four types of method references—static, instance on an object, instance on an arbitrary object, and constructor references—and learn how to use them with streams and functional interfaces, including common mistakes like signature mismatches.
Demystify the stream builder, its mutability and life cycle, and how proper typing and compile-time checks prevent runtime errors like class cast and illegal state in builder vs stream.
Explore Stream.concat, a lazily concatenated stream merging two input streams, preserving order or parallelism, with close handlers and per-source intermediate operations, plus common errors such as illegal state.
Explore lambda operations on streams, including map, flatMap, reduce, and collectors like groupBy and partitioningBy, powered by interfaces such as BinaryOperator and Predicate.
Explore stream element manipulation in Java SE 11 with peek for debugging and map for transforming data, noting how terminal operations trigger execution.
Explore mapToDouble, mapToInt, and mapToLong for primitive streams, compare them with map, and uncover flatMap's one-to-many transformations, plus using peek to inspect the pipeline.
Explore how the java.util.Optional class handles null and not applicable values, using empty, of, and ofNullable to wrap GPA cases and avoid null pointers.
Explore optional class methods such as ifPresent, orElse, orElseGet, and orElseThrow, illustrated with GPA examples and stream terminal methods findAny, findFirst, anyMatch, allMatch, and nonMatch.
Explore how stream terminal operations such as findAny, findFirst, anyMatch, allMatch, and noneMatch search stream data, handle empty streams with Optional, and contrast with filter, including short-circuiting and real-world examples.
Master stream reduction operations in Java, including count, max, min, sum, and average, with Optional handling and orElse for empty results. Learn to safely apply these reductions to finite streams.
Learn to perform reductions on IntStream, LongStream, and DoubleStream using reduce with BinaryOperator, compute sum, min, max, and average, and use range, rangeClosed, and summaryStatistics.
Sort streams using the no-arg or comparator-based sort, applying natural order, lambdas, or method references to sort by last name or first name.
Discover how Java streams use collectors for collect and reduce operations, transforming data into lists, maps, and other containers, with grouping, partitioning, and averaging.
Use collectors.groupingBy and partitioningBy to compute counts and averages by state and type. Create multi-attribute keys, nested maps, and sorted outputs with tree maps in streams.
Explore how Collectors.groupingBy and Collectors.toMap differ in Java streams, showing one-to-many versus one-to-one mappings, and how duplicates are handled via equals, hashCode, and distinct.
Explore sorting stream results with TreeMap in groupingBy and toMap overloads using TreeMap::new and a supplier, plus flatMap for flattening lists of pets into a type-based map, and Collectors.toList.
Explore migrating pre-Java 9 code to the module system, top-down migration, splitting a Java SE 8 app into modules, and using jdeps to resolve dependencies on classpath and modulepath.
Migrate Java applications to modules by leveraging the modular JDK, classpath, and module path interoperability, and using bottom up or top down approaches to convert jars to modular jars.
Learn to build a pre-module Java application with core, entity, service, and api modules, migrate to a modular design, and package jars with a manifest for classpath and modulepath.
Master the top-down java module migration by converting legacy sample.core to a sample.api module, enabling automatic modules, adding module-info.java and dependencies, and running on the module path.
Use jdeps to analyze jar dependencies and module path before migration to Java 11, highlighting illegal internal APIs, split packages, and dependency cycles.
Becoming Java certified is a great way to help improve your career options with more job opportunities and more pay.
That's because Oracle's Java certification program, unlike many other certifications out there, has real value in the industry. One of the main reasons is that it's an official Oracle certification, but second, the exam is quite difficult to pass.
Employers see programmers who are Java certified as more valuable than programmers who are not certified. So it's totally worth getting Java certified to take advantage of this.
This course has been designed to pass on the exact knowledge you need to pass Oracle's 1Z0-819 exam.
So what exam does this course cover?
This course focuses on the Java SE 11, 1Z0-819 exam, from Oracle. It's Part 2 of a 2-course series. It's highly recommended that you complete Part 1 of my 1Z0-819 exam course first, before completing this one.
Oracle helpfully publishes the complete list of topics that questions in the exam come from. I've taken extreme care to ensure that a full 100% of the material you need to know, in order to pass the exam is covered in either this course or Part 1.
I won't waste your time on any Java features that are not going to come up as a question on the exam.
Why Get Certified in Java 11, aren't there newer versions available?
Java 11 is designated as the LTS or Long Term Support version of Java - it's going to be supported by Oracle and JDK vendors until at least 2026, unlike Java 9, Java 10, 12, 13, 14, 15, etc all of which are no longer supported by Oracle.
Large companies have large codebases, and it takes them a long time to upgrade that code to new versions of Java - for years Java 8 was the main version used by companies, and with the release of Java 11, and Oracle's commitment to supporting it for many years as well as them designating it as the long term support version, this means that the majority of the industry will be moving, or already have moved to Java 11. Particularly now that Java 8 support is ending soon.
Oracle does not have a certification program for Java 9, 10, 12, or Java 13, etc. This is by design. Because Java 11 is Oracle's long term supported version of Java. For this reason, Java 11 is the version of Java you need to become certified in. And this course will help you achieve that.
What's the difference between this course and your Part 1 1Z0-819 exam course?
Firstly, the courses have completely different content, there is pretty much no overlap of content in the two courses. Think of Part 1 as the "Core Java" concepts, and this course, the "Part 2" as the "Advanced" content. Both courses are targeted for the 1Z0-819 exam and help you to pass it.
Why are there two courses for the 1Z0-819 exam?
In October 2020, Oracle decided to move from their old exams, the 1Z0-815 and 1Z0-816 to a single exam, the 1Z0-819.
The thing is, the 1Z0-819 exam, still targets the exact same topics that were in the old 1Z0-815 and 1Z0-816 exams, minus a few topics that have removed.
Previously you needed to pass both exams to get Java certified. Now, you only need to pass the 1Z0-819 exam. So that's a bonus for you.
My "Part 1" course originally targeted the 1Z0-815 exam, and this course was originally going to target the 1Z0-816 exam. What I've done now is updated and renamed both courses, and ensured they are both targeting the material you need to pass the new 1Z0-819.
Hopefully, that makes sense as to why you need to take two courses.
Do I really need to take a "Java exam course" to pass the exam?
Being completely upfront, it is possible to pass the exam without studying a specific exam course like this one. But it's not easy. Keep in mind that the exam does not just test your knowledge of Java, but actively tries to trip you up by asking questions that sometimes use obscure, rarely used syntax that you may never have come across before. The sorts of things that most Java courses or textbooks will never teach you.
This course shows you all the standard Java stuff you need to know, as well as this more obscure stuff to ensure you really are ready to pass the exam.
Who is this course suitable for?
If you have been through at least some of my Java Masterclass on Udemy, or another Java course and/or have some professional programming experience in Java or another programming language then this course is for you. But note, that it's a prerequisite that you have taken my 1Z0-819 Part 1 course on Udemy before attempting this one.
This course is definitely NOT for beginner programmers. If you are a beginner, you will struggle with this course. In that case, grab my Java Masterclass and go through all or a significant amount of that course, and then my 1Z0-819 Part 1 course, before attempting this course.
You don't teach Java in this course?
That's right, I don't teach you Java as such. The course assumes you know Java, and are looking for the knowledge to pass the exam. It's a subtle but important distinction.
And remember, the course only focuses on topics that may come up as a question in the 1Z0-819 exam.
Yes, you will learn a ton of new things by going through this course. But I do assume you know Java, and won't waste your time by having you watch me type in code.
Rather, I paste in a code snippet, explain its purpose, and execute it. This is the best way to pass on the required knowledge to me. As an aside, the
It's designed to give you the exact information and skills you need to pass Oracle's Java 11 1Z0-819 exam.
If you already have Java 7 or Java 8 certification and want to upgrade your skills to Java 11, this is for you.
The great thing about the course is that it's relatively short (at least compared to my almost 80 hour Java Masterclass), so it's great if you need to cram before taking the exam.
What this course is not.
This course is not a "rebadged" Java 8 Certification course - the 1Z0-819, Java 11 certification is a lot different from the 1Z0-808 (Java 8) exam (for starters it covers many features not included in Java 8, a few of which are listed above).
If you only have Java 8 experience it's going to be pretty hard for you to pass the Java 11 exam. You need to be up to speed with Java 11 features (as well as the older stuff) and that's what you will learn in this course.
I created this course, from scratch, in Java 11 to give you the tools you need to pass Oracle's 1Z0-819 exam (formally the 1Z0-815 and 1Z0-816 exams).
Who Am I?
My name is Tim Buchalka, a professional software developer with close to 40 years of experience, starting out with Java way back in the 1990s. I am the creator of the biggest and most comprehensive Java course on Udemy, the Java Masterclass which has been a best seller for many years and has close to 500,000 students and literally tens of thousands of glowing reviews.
I'd like to think I know a thing or two about Java!
You can be assured that the quality of the course is second to none and that the information contained in it will help you pass the 1Z0-819 exam.
Ready to get started?
Click on the enroll button and get started on your road to Java certification, better job opportunities, and more pay!