1Z0-830 — Oracle Java SE 21 Developer Professional Exam Blueprint
Practical exam blueprint for Oracle Java SE 21 Developer Professional (1Z0-830) exam readiness.
How to Use This Exam Blueprint
This checklist is an independent study map for the Oracle Java SE 21 Developer Professional (1Z0-830) exam. Use it to confirm that you can apply Java SE 21 concepts under exam conditions: reading code, predicting output, identifying compiler errors, choosing APIs, and recognizing safer or more maintainable designs.
Exact official weights are not provided here, so treat the sections below as readiness areas, not weighted scoring categories.
A practical pass through this page should help you answer:
- Can I predict what Java code does without running it?
- Can I identify compile-time errors versus runtime exceptions?
- Can I choose the correct Java SE API for a scenario?
- Can I reason about generics, streams, modules, concurrency, I/O, JDBC, and localization?
- Can I spot traps involving scope, initialization, overload resolution, type inference, mutability, and resource handling?
Topic-Area Readiness Table
| Readiness area | What to review | You are ready when you can… | Common weak spots |
|---|---|---|---|
| Java language foundations | Primitive types, wrappers, String, StringBuilder, arrays, operators, casts, var, scope | Predict output and compilation behavior for small code samples | Numeric promotion, == vs equals, wrapper caching assumptions, var restrictions |
| Control flow | if, loops, labels, break, continue, switch statements, switch expressions | Trace execution path and identify unreachable or non-exhaustive code | Fall-through, yield, pattern dominance, missing cases |
| Methods and encapsulation | Access modifiers, static vs instance members, overloading, parameter passing, immutability | Determine method selection and object state after calls | Pass-by-value confusion, hidden fields, overload resolution with primitives/wrappers/varargs |
| Class design and inheritance | Constructors, initialization order, inheritance, overriding, hiding, polymorphism | Explain which constructor, method, or field is used | Static hiding vs overriding, covariant returns, constructor chaining |
| Interfaces, enums, records, sealed types | Default/static/private interface methods, enum constructors, record components, compact constructors, sealed hierarchies | Choose valid declarations and reason about generated behavior | Record immutability limits, sealed permits, exhaustive switch assumptions |
| Exceptions | Checked/unchecked exceptions, try, catch, finally, try-with-resources, custom exceptions | Identify required handling, thrown exceptions, and suppressed exceptions | Catch order, multi-catch rules, resource close order |
| Generics and collections | Generic classes/methods, wildcards, type erasure, List, Set, Queue, Map, comparators | Select type-safe declarations and predict collection behavior | Invariance, raw types, Comparable contract, mutable keys |
| Lambdas and functional interfaces | Target typing, effectively final variables, method references, built-in functional interfaces | Match lambdas to interfaces and rewrite lambdas as method references | Predicate vs Function, captured variables, overload ambiguity |
| Streams | Pipeline construction, laziness, terminal operations, collectors, primitive streams, Optional | Build and analyze stream pipelines, including grouping and reductions | Reusing streams, side effects, parallel stream assumptions |
| Date, time, formatting, localization | java.time, Locale, ResourceBundle, formatters, periods, durations | Choose correct temporal type and format localized output | Period vs Duration, time zones, resource bundle fallback |
| Modules and packaging | module-info.java, requires, exports, opens, services, classpath vs module path | Interpret module declarations and choose packaging commands conceptually | Split packages, automatic modules, reflective access |
| Concurrency | Threads, executors, tasks, synchronization, atomics, concurrent collections, virtual threads | Identify race conditions and select appropriate concurrency tools | Assuming atomicity, incorrect locking, executor shutdown, shared mutable state |
| I/O and NIO.2 | Path, Files, streams/readers/writers, serialization concepts, file traversal | Choose correct APIs and handle resources safely | Relative paths, checked exceptions, character vs byte streams |
| JDBC | Connections, statements, prepared statements, result sets, transactions | Write safe database access flow and reason about transaction boundaries | SQL injection, resource order, auto-commit assumptions |
| Annotations and metadata | Built-in annotations, custom annotation syntax, retention/target concepts | Recognize valid annotation declarations and usage | Repeatable annotations, allowed element types |
| Final exam execution | Mixed code-reading questions, API selection, scenario judgment | Work accurately without IDE assistance | Rushing small syntax details |
Java Language Foundations Checklist
Variables, Types, Operators, and Scope
Can you do this?
- Determine whether a variable declaration using
varis valid. - Distinguish local variable type inference from fields, parameters, and return types.
- Apply numeric promotion rules for
byte,short,char,int,long,float, anddouble. - Predict compound assignment behavior such as
x += y. - Identify narrowing casts that compile but may lose data.
- Distinguish object identity from object equality.
- Explain when
Stringconcatenation creates new objects conceptually. - Use
String,StringBuilder, and text blocks appropriately. - Identify scope and shadowing issues in blocks, loops, lambdas, and methods.
Example readiness prompt:
var value = 10;
value += 2.5;
System.out.println(value);
You should be able to explain whether this compiles and why compound assignment is not the same as a simple assignment.
Arrays, Strings, and Core APIs
| API area | Be able to answer |
|---|---|
| Arrays | What is the default value? Is the array length mutable? Is the element mutable? |
String | Which methods return a new string? Which comparisons are reference-based? |
StringBuilder | Which methods mutate the same object? What happens with chained calls? |
| Wrappers | When does boxing/unboxing occur? Where can NullPointerException appear? |
| Math and random values | Which API gives deterministic versus nondeterministic behavior? |
Control Flow and Pattern-Based Decisions
Core Flow Control
Be ready to trace:
- Nested
if/elseblocks. - Traditional
switchstatements. - Switch expressions that return a value.
-
yieldin switch expression blocks. - Loops with labels.
-
breakandcontinuein nested loops. - Enhanced
forloops over arrays and collections.
Switch and Pattern Matching Readiness
Java SE 21 includes modern switch capabilities. Be prepared to reason about switch syntax and exhaustiveness where applicable.
| Scenario | Readiness check |
|---|---|
| Switch statement | Can you identify fall-through behavior? |
| Switch expression | Can you identify required result values? |
| Arrow case labels | Can you distinguish expression, block, and throw forms? |
yield | Can you identify where yield is required? |
| Pattern cases | Can you identify dominated or unreachable cases? |
null handling | Can you tell whether null is handled explicitly? |
| Sealed hierarchy switch | Can you reason about exhaustive type coverage? |
Code-reading prompt:
static String describe(Object o) {
return switch (o) {
case String s when s.length() > 3 -> "long string";
case String s -> "string";
case null -> "null";
default -> "other";
};
}
You should be able to explain the role of pattern order, guards, and null.
Methods, Encapsulation, and Object State
Method and Field Checklist
- Identify valid method declarations.
- Distinguish instance methods from static methods.
- Determine whether a member is accessible from another class or package.
- Resolve overloaded method calls involving primitives, wrappers, inheritance, and varargs.
- Explain pass-by-value for object references.
- Recognize when a method mutates an object versus reassigns a local parameter.
- Understand final variables, final fields, final methods, and final classes.
- Identify legal and illegal uses of
thisandsuper.
Overload and Override Decision Table
| Question | If yes | If no |
|---|---|---|
| Same method name? | Could be overload or override | Not overload/override |
| Same parameter list after erasure? | Could override if inherited | Overload candidate |
| Compatible return type? | Override may be valid | Compile-time error for override |
| Static method involved? | Method hiding, not overriding | Normal override rules may apply |
| Access weakened? | Invalid override | Access may be valid |
| Checked exception broadened? | Invalid override | May be valid |
Common traps:
- Static methods are hidden, not overridden.
- Fields are hidden, not polymorphic.
- Overloading is resolved at compile time.
- Overriding is selected at runtime based on the actual object.
- A
privatemethod is not overridden by a subclass method with the same signature.
Class Design, Initialization, and Inheritance
Initialization Order
Be ready to trace object creation in this general order:
- Static fields and static initializers of the superclass.
- Static fields and static initializers of the subclass.
- Instance fields and instance initializers of the superclass.
- Superclass constructor.
- Instance fields and instance initializers of the subclass.
- Subclass constructor.
Checklist:
- Identify when static initialization happens.
- Trace constructor chaining with
this(...)andsuper(...). - Recognize that
super(...)orthis(...)must be the first constructor statement when present. - Determine which constructor is called.
- Spot calls to overridable methods from constructors.
- Identify abstract class instantiation errors.
- Apply access control across packages and subclasses.
Interfaces, Abstract Classes, and Polymorphism
| Feature | Be ready to distinguish |
|---|---|
| Abstract class | May have state, constructors, concrete and abstract methods |
| Interface | May define constants, abstract methods, default methods, static methods, private helper methods |
| Default method | Inherited unless overridden or conflicted |
| Static interface method | Called through the interface name |
| Private interface method | Used inside the interface only |
| Functional interface | Has one abstract method, even if it has defaults |
Records, Enums, Sealed Classes, and Nested Types
Records
Can you do this?
- Identify the canonical constructor of a record.
- Write or read a compact constructor.
- Know that record components lead to accessor methods.
- Recognize that records are intended as transparent data carriers.
- Distinguish shallow immutability from deep immutability.
- Identify invalid attempts to assign record fields outside construction.
Prompt:
record User(String name, java.util.List<String> roles) {
User {
if (name == null) throw new IllegalArgumentException();
}
}
You should be able to explain what the compact constructor validates and why the list itself may still be mutable unless defensively copied.
Enums
Review:
- Enum constants and constructors.
- Enum fields and methods.
- Constant-specific class bodies.
-
values()andvalueOf(). - Enum use in switch.
- Why enum constructors are not public.
Sealed Types
| Concept | Readiness check |
|---|---|
sealed | Can restrict which classes or interfaces extend/implement it |
permits | Lists allowed direct subclasses when needed |
final subclass | Cannot be extended further |
sealed subclass | Continues controlled hierarchy |
non-sealed subclass | Reopens inheritance |
| Exhaustiveness | Helps reasoning in switch-like type decisions |
Exceptions and Resource Handling
Exception Checklist
- Distinguish checked exceptions, unchecked exceptions, and errors.
- Identify when a method must declare or handle a checked exception.
- Order catch blocks from specific to general.
- Apply multi-catch rules.
- Understand that
finallynormally executes even when an exception is thrown. - Recognize how
returninfinallycan obscure earlier results or exceptions. - Use try-with-resources for
AutoCloseable. - Determine resource closing order.
- Identify suppressed exceptions.
Try-with-resources prompt:
try (var a = new Resource("A");
var b = new Resource("B")) {
throw new RuntimeException("body");
}
You should know that resources close in reverse order and that close failures may be suppressed behind the primary exception.
Exception Decision Points
| Situation | What to decide |
|---|---|
| Method calls an API throwing checked exception | Handle or declare? |
| Multiple catch blocks | Is any catch unreachable? |
| Lambda throws checked exception | Does the functional interface allow it? |
| Overriding method throws exception | Is it allowed under override rules? |
| Resource cleanup | Should try-with-resources replace manual finally cleanup? |
Generics and Collections
Generics Readiness
Can you do this?
- Explain type erasure at a practical level.
- Identify valid generic class, method, and constructor declarations.
- Use bounded type parameters such as
<T extends Number>. - Distinguish
List<Object>fromList<?>. - Apply producer/consumer wildcard reasoning.
- Recognize unsafe raw type assignments.
- Understand why generic arrays are restricted.
- Identify when casts generate warnings versus errors.
Practical wildcard guide:
| Need | Typical form | Meaning |
|---|---|---|
| Read values as a supertype | List<? extends Animal> | Producer-style access |
| Add values of a subtype | List<? super Dog> | Consumer-style access |
Unknown type, mostly read as Object | List<?> | Type-safe unknown |
| Exact element type | List<Dog> | Read and write Dog values |
Collections Readiness
| Collection area | Be ready to reason about |
|---|---|
List | Ordering, duplicates, index operations |
Set | Uniqueness, equality, hashing, sorted sets |
Queue / Deque | FIFO/LIFO-style operations, exception vs special-value methods |
Map | Keys, values, null handling conceptually, iteration views |
| Factory methods | Immutable or unmodifiable collection behavior |
| Sorting | Comparable, Comparator, natural order, custom order |
| Equality | equals() and hashCode() contract |
| Mutation | Effects of mutating keys stored in hash-based collections |
Comparator prompt:
Comparator<String> byLengthThenText =
Comparator.comparingInt(String::length)
.thenComparing(Comparator.naturalOrder());
You should be able to explain the sort order and identify compatible method references.
Lambdas, Functional Interfaces, and Method References
Functional Interface Checklist
- Identify whether an interface is functional.
- Match lambda parameter and return types to the target type.
- Use
Predicate<T>,Function<T,R>,Consumer<T>,Supplier<T>,UnaryOperator<T>, andBinaryOperator<T>. - Understand primitive specializations such as
IntPredicateandToIntFunction. - Identify effectively final captured variables.
- Recognize valid method references:
- Static method reference.
- Bound instance method reference.
- Unbound instance method reference.
- Constructor reference.
Lambda Trap Table
| Trap | Example issue |
|---|---|
| Missing target type | A lambda cannot stand alone without a functional interface context |
| Captured variable reassignment | Local variables used in lambdas must be final or effectively final |
| Return mismatch | Block lambda with a value must use return |
| Overload ambiguity | Same lambda may match multiple functional interfaces |
| Checked exception | Lambda body must comply with target method throws clause |
Streams, Optionals, and Collectors
Stream Pipeline Readiness
Can you do this?
- Identify source, intermediate operations, and terminal operations.
- Explain stream laziness.
- Predict when side effects execute.
- Avoid reusing a stream after a terminal operation.
- Distinguish
map,flatMap,filter,peek,sorted,distinct,limit, andskip. - Use
reducecorrectly. - Work with
Optionalwithout blindly callingget(). - Choose primitive streams where appropriate.
- Understand the risks of parallel streams with shared mutable state.
Stream prompt:
var result = java.util.List.of("ape", "bear", "cat").stream()
.filter(s -> s.length() > 3)
.map(String::toUpperCase)
.findFirst();
You should identify the result type, the terminal operation, and whether all elements must be processed.
Collector Readiness
| Collector task | Be able to choose or read |
|---|---|
| Collect to list/set/map | toList, toSet, toMap patterns |
| Group values | groupingBy |
| Partition values | partitioningBy |
| Count values | counting |
| Transform grouped values | mapping, downstream collectors |
| Join strings | joining |
| Summarize numbers | summarizing and averaging collectors |
| Resolve duplicate map keys | Merge function in toMap |
Optional Readiness
- Distinguish
orElsefromorElseGet. - Use
orElseThrowappropriately. - Use
mapandflatMapwith optional values. - Avoid assuming an
Optionalcontains a value. - Recognize APIs that return optional results, such as some stream terminal operations.
Date, Time, Formatting, and Localization
Date and Time API Checklist
| Type | Use when… | Watch for… |
|---|---|---|
LocalDate | Date without time zone | No time-of-day |
LocalTime | Time without date or zone | No date context |
LocalDateTime | Date and time without zone | Not an instant |
ZonedDateTime | Date and time with time zone | Daylight saving behavior |
Instant | Machine timestamp | Human display needs zone |
Period | Date-based amount | Years/months/days |
Duration | Time-based amount | Hours/minutes/seconds/nanos |
DateTimeFormatter | Parsing and formatting | Locale and pattern sensitivity |
Can you do this?
- Add and subtract dates and times immutably.
- Distinguish date-based and time-based arithmetic.
- Format and parse using standard and custom formatters.
- Reason about zone conversions conceptually.
- Recognize invalid date/time values.
Localization Checklist
- Build
Localevalues. - Use localized number, currency, date, and time formatting.
- Understand resource bundle lookup and fallback conceptually.
- Use
ResourceBundleto retrieve localized messages. - Recognize missing resource behavior.
- Apply
MessageFormat-style parameter substitution when relevant.
Scenario cues:
| Scenario | Likely best direction |
|---|---|
| Display amount to user in a country-specific format | Locale-aware number or currency formatter |
| Store an event timestamp | Use an instant-like representation, then format for users |
| Add one month to a business date | Date-based API such as Period or date arithmetic |
| Measure elapsed time | Time-based API such as Duration |
Modules, Packaging, and Deployment Concepts
Module System Checklist
Can you read and reason about module-info.java?
module com.example.app {
requires com.example.service;
exports com.example.api;
opens com.example.model;
uses com.example.spi.Plugin;
}
Be ready to identify:
- Module name.
- Required modules.
- Exported packages for compile-time and runtime access.
- Opened packages for reflection.
- Service usage.
- Service provider declarations with
provides ... with .... - Difference between classpath and module path.
- Automatic and unnamed module concepts.
- Split package problems.
- Encapsulation benefits of modules.
Command and Artifact Awareness
You do not need to memorize every command option, but you should recognize the purpose of common Java tools.
| Tool/artifact | Readiness check |
|---|---|
javac | Compiles source files |
java | Launches applications |
jar | Creates or inspects JAR files |
jdeps | Analyzes dependencies |
jlink | Creates custom runtime images conceptually |
module-info.java | Declares module dependencies and exposed packages |
| Classpath | Traditional class and JAR lookup |
| Module path | Module-aware lookup |
Conceptual command prompt:
javac --module-path mods -d out src/com.example.app/module-info.java
java --module-path mods:out -m com.example.app/com.example.Main
You should understand the distinction between compiling/running modules and compiling/running classpath-based applications.
Concurrency and Virtual Threads
Core Concurrency Checklist
- Distinguish
Thread,Runnable, andCallable. - Submit tasks with an executor.
- Retrieve results with
Futureor related APIs. - Shut down executors appropriately.
- Identify race conditions.
- Use
synchronizedto protect critical sections. - Understand intrinsic locks.
- Distinguish visibility from atomicity.
- Use atomic classes for simple atomic updates.
- Choose concurrent collections where appropriate.
- Recognize deadlock risk.
- Understand parallel stream tradeoffs.
Virtual Thread Readiness
Java SE 21 includes virtual threads. Be ready to reason at a practical level:
| Question | Readiness check |
|---|---|
| What are virtual threads for? | High-concurrency task execution, especially blocking-style code |
| Are they the same as platform threads? | No; they are lightweight threads managed by the JVM |
| Do they remove all concurrency problems? | No; shared mutable state still needs coordination |
| Should CPU-bound work become faster automatically? | Not necessarily |
| Do synchronization and thread-local choices still matter? | Yes |
Scenario cues:
| Scenario | Better fit |
|---|---|
| Many independent blocking I/O-style tasks | Consider virtual-thread-per-task style |
| Small fixed number of CPU-heavy tasks | Platform threads or executor sized for CPU work may be appropriate |
| Shared counter updated by many tasks | Atomic or synchronized protection required |
| Ordered handoff between threads | Blocking queues or coordination utilities may help |
I/O, NIO.2, and File Handling
File and Stream Checklist
- Distinguish byte streams from character streams.
- Use buffering appropriately.
- Use try-with-resources for I/O objects.
- Read and write text files conceptually.
- Work with
Pathrather than raw string paths where appropriate. - Resolve relative paths.
- Use
Filesutility methods. - Walk or search file trees conceptually.
- Handle checked
IOException. - Understand serialization at a conceptual and code-reading level if it appears.
NIO.2 Decision Table
| Need | API direction |
|---|---|
| Represent file location | Path |
| Create, copy, move, delete, inspect files | Files |
| Read all lines or write simple text | Files convenience methods |
| Stream large file content | Reader/writer or stream-based approach |
| Traverse directory tree | File walking APIs |
| Inspect metadata | File attribute APIs |
Common traps:
- A
Pathobject can represent a path that does not exist. - Relative paths depend on the working directory context.
- Character encoding matters for text.
- Many file operations throw checked exceptions.
- Resource leaks are exam-relevant; prefer try-with-resources.
JDBC and Database Access
JDBC Flow Checklist
Can you reason through this flow?
- Obtain a connection.
- Create a statement or prepared statement.
- Bind parameters when needed.
- Execute query or update.
- Process the result set.
- Commit or roll back if managing transactions.
- Close resources safely.
Readiness checks:
- Distinguish
StatementfromPreparedStatement. - Know why prepared statements help with parameter handling and SQL injection risk.
- Process
ResultSetcursor movement correctly. - Understand auto-commit conceptually.
- Know when to call
commitorrollback. - Close
ResultSet, statement, and connection resources. - Handle
SQLException. - Avoid building SQL with unchecked user input.
Prompt:
try (var conn = dataSource.getConnection();
var ps = conn.prepareStatement(
"select name from users where id = ?")) {
ps.setInt(1, id);
try (var rs = ps.executeQuery()) {
while (rs.next()) {
System.out.println(rs.getString("name"));
}
}
}
You should be able to explain parameter binding, cursor movement, and resource closure.
Annotations and Metadata
Review annotation basics if they appear in your study objectives:
- Built-in annotations such as
@Override,@Deprecated, and@SuppressWarnings. - Custom annotation declaration syntax.
- Valid annotation element types.
- Default element values.
- Marker annotations.
- Single-element annotations.
- Repeatable annotation concept.
- Retention and target concepts.
Common trap: @Override is checked by the compiler. If the method does not actually override a valid inherited method, compilation fails.
Scenario and Decision-Point Checks
Use this section to test whether you can choose among similar Java features.
| If the exam scenario says… | Think about… | Avoid assuming… |
|---|---|---|
| Need immutable data carrier | Record, defensive copies for mutable components | Record guarantees deep immutability |
| Need restricted inheritance | Sealed class/interface | All subclasses are automatically final |
| Need one abstract operation for a lambda | Functional interface | Default methods count as abstract methods |
| Need transform collection values | Stream map / collector | forEach is best for transformations |
| Need flatten nested collections | flatMap | map automatically flattens |
| Need thread-safe counter | Atomic class or synchronization | volatile makes increment atomic |
| Need many blocking tasks | Virtual threads may fit | Virtual threads solve data races |
| Need localized output | Locale, formatters, resource bundles | String concatenation is localization |
| Need SQL with parameters | PreparedStatement | Manual escaping is equivalent |
| Need reflective framework access to package | opens | exports and opens are identical |
| Need public API from module | exports | requires exposes your packages |
| Need read file as text | Character APIs and encoding awareness | Byte APIs automatically handle characters |
Common Weak Areas and Exam Traps
Code-Reading Traps
- Confusing compile-time type with runtime object type.
- Missing that a variable is shadowed in an inner scope.
- Forgetting that arrays are covariant but generics are invariant.
- Assuming collection factory results are freely mutable.
- Reusing a stream after a terminal operation.
- Calling
Optional.get()without checking presence. - Ignoring checked exceptions in lambdas.
- Misreading overloaded methods with
null. - Treating
StringBuilderlike immutableString. - Forgetting constructor and initializer execution order.
API Selection Traps
| Trap | Better exam habit |
|---|---|
Use == for object content comparison | Check whether equals() is required |
| Use raw collections to “make it compile” | Preserve generic type safety |
Use forEach for all stream work | Choose map, filter, collect, or reduce intentionally |
Use LocalDateTime for a global instant | Consider zone or instant requirements |
Use Statement with user input | Prefer PreparedStatement |
| Use manual close logic | Prefer try-with-resources |
| Use shared mutable state in parallel streams | Prefer collectors or thread-safe designs |
| Export all module packages | Export only intended API packages |
Syntax Traps
-
varrequires an initializer and cannot infer fromnullalone. - Lambda parameter types must be all explicit or all inferred in a parameter list.
- A switch expression must produce a value for each path.
- A record cannot declare instance fields outside its components except static fields.
- A subclass constructor must invoke a superclass constructor directly or indirectly.
- A multi-catch parameter cannot be assigned.
- Generic type parameters are not available for runtime type checks in the same way as concrete classes.
- Interface fields are implicitly
public static final.
“Can You Do This?” Final Skills Checklist
Before you consider yourself ready for Oracle Java SE 21 Developer Professional (1Z0-830), you should be able to complete these tasks without an IDE:
Language and OOP
- Predict output for code involving constructors, inheritance, static members, and instance initialization.
- Identify invalid declarations involving classes, records, enums, interfaces, and sealed types.
- Resolve overloaded and overridden methods correctly.
- Explain access-control outcomes across packages.
- Distinguish mutability of references, objects, arrays, collections, and records.
APIs and Data Handling
- Use core string, array, math, wrapper, and collection APIs accurately.
- Select the right collection type for ordering, uniqueness, lookup, or queue behavior.
- Build type-safe generic methods and classes.
- Apply wildcard bounds to producer and consumer scenarios.
- Format dates, numbers, currencies, and messages for locale-sensitive output.
Functional and Stream Programming
- Match lambdas to functional interfaces.
- Convert simple lambdas to method references.
- Build stream pipelines for filtering, mapping, sorting, reducing, and collecting.
- Use collectors for grouping, partitioning, joining, counting, and mapping.
- Avoid unsafe side effects in streams and parallel operations.
Platform and Runtime Topics
- Interpret module declarations.
- Recognize classpath versus module path scenarios.
- Use conceptual Java tooling knowledge for compilation, packaging, dependency analysis, and runtime images.
- Identify concurrency hazards and appropriate coordination tools.
- Explain where virtual threads fit and where they do not.
- Handle I/O resources safely.
- Write or read JDBC access code safely.
Final-Week Review Checklist
Seven to Five Days Out
- Re-read your notes on topics where you still confuse compile-time and runtime behavior.
- Drill mixed code snippets without running them.
- Review method overloading, overriding, generics, lambdas, and streams together; these often combine.
- Revisit module declarations and service-related syntax.
- Practice exception flow, especially try-with-resources and suppressed exceptions.
Four to Two Days Out
- Complete timed mixed-topic practice sets.
- Review every missed question by classifying the miss: syntax, API knowledge, logic trace, or rushed reading.
- Memorize key API method names you frequently confuse.
- Practice reading stream pipelines from source to terminal operation.
- Review date/time and localization scenarios.
Day Before
- Stop trying to learn large new areas.
- Review concise notes, traps, and corrected mistakes.
- Do a short set of representative questions to stay sharp.
- Confirm you can explain why each answer is correct or incorrect.
- Rest enough to read code carefully during the exam.
Exam-Day Habits
- Read every code snippet for imports, package context, access modifiers, and variable declarations.
- Check whether the question asks for output, compile failure, runtime exception, or best design choice.
- Track object references and mutations carefully.
- Watch for unchecked assumptions about mutability, thread safety, and resource cleanup.
- Mark difficult questions and return after easier wins.
- Do not overfit to IDE behavior; answer according to Java language and API rules.
Practical Next Step
Use this checklist as a gap map: mark each area as solid, needs review, or not ready. Then focus your next practice session on the weakest two or three areas, especially mixed questions that combine language rules with collections, streams, exceptions, modules, concurrency, I/O, or JDBC.