This exam is obsolete. See the
It's often helpful to be able to map objectives between exams.
Note: Oracle makes changes to the objectives. These
11 objectives are as of when the exam launched and may vary slightly from the latest. The gist is the same.
OCP 11 Part 2 Objective | OCP 11 Part 2 Text | OCPJP 8 Objective |
Java Fundamentals |
1.1 | Create and use final classes | 2.2 |
1.2 | Create and use inner, nested and anonymous classes | 2.3 |
1.3 | Create and use enumerations | 2.4 |
Exception Handling and Assertions |
2.1 | Use try-with-resources construct | 6.1, 6.2, 6.3 |
2.2 | Create and use custom exception classes | 6.4 |
2.3 | Test invariants by using assertions | 6.5 |
Java Interfaces |
3.1 | Create and use interfaces with default methods | New topic on exam |
3.2 | Create and use interfaces with private methods | New topic on exam |
Generics and Collections |
4.1 | Use wrapper classes, auto-boxing and auto-unboxing | New topic on exam (was implied) |
4.2 | Create and use generic classes, methods with diamond notation and wildcards | 3.1 |
4.3 | Describe Collections Framework and use key collection interfaces | 3.2 |
4.4 | Use Comparator and Comparable interfaces | 3.3 |
4.5 | Create and use convenience methods for collections | 3.7 |
Functional Interfaces and Lambda Expressions |
5.1 | Define and write functional interfaces | New topic on exam |
5.2 | Create and use lambda expressions including statement lambdas,local-variable for lambda parameters | New topic on exam |
Java Stream API |
6.1 | Describe the Stream interface and pipelines | 3.6 |
6.2 | Use lambda expressions and method references | 2.6, 3.8 |
Built-in Functional Interfaces |
7.1 | Use interfaces from java.util.function package | 4.1 |
7.2 | Use core functional interfaces including Predicate, Consumer, Function and Supplier | 4.1 |
7.3 | Use primitive and binary variations of base interfaces of java.util.function package | 4.2, 4.3 |
Lambda Operations on Streams |
8.1 | Extract stream data using map, peek and flatMap methods | 5.1 |
8.2 | Search stream data using search findFirst, findAny, anyMatch, allMatch and noneMatch methods | 5.2 |
8.3 | Use Optional class | 5.3 |
8.4 | Perform calculations using count, max, min, average and sum stream operations | 5.4 |
8.5 | Sort a collection using lambda expressions | 5.5 |
8.6 | Use Collectors with streams, including the groupingBy and partitioningBy operation | 5.6 |
Migration to a Modular Application |
9.1 | Migrate the application developed using a Java version prior to SE 9 to SE 11 including top-down and bottom-up migration, splitting a Java SE 8 application into modules for migration | New topic on exam |
9.2 | Run a modulaized application on classpath and on modulepath | New topic on exam |
9.3 | Use jdeps to determine dependencies and identify way to address the cyclic dependencies | New topic on exam |
Services in a Modular Application |
10.1 | Describe the components of Services including directives | New topic on exam |
10.2 | Design a service type, load services using ServiceLoader, check for dependencies of the services including consumer and provider modules | New topic on exam |
Concurrency |
11.1 | Create worker threads using Runnable, Callable and use an ExecutorService to concurrently execute tasks | 10.1 |
11.2 | Use java.util.concurrent collections and classes including CyclicBarrier and CopyOnWriteArrayList | 10.4 |
11.3 | Write thread-safe code | New topic on exam (implied before) |
11.4 | Identify threading problems such as deadlocks and livelocks | 10.2 |
Parallel Streams |
12.1 | Develop the code that use parallel streams | 10.6 |
12.2 | Implement decomposition and reduction with streams | 10.6 |
I/O (Fundamentals and NIO2) |
13.1 | Read data from and write console and file data using I/O Streams | 8.1, 8.2 |
13.2 | Use I/O Streams to read and write files | 8.1, 8.2 |
13.3 | Read and write objects by using serialization | New topic on exam (was off exam for a few editions) |
13.4 | Use Path interface to operate on file and directory paths | 9.1 |
13.5 | Use Files class to check, delete, copy or move a file or directory | 9.2 |
13.6 | Use Stream API with Files | 9.3 |
Secure Coding in Java SE Application |
14.1 | Prevent Denial of Service in Java applications | New topic on exam |
14.2 | Secure confidential information in Java application | New topic on exam |
14.3 | Implement Data integrity guidelines- injections and inclusion and input validation | New topic on exam |
14.4 | Prevent external attack of the code by limiting Accessibility and Extensibility, properly handling input validation, and mutablity | New topic on exam |
14.5 | Secure constructing sensitive objects | New topic on exam |
14.6 | Secure Serialization and Deserialization | New topic on exam |
Database Applications with JDBC |
15.1 | Connect to databases using JDBC URLs and DriverManager | 11.2 |
15.2 | Use PreparedStatement to perform CRUD operations | 11.1 (PreparedStatement not Statement) |
15.3 | Use PreparedStatement and CallableStatement APIs to perform database operations | New topic on exam |
Localization |
16.1 | Use Locale class | 12.2 |
16.2 | Use resource bundles | 12.4 |
16.3 | Format messages, dates, and numbers with Java | New topic on exam (was on older versions of exam) |
Annotations |
17.1 | Describe the purpose of annotations and typical usage patterns | New topic on exam |
17.2 | Apply annotations to classes and methods | New topic on exam |
17.3 | Describe commonly used annotations in the JDK | New topic on exam |
17.4 | Declare custom annotations | New topic on exam |
OCPJP 8 Objective | OCPJP 8 Text | OCP 11 Part 2 Objective |
Java Class Design |
1.1 | Implement encapsulation | No longer in objectives) |
1.2 | Implement inheritance including visibility modifiers and composition | No longer in objectives (but implied) |
1.3 | Implement polymorphism | No longer in objectives (but implied) |
1.4 | Override hashCode, equals, and toString methods from Object class | No longer in objectives (but implied) |
1.5 | Create and use singleton classes and immutable classes | No longer in objectives |
1.6 | Develop code that uses static keyword on initialize blocks, variables, methods, and classes | No longer in objectives (but implied) |
Advanced Class Design |
2.1 | Develop code that uses abstract classes and methods | No longer in objectives (but implied) |
2.2 | Develop code that uses final keyword | 1.1 |
2.3 | Create inner classes including static inner class, local class, nested class, and anonymous inner class | 1.2 |
2.4 | Use enumerated types including methods, and constructors in an enum type | 1.3 |
2.5 | Develop code that declares, implements and/or extends interfaces and use the atOverride annotation | No longer in objectives (but implied) |
2.6 | Create and use Lambda expressions | 6.2 |
Generics and Collections |
3.1 | Create and use a generic class | 4.2 |
3.2 | Create and use ArrayList, TreeSet, TreeMap, and ArrayDeque objects | 4.3 |
3.3 | Use java.util.Comparator and java.lang.Comparable interfaces | 4.4 |
3.4 | Collections Streams and Filters | No longer in objectives (but implied) |
3.5 | Iterate using forEach methods of Streams and List | No longer in objectives (but implied) |
3.6 | Describe Stream interface and Stream pipeline | 6.1 |
3.7 | Filter a collection by using lambda expressions | 4.5 |
3.8 | Use method references with Streams | 6.2 |
Lambda Built-in Functional Interfaces |
4.1 | Use the built-in interfaces included in the java.util.function package such as Predicate, Consumer, Function, and Supplier | 7.1, 7.2 |
4.2 | Develop code that uses primitive versions of functional interfaces | 7.3 |
4.3 | Develop code that uses binary versions of functional interfaces | 7.3 |
4.4 | Develop code that uses the UnaryOperator interface | No longer in objectives |
Java Stream API |
5.1 | Develop code to extract data from an object using peek() and map() methods including primitive versions of the map() method | 8.1 |
5.2 | Search for data by using search methods of the Stream classes including findFirst, findAny, anyMatch, allMatch, noneMatch | 8.2 |
5.3 | Develop code that uses the Optional class | 8.3 |
5.4 | Develop code that uses Stream data methods and calculation methods | 8.4 |
5.5 | Sort a collection using Stream API | 8.5 |
5.6 | Save results to a collection using the collect method and group/partition data using the Collectors class | 8.6 |
5.7 | Use of merge() and flatMap() methods of the Stream API | No longer in objectives |
Exceptions and Assertions |
6.1 | Use try-catch and throw statements | 2.1 |
6.2 | Use catch, multi-catch, and finally clauses | 2.1 |
6.3 | Use Autoclose resources with a try-with-resources statement | 2.1 |
6.4 | Create custom exceptions and Auto-closeable resources | 2.2 |
6.5 | Test invariants by using assertions | 2.3 |
Use Java SE 8 Date/Time API |
7.1 | Create and manage date-based and time-based events including a combination of date and time into a single object using LocalDate, LocalTime, LocalDateTime, Instant, Period, and Duration | No longer in objectives |
7.2 | Work with dates and times across timezones and manage changes resulting from daylight savings including Format date and times values | No longer in objectives |
7.3 | Define and create and manage date-based and time-based events using Instant, Period, Duration, and TemporalUnit | No longer in objectives |
Java I/O Fundamentals |
8.1 | Read and write data from the console | 13.1, 13.2 |
8.2 | Use BufferedReader, BufferedWriter, File, FileReader, FileWriter, FileInputStream, FileOutputStream, ObjectOutputStream, ObjectInputStream, and PrintWriter in the java.io package | 13.1, 13.2 |
Java File I/O (NIO.2) |
9.1 | Use Path interface to operate on file and directory paths | 13.4 |
9.2 | Use Files class to check, read, delete, copy, move, manage metadata of a file or directory | 13.5 |
9.3 | Use Stream API with NIO.2 | 13.6 |
Java Concurrency |
10.1 | Create worker threads using Runnable, Callable and use an ExecutorService to concurrently execute tasks | 11.1 |
10.2 | Identify potential threading problems among deadlock, starvation, livelock, and race conditions | 11.4 |
10.3 | Use synchronized keyword and java.util.concurrent.atomic package to control the order of thread execution | No longer in objectives |
10.4 | Use java.util.concurrent collections and classes including CyclicBarrier and CopyOnWriteArrayList | 11.2 |
10.5 | Use parallel Fork/Join Framework | No longer in objectives |
10.6 | Use parallel Streams including reduction, decomposition, merging processes, pipelines and performance | 12.1, 12.2 |
Building Database Applications with JDBC |
11.1 | Describe the interfaces that make up the core of the JDBC API including the Driver, Connection, Statement, and ResultSet interfaces and their relationship to provider implementations | 15.2 |
11.2 | Identify the components required to connect to a database using the DriverManager class including the JDBC URL | 15.1 |
11.3 | Submit queries and read results from the database including creating statements, returning result sets, iterating through the results, and properly closing result sets, statements, and connections | 15.2 |
Localization |
12.1 | Describe the advantages of localizing an application | No longer in objectives |
12.2 | Read and set the locale by using the Locale object | 16.1 |
12.3 | Create and read a Properties file | No longer in objectives |
12.4 | Build a resource bundle for each locale and load a resource bundle in an application | 16.2 |