1Z0-830 — Oracle Java SE 21 Developer Professional Quick Review
Quick Review for Oracle Java SE 21 Developer Professional (1Z0-830): high-yield Java SE 21 concepts, traps, and practice focus.
Quick Review purpose
This Quick Review is for candidates preparing for Oracle Java SE 21 Developer Professional (1Z0-830). It is IT Mastery review support, not an Oracle document, and is designed to help you refresh high-yield Java SE 21 concepts before working through topic drills, mock exams, original practice questions, and detailed explanations.
Use it as a fast diagnostic checklist:
- Review the tables and decision rules.
- Mark topics where you hesitate.
- Drill those topics in a question bank.
- Read explanations carefully, especially for compile-time errors and small output differences.
The real challenge on 1Z0-830 is rarely remembering one isolated API call. It is usually reading Java code exactly: scope, overload resolution, generics, stream laziness, exception flow, object identity, module visibility, concurrency behavior, and Java SE 21 language features.
Exam-reading mindset
For code questions, classify the issue before calculating output.
| First question | Why it matters |
|---|---|
| Does it compile? | Many distractors are compile-time errors caused by scope, generics, access, checked exceptions, pattern dominance, or illegal overrides. |
| If it compiles, what is initialized first? | Static fields, instance fields, constructors, record constructors, and inheritance order often determine output. |
| Is the behavior deterministic? | Streams, parallel code, threads, hash-based collections, and race conditions may not guarantee order. |
| Is the API mutable, immutable, fixed-size, or a view? | List.of, Arrays.asList, Collections.unmodifiableList, reversed(), subList, and NIO streams behave differently. |
| Is a variable compile-time type or runtime type being used? | Overloading is compile-time; overriding is runtime. Fields and static methods are not polymorphic. |
| Is a lambda or stream operation lazy? | Intermediate stream operations do not run until a terminal operation. |
| Is the question asking for exact output or possible output? | Concurrency, collection ordering, and parallel streams can make one “nice-looking” answer invalid. |
High-yield Java SE 21 checklist
| Area | Must-review points | Common traps |
|---|---|---|
| Java basics | primitives, wrappers, String, StringBuilder, var, arrays, text blocks | numeric promotion, == vs equals, invalid var, array covariance |
| Control flow | if, loops, labels, switch statements and expressions | yield, fall-through, exhaustiveness, case null, pattern dominance |
| OOP | inheritance, overriding, overloading, interfaces, nested classes | static hiding, private methods, covariant returns, checked exceptions |
| Records and sealed types | record constructors/accessors, sealed hierarchy rules | records are final; sealed subclasses must choose final, sealed, or non-sealed |
| Pattern matching | instanceof, switch patterns, record patterns, guards | pattern variable scope and dominated switch labels |
| Generics | type erasure, wildcards, bounds, raw types | invariant generic types, List<?> add restrictions, heap pollution |
| Collections | List, Set, Map, queues, deques, sequenced collections | null support, ordering, duplicate handling, immutable factories |
| Lambdas and streams | functional interfaces, method references, collectors, Optional | stream reuse, lazy execution, side effects, parallel ordering |
| Exceptions | checked/unchecked, try-with-resources, suppressed exceptions | catch order, close order, finally overriding results |
| Date/time/localization | java.time, Period, Duration, formatters, resource bundles | immutability, month numbering, time zone and DST assumptions |
| I/O and NIO.2 | Path, Files, streams, readers/writers, serialization concepts | relative path resolution, resource leaks, lazy file streams |
| Concurrency | threads, executors, synchronization, atomics, virtual threads | races, deadlocks, interruption, assuming virtual threads make CPU code faster |
| JDBC | Connection, PreparedStatement, ResultSet, transactions | 1-based parameters/columns, next(), auto-commit, SQL injection |
| Modules | module-info.java, requires, exports, opens, services | exported vs opened packages, class path vs module path |
Java language fundamentals
Primitives, wrappers, and promotion
| Concept | Quick rule |
|---|---|
| Integer literals | Default to int unless suffixed or context allows narrowing constant assignment. |
| Floating literals | Decimal floating literals default to double; use f/F for float. |
| Arithmetic promotion | byte, short, and char usually promote to int in arithmetic. |
| Compound assignment | x += y includes an implicit cast; x = x + y may not compile. |
| Wrapper comparison | == compares references except when unboxing occurs. Prefer equals for value comparison. |
| Autoboxing | Can create overload ambiguity or choose a less obvious method than widening. |
null unboxing | Unboxing null throws NullPointerException. |
Common trap:
byte b = 1;
// b = b + 1; // does not compile: int result
b += 1; // compiles: implicit narrowing conversion
String, StringBuilder, and text blocks
| Type/feature | Review points |
|---|---|
String | Immutable; methods return new strings. == checks reference identity. |
| String pool | Compile-time constants may be interned; runtime concatenation may not be the same reference. |
StringBuilder | Mutable; many methods return this; not synchronized. |
StringBuffer | Mutable and synchronized, but less commonly preferred. |
| Text blocks | Use triple quotes; incidental indentation and final newline can affect exact output. |
Watch for:
substring,replace,trim,strip,toLowerCase, and similar methods do not mutate the originalString.StringBuilder.equals()is not value-based likeString.equals(). Unless overridden by a subclass, it uses object identity.- Text block questions may test spaces and newlines, not just visible words.
var rules
| Valid use | Invalid or restricted use |
|---|---|
| Local variable with initializer | Field declaration |
Enhanced for variable | Method return type |
| Try-with-resources variable | Method parameter, except lambda parameters |
Lambda parameters when all parameters use var | var x = null; |
| Annotated lambda parameters | Mixed lambda styles like (var a, b) -> ... |
Examples:
var name = "java"; // String
var list = new ArrayList<String>();
// var value; // does not compile
// var n = null; // does not compile
var is not dynamic typing. The type is fixed at compile time.
Control flow and switch
Switch statements vs switch expressions
| Feature | Switch statement | Switch expression |
|---|---|---|
| Produces a value | No | Yes |
| Exhaustiveness | Not always required | Required |
| Arrow labels | Allowed | Allowed |
| Colon labels | Allowed, may fall through | Allowed with care |
| Return from block | Use statements | Use yield for a value |
Example:
int score = switch (grade) {
case "A" -> 5;
case "B" -> 4;
default -> 0;
};
With a block:
int score = switch (grade) {
case "A" -> {
System.out.println("excellent");
yield 5;
}
default -> 0;
};
Switch traps
| Trap | Review rule |
|---|---|
| Fall-through | Colon-style labels can fall through unless break, return, throw, or similar control flow stops them. Arrow labels do not fall through. |
| Exhaustiveness | Switch expressions must cover all possible selector values. |
default and null | Treat null deliberately. In Java SE 21 pattern switch code, look for case null; do not casually assume default is a null handler in ordinary switch reasoning. |
| Pattern dominance | A broader pattern before a narrower one can make the narrower case unreachable. |
| Guards | when guards affect whether a pattern label applies. |
Object-oriented programming
Overloading vs overriding
| Topic | Overloading | Overriding |
|---|---|---|
| Binding | Compile-time | Runtime polymorphism |
| Based on | Method name and parameter list | Same signature after inheritance rules |
| Return type | Not enough by itself | Same or covariant return allowed |
| Static methods | Can be overloaded | Hidden, not overridden |
| Private methods | Can be redeclared | Not overridden |
| Checked exceptions | Not central to selection | Cannot throw broader checked exceptions |
High-yield rule: the reference type selects overloaded methods; the runtime object selects overridden instance methods.
class A {
void m(Object o) { System.out.print("A-Object"); }
void n() { System.out.print("A"); }
}
class B extends A {
void m(String s) { System.out.print("B-String"); } // overload
@Override void n() { System.out.print("B"); }
}
A x = new B();
x.m("hi"); // A-Object
x.n(); // B
Constructors and initialization
Review order:
- Static fields and static initializers, superclass first.
- Instance fields and instance initializers, superclass first.
- Superclass constructor.
- Subclass instance fields/initializers and constructor body.
Constructor rules:
- A constructor call to
this(...)orsuper(...)must be the first statement when explicit. - If no constructor is declared, a default no-argument constructor is provided.
- If any constructor is declared, no default constructor is automatically added.
- Abstract classes can have constructors.
- Interfaces do not have constructors.
Interfaces
| Interface member | Key rule |
|---|---|
| Fields | Implicitly public static final. |
| Abstract methods | Implicitly public abstract unless default/static/private. |
| Default methods | Inherited by implementing classes; conflicts must be resolved. |
| Static methods | Called on the interface name, not inherited like instance methods. |
| Private methods | Can support default/static methods inside the interface. |
Conflict rule: if a class inherits conflicting defaults, it must override and choose or provide behavior. A superclass instance method generally wins over an interface default.
Records, sealed classes, and pattern matching
Records
Records are compact carriers for shallowly immutable data.
record Point(int x, int y) {}
The compiler provides:
- private final fields for components
- public accessor methods named
x()andy() - canonical constructor
equals,hashCode, andtoString
Record review table:
| Point | Rule |
|---|---|
| Inheritance | A record cannot extend another class and is implicitly final. |
| Interfaces | A record can implement interfaces. |
| Fields | Extra instance fields are not allowed; static fields are allowed. |
| Constructors | Canonical and compact constructors are common exam targets. |
| Accessors | Accessors are named after components, not getX(). |
| Mutability | Record fields are final, but referenced objects can still be mutable. |
Compact constructor trap:
record Range(int start, int end) {
Range {
if (start > end) throw new IllegalArgumentException();
// assignments to components happen automatically after this block
}
}
Sealed classes and interfaces
Sealed types restrict which classes or interfaces can directly extend or implement them.
sealed interface Shape permits Circle, Rectangle {}
final class Circle implements Shape {}
non-sealed class Rectangle implements Shape {}
Rules to remember:
- A sealed type lists permitted direct subclasses with
permits, unless they are discoverable in the same compilation unit. - Each permitted direct subclass must declare exactly one of
final,sealed, ornon-sealed. - Sealed hierarchies support exhaustiveness checks in pattern switches.
- Sealing controls direct inheritance, not object creation by itself.
Pattern matching
instanceof pattern:
if (obj instanceof String s) {
System.out.println(s.length());
}
Pattern variable scope is flow-sensitive. The variable exists only where the compiler knows the pattern matched.
Common examples:
if (!(obj instanceof String s)) {
return;
}
System.out.println(s.length()); // valid
Pattern switch:
String result = switch (obj) {
case Integer i when i > 0 -> "positive integer";
case Integer i -> "integer";
case String s -> "string";
case null -> "null";
default -> "other";
};
Common traps:
- Put narrower or guarded cases before broader cases.
case Object ocan dominate later cases depending on selector type and exhaustiveness.- Guarded patterns with
whenare not the same as unguarded total patterns. - Record patterns deconstruct records but still follow type and scope rules.
Exceptions
Checked vs unchecked
| Type | Examples | Handling |
|---|---|---|
| Checked exceptions | IOException, SQLException | Must be caught or declared. |
| Runtime exceptions | NullPointerException, IllegalArgumentException, ClassCastException | Not required to be caught or declared. |
| Errors | OutOfMemoryError, StackOverflowError | Usually not handled by application logic. |
Try-with-resources
try (var in = Files.newBufferedReader(path);
var out = Files.newBufferedWriter(otherPath)) {
// use resources
}
Rules:
- Resources must implement
AutoCloseableorCloseable. - Resources close in reverse order of creation.
- If both the try block and close operation throw, close exceptions may become suppressed exceptions.
- Resource variables are effectively final inside the try block.
Catch and finally traps
| Trap | Rule |
|---|---|
| Catch order | Catch more specific exceptions before more general ones. |
| Multi-catch | Alternatives cannot have subclass/superclass relationships. |
| Multi-catch variable | Effectively final. |
finally | Runs after try/catch unless the JVM exits or similar extreme cases occur. |
Return in finally | Can override a return or thrown exception; know it, but avoid it in real code. |
Generics and collections
Generic type rules
| Concept | Quick rule |
|---|---|
| Invariance | List<Integer> is not a subtype of List<Number>. |
| Upper bound | ? extends Number is good for reading Numbers, not adding arbitrary Numbers. |
| Lower bound | ? super Integer is good for adding Integers, reading as Object. |
| Raw type | Disables generic checking and can cause runtime ClassCastException. |
| Type erasure | Generic type parameters are mostly unavailable at runtime. |
| Generic arrays | Direct creation like new List<String>[10] is not allowed. |
PECS memory aid:
- Producer extends: use
? extends Twhen the structure producesTvalues for you. - Consumer super: use
? super Twhen the structure consumesTvalues from you.
Collection factories and mutability
| API | Behavior |
|---|---|
List.of(...) | Unmodifiable; rejects null. |
Set.of(...) | Unmodifiable; rejects null and duplicates. |
Map.of(...) | Unmodifiable; rejects null keys/values and duplicate keys. |
Arrays.asList(array) | Fixed-size list backed by the array; set allowed, add/remove not allowed. |
List.copyOf(...) | Unmodifiable copy; rejects null. |
Collections.unmodifiableList(list) | Unmodifiable view backed by original list. Changes to original may be visible. |
Ordering and equality
| Collection | Ordering | Duplicate rule |
|---|---|---|
ArrayList | Insertion/index order | Allows duplicates |
HashSet | No guaranteed iteration order | Uses equals/hashCode |
LinkedHashSet | Insertion order | Uses equals/hashCode |
TreeSet | Sorted order | Uses comparator or natural ordering |
HashMap | No guaranteed key iteration order | One value per key |
LinkedHashMap | Predictable encounter order | One value per key |
TreeMap | Sorted key order | Comparator/natural ordering |
Set/map trap: if compareTo or a comparator says two objects are equal, a TreeSet treats them as duplicates even if equals would differ.
Sequenced collections in Java SE 21
Java SE 21 adds sequenced collection abstractions for collections with a defined encounter order.
| Concept | Review point |
|---|---|
SequencedCollection | First/last access and reverse-order view concepts. |
SequencedSet | Ordered set behavior with first/last semantics. |
SequencedMap | Ordered map behavior with first/last entries and reversed views. |
reversed() | Often a view, so think about backing collection and mutability. |
Do not assume every collection is sequenced. A hash-based collection without defined encounter order is different from an ordered collection.
Lambdas, method references, and functional interfaces
Core functional interfaces
| Interface | Abstract method shape | Example use |
|---|---|---|
Predicate<T> | T -> boolean | filtering |
Function<T,R> | T -> R | mapping |
Consumer<T> | T -> void | side effects |
Supplier<T> | () -> T | lazy creation |
UnaryOperator<T> | T -> T | same-type transform |
BinaryOperator<T> | (T,T) -> T | reductions |
Comparator<T> | (T,T) -> int | sorting |
Lambda rules:
- Captured local variables must be final or effectively final.
- The target type must be a functional interface.
- Parameter types can be explicit, inferred, or all
var; do not mix styles. - A block lambda with a non-void target must return a value on all paths.
Method reference forms:
| Form | Example |
|---|---|
| Static method | Integer::parseInt |
| Bound instance method | text::toLowerCase |
| Unbound instance method | String::length |
| Constructor | ArrayList::new |
Streams and collectors
Stream pipeline structure
A stream pipeline has:
- Source: collection, array, file, generator, range.
- Intermediate operations: lazy transformations.
- Terminal operation: triggers processing and consumes the stream.
| Operation type | Examples |
|---|---|
| Intermediate | filter, map, flatMap, sorted, distinct, limit, peek |
| Terminal | forEach, collect, reduce, count, min, max, anyMatch, findFirst |
Common traps:
- A stream cannot be reused after a terminal operation.
- Intermediate operations do not run until a terminal operation.
peekis mainly for debugging; do not rely on it without a terminal operation.findAnymay return any matching element, especially with parallel streams.forEachon a parallel stream does not preserve order;forEachOrderedattempts encounter order.
map vs flatMap
| Operation | Result shape |
|---|---|
map | One output element per input element. |
flatMap | Each input produces a stream that is flattened into one stream. |
Example idea:
List<List<String>> groups = List.of(List.of("a", "b"), List.of("c"));
groups.stream()
.flatMap(List::stream)
.toList(); // ["a", "b", "c"]
Reduce and collect
| Task | Prefer |
|---|---|
| Combine values into one value | reduce |
| Build a collection/map/string summary | collect |
| Group by classifier | Collectors.groupingBy |
| Split into true/false groups | Collectors.partitioningBy |
| Count, sum, average | primitive streams or summarizing collectors |
Reduction trap: for parallel streams, accumulator and combiner must be associative and compatible with the identity. Side effects in reductions are a common source of wrong answers.
Optional
| API | Review point |
|---|---|
of(value) | Throws if value is null. |
ofNullable(value) | Empty if value is null. |
get() | Throws if empty. Usually avoid unless presence is certain. |
orElse(value) | Evaluates the fallback eagerly. |
orElseGet(supplier) | Evaluates fallback lazily. |
map | Transforms contained value. |
flatMap | Avoids nested Optional. |
Date, time, and localization
java.time
| Type | Represents |
|---|---|
LocalDate | Date without time zone |
LocalTime | Time without date/time zone |
LocalDateTime | Date and time without time zone |
ZonedDateTime | Date and time with time zone |
Instant | Machine timestamp on UTC timeline |
Period | Date-based amount, such as years/months/days |
Duration | Time-based amount, such as seconds/nanos |
Rules:
java.timeclasses are immutable.- Months in
LocalDate.of(year, month, day)are 1-based if using integers. - Prefer
Month.JANUARYstyle in real code when clarity matters. Periodis date-based;Durationis time-based.- Time zones and daylight saving transitions can produce non-obvious results.
Formatting and localization
| API | Use |
|---|---|
DateTimeFormatter | Parse/format date-time values. |
NumberFormat | Locale-aware number, currency, percent formatting. |
Locale | Language/country/variant identification. |
ResourceBundle | Locale-specific messages and resources. |
Resource bundle review:
- Lookup uses a fallback chain based on requested locale and base bundle.
- Missing keys can throw
MissingResourceException. - Localization questions often test which bundle is selected, not translation knowledge.
I/O and NIO.2
Path and Files
| API | Review point |
|---|---|
Path.of(...) | Creates a path object; does not require the file to exist. |
resolve | Combines paths; if the second path is absolute, it may replace the first. |
relativize | Computes relative path between compatible paths. |
normalize | Removes redundant . and .. where possible; does not access the file system. |
toRealPath | Accesses file system and resolves symbolic links depending on options. |
Files.exists | Can be affected by permissions and link options. |
Files.lines | Returns a lazy stream that should be closed. |
Files.walk | Returns a stream; close it, especially in long-running code. |
Byte and character streams
| Use case | Common classes |
|---|---|
| Binary data | InputStream, OutputStream, Files.newInputStream |
| Character data | Reader, Writer, Files.newBufferedReader |
| Buffered text | BufferedReader, BufferedWriter |
| Object serialization concepts | ObjectInputStream, ObjectOutputStream, Serializable |
Common traps:
- Byte streams are not character streams.
- Character encoding matters when converting bytes to text.
- Many I/O methods throw checked
IOException. - Streams returned by file APIs may be lazy and need explicit closing or try-with-resources.
Concurrency and virtual threads
Core concurrency concepts
| Concept | Review rule |
|---|---|
Thread | Represents an independent path of execution. |
Runnable | Task with no result and no checked exception from run. |
Callable<V> | Task with result and can throw checked exceptions. |
ExecutorService | Manages task execution; remember shutdown. |
Future | Represents pending result; get can block and throw wrapped exceptions. |
synchronized | Provides mutual exclusion and happens-before guarantees around monitor use. |
volatile | Visibility guarantee for reads/writes, not compound atomicity. |
| Atomic classes | Support atomic operations such as increment/compare-and-set. |
Race condition trap:
count++; // read, add, write — not atomic
Use synchronization, locks, atomics, or concurrency-safe structures when shared mutable state is accessed by multiple threads.
Virtual threads in Java SE 21
Virtual threads are lightweight threads intended to make blocking, thread-per-task server-style code more scalable.
Review points:
- Created with APIs such as
Thread.startVirtualThread(...)or virtual-thread executors. - Useful for many blocking tasks, not for making CPU-bound algorithms automatically faster.
- Avoid assuming thread identity, scheduling order, or timing.
- Be careful with shared mutable state exactly as with platform threads.
- Blocking while holding monitors or using certain native operations can reduce scalability.
Example:
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
Future<String> f = executor.submit(() -> "done");
System.out.println(f.get());
}
Concurrency traps
| Trap | Correct reasoning |
|---|---|
Calling run() directly | Executes on current thread; does not start a new thread. |
Calling start() twice | Throws IllegalThreadStateException. |
| Assuming output order | Thread scheduling is not deterministic. |
| Ignoring interruption | Interrupted status and blocking methods matter. |
Forgetting shutdown() | Executor may keep application alive or leak resources. |
| Using non-thread-safe collections | Can corrupt state or produce unpredictable results. |
| Deadlock | Can occur when locks are acquired in inconsistent order. |
JDBC
Core JDBC flow
Typical flow:
- Obtain
Connection. - Create
PreparedStatementorStatement. - Bind parameters if needed.
- Execute.
- Process
ResultSetif returned. - Commit/rollback when managing transactions.
- Close resources, usually with try-with-resources.
try (Connection con = dataSource.getConnection();
PreparedStatement ps = con.prepareStatement(
"select name from employee where id = ?")) {
ps.setInt(1, id);
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
System.out.println(rs.getString(1));
}
}
}
JDBC review table
| Topic | Rule |
|---|---|
| Parameter indexes | PreparedStatement parameters are 1-based. |
| Column indexes | ResultSet column indexes are 1-based. |
| Cursor | ResultSet starts before the first row; call next(). |
executeQuery | Used for queries returning a result set. |
executeUpdate | Used for DML/DDL-style operations returning an update count. |
execute | Can handle multiple result types; returns boolean indicating result set availability. |
| Auto-commit | Common default is auto-commit enabled; know when code disables it. |
| Transactions | Use commit and rollback when auto-commit is disabled. |
| SQL injection | Prefer PreparedStatement with bind parameters. |
Common trap: PreparedStatement prevents SQL injection only when values are bound as parameters, not when user input is concatenated into SQL text before preparing.
Modules
module-info.java
Example:
module com.example.app {
requires com.example.service;
exports com.example.api;
opens com.example.model;
uses com.example.spi.Plugin;
}
| Directive | Meaning |
|---|---|
requires | This module depends on another module. |
requires transitive | Downstream modules also read the required module. |
exports | Makes a package accessible at compile time and runtime to other modules. |
exports ... to | Qualified export to specific modules. |
opens | Allows deep reflection at runtime. |
opens ... to | Qualified opening to specific modules. |
uses | Declares service consumption. |
provides ... with | Declares service implementation. |
High-yield distinction:
exportsis about ordinary public type accessibility.opensis about deep reflection.- A
publicclass in a non-exported package is not necessarily accessible to other named modules. - The class path and module path have different visibility rules.
Secure and robust coding themes
Oracle Java SE 21 Developer Professional (1Z0-830) candidates should be comfortable recognizing safer coding choices in ordinary Java code.
| Theme | Exam-relevant habit |
|---|---|
| Encapsulation | Keep fields private; expose controlled behavior. |
| Immutability | Prefer final fields and defensive copies for mutable inputs/outputs. |
| Input validation | Validate boundaries before use. |
| SQL safety | Use bind parameters instead of string concatenation. |
| Serialization caution | Do not deserialize untrusted data casually. |
| Resource management | Use try-with-resources for closeable resources. |
| Concurrency safety | Avoid unsynchronized shared mutable state. |
| Error handling | Do not swallow exceptions without meaningful handling. |
Common candidate mistakes
| Mistake | Better exam habit |
|---|---|
| Reading code as intended instead of written | Trace exact compile-time and runtime behavior. |
| Assuming all collections preserve insertion order | Identify concrete collection type and contract. |
Treating var as dynamic | Infer the compile-time type immediately. |
| Forgetting stream laziness | Mark the terminal operation before predicting side effects. |
| Reusing a stream | A consumed stream cannot be reused. |
| Confusing overload and override | Resolve overload first by reference type and arguments. |
| Ignoring checked exceptions | Ask whether the method catches or declares them. |
| Assuming parallel stream order | Look for ordered terminal operations and source ordering. |
| Assuming virtual threads remove synchronization needs | Shared state still needs safe access. |
| Forgetting JDBC indexes are 1-based | Parameters and result columns start at 1. |
Confusing exports and opens | Compile-time access and reflection are different. |
| Assuming records make deep immutable objects | Component references can point to mutable objects. |
Quick practice plan
Use this Quick Review as a map for IT Mastery practice:
- Start with topic drills. Work small sets on language basics, OOP, records/sealed types, generics, streams, exceptions, modules, I/O, concurrency, and JDBC.
- Review every detailed explanation. For missed questions, identify whether the error was compilation, API behavior, output tracing, or concept confusion.
- Build a personal trap list. Include examples such as
Arrays.asList,orElseeagerness,switchexhaustiveness, wildcard capture, and try-with-resources close order. - Move to mixed sets. Once topic scores stabilize, use mixed original practice questions to simulate context switching.
- Finish with mock exams. Practice pacing and answer discipline. Do not change answers unless you find a specific code rule you missed.
Final review checklist before mock exams
You are ready for full-length practice when you can quickly answer:
- Does this snippet compile?
- Which overload is selected?
- Which method is overridden at runtime?
- Is the collection ordered, sorted, immutable, fixed-size, or a view?
- Is a stream operation intermediate or terminal?
- Can this lambda capture the variable?
- Is the generic assignment safe, unsafe, or illegal?
- What happens if this
Optionalis empty? - Which exception is caught, suppressed, or thrown?
- Does the NIO operation normalize text or access the real file system?
- Is this concurrency result deterministic?
- Is this JDBC call using the right execution method and index?
- Is this package exported, opened, both, or neither?
Next step: choose your weakest three topics from this page and work targeted question bank drills with original practice questions and detailed explanations before attempting another mixed mock exam.
Continue in IT Mastery
Use this Quick Review as a final concept map, then move into IT Mastery for focused topic drills, mixed practice sets, timed mock exams, and detailed explanations. The practice questions are original IT Mastery practice items; they are not official Oracle questions, copied live-exam content, or exam dumps.