
UPDATED [Sep 03, 2025] Pass Java SE 21 Developer Professional Exam with Latest Questions
1z0-830 Exam Practice Questions prepared by Oracle Professionals
NEW QUESTION # 17
Given:
java
Map<String, Integer> map = Map.of("b", 1, "a", 3, "c", 2);
TreeMap<String, Integer> treeMap = new TreeMap<>(map);
System.out.println(treeMap);
What is the output of the given code fragment?
- A. {b=1, c=2, a=3}
- B. {c=2, a=3, b=1}
- C. Compilation fails
- D. {a=1, b=2, c=3}
- E. {a=3, b=1, c=2}
- F. {b=1, a=3, c=2}
- G. {c=1, b=2, a=3}
Answer: E
Explanation:
In this code, a Map named map is created using Map.of with the following key-value pairs:
* "b": 1
* "a": 3
* "c": 2
The Map.of method returns an immutable map containing these mappings.
Next, a TreeMap named treeMap is instantiated by passing the map to its constructor:
java
TreeMap<String, Integer> treeMap = new TreeMap<>(map);
The TreeMap constructor with a Map parameter creates a new tree map containing the same mappings as the given map, ordered according to the natural ordering of its keys. In Java, the natural ordering for String keys is lexicographical order.
Therefore, the TreeMap will store the entries in the following order:
* "a": 3
* "b": 1
* "c": 2
When System.out.println(treeMap); is executed, it outputs the TreeMap in its natural order, resulting in:
r
{a=3, b=1, c=2}
Thus, the correct answer is option F: {a=3, b=1, c=2}.
NEW QUESTION # 18
Given:
java
var now = LocalDate.now();
var format1 = new DateTimeFormatter(ISO_WEEK_DATE);
var format2 = DateTimeFormatter.ISO_WEEK_DATE;
var format3 = new DateFormat(WEEK_OF_YEAR_FIELD);
var format4 = DateFormat.getDateInstance(WEEK_OF_YEAR_FIELD);
System.out.println(now.format(REPLACE_HERE));
Which variable prints 2025-W01-2 (present-day is 12/31/2024)?
- A. format4
- B. format1
- C. format3
- D. format2
Answer: D
Explanation:
In this code, now is assigned the current date using LocalDate.now(). The goal is to format this date to the ISO week date format, which represents dates in the YYYY-'W'WW-E pattern, where:
* YYYY: Week-based year
* 'W': Literal 'W' character
* WW: Week number
* E: Day of the week
Given that the present day is December 31, 2024, this date falls in the first week of the week-based year 2025.
Therefore, the ISO week date representation would be 2025-W01-2, where '2' denotes Tuesday.
Among the provided formatters:
* format1: This line attempts to create a DateTimeFormatter using a constructor, which is incorrect because DateTimeFormatter does not have a public constructor that accepts a pattern directly. This would result in a compilation error.
* format2: This is correctly assigned the predefined DateTimeFormatter.ISO_WEEK_DATE, which formats dates in the ISO week date format.
* format3: This line attempts to create a DateFormat instance using a field, which is incorrect because DateFormat does not have such a constructor. This would result in a compilation error.
* format4: This line attempts to get a DateFormat instance using an integer field, which is incorrect because DateFormat.getDateInstance() does not accept such parameters. This would result in a compilation error.
Therefore, the only correct and applicable formatter is format2. Using format2 in the now.format() method will produce the desired output: 2025-W01-2.
NEW QUESTION # 19
Which methods compile?
- A. ```java public List<? super IOException> getListSuper() { return new ArrayList<Exception>(); } csharp
- B. ```java public List<? extends IOException> getListExtends() { return new ArrayList<Exception>(); } csharp
- C. ```java
public List<? extends IOException> getListExtends() {
return new ArrayList<FileNotFoundException>();
} - D. ```java
public List<? super IOException> getListSuper() {
return new ArrayList<FileNotFoundException>();
}
Answer: A,C
Explanation:
In Java generics, wildcards are used to relax the type constraints of generic types. The extends wildcard (<?
extends Type>) denotes an upper bounded wildcard, allowing any type that is a subclass of Type. Conversely, the super wildcard (<? super Type>) denotes a lower bounded wildcard, allowing any type that is a superclass of Type.
Option A:
java
public List<? super IOException> getListSuper() {
return new ArrayList<Exception>();
}
Here, List<? super IOException> represents a list that can hold IOException objects and objects of its supertypes. Since Exception is a superclass of IOException, ArrayList<Exception> is compatible with List<?
super IOException>. Therefore, this method compiles successfully.
Option B:
java
public List<? extends IOException> getListExtends() {
return new ArrayList<FileNotFoundException>();
}
In this case, List<? extends IOException> represents a list that can hold objects of IOException and its subclasses. Since FileNotFoundException is a subclass of IOException, ArrayList<FileNotFoundException> is compatible with List<? extends IOException>. Thus, this method compiles successfully.
Option C:
java
public List<? extends IOException> getListExtends() {
return new ArrayList<Exception>();
}
Here, List<? extends IOException> expects a list of IOException or its subclasses. However, Exception is a superclass of IOException, not a subclass. Therefore, ArrayList<Exception> is not compatible with List<?
extends IOException>, and this method will not compile.
Option D:
java
public List<? super IOException> getListSuper() {
return new ArrayList<FileNotFoundException>();
}
In this scenario, List<? super IOException> expects a list that can hold IOException objects and objects of its supertypes. Since FileNotFoundException is a subclass of IOException, ArrayList<FileNotFoundException> is not compatible with List<? super IOException>, and this method will not compile.
Therefore, the methods in options A and B compile successfully, while those in options C and D do not.
NEW QUESTION # 20
Which of the following statements is correct about a final class?
- A. It must contain at least a final method.
- B. The final keyword in its declaration must go right before the class keyword.
- C. It cannot implement any interface.
- D. It cannot be extended by any other class.
- E. It cannot extend another class.
Answer: D
Explanation:
In Java, the final keyword can be applied to classes, methods, and variables to impose certain restrictions.
Final Classes:
* Definition:A class declared with the final keyword is known as a final class.
* Purpose:Declaring a class as final prevents it from being subclassed. This is useful when you want to ensure that the class's implementation remains unchanged and cannot be extended or modified through inheritance.
Option Evaluations:
* A. The final keyword in its declaration must go right before the class keyword.
* This is correct. The syntax for declaring a final class is:
java
public final class ClassName {
// class body
}
* However, this statement is about syntax rather than the core characteristic of a final class.
* B. It must contain at least a final method.
* Incorrect. A final class can have zero or more methods, and none of them are required to be declared as final. The final keyword at the class level prevents inheritance, regardless of the methods' finality.
* C. It cannot be extended by any other class.
* Correct. The primary characteristic of a final class is that it cannot be subclassed. Attempting to do so will result in a compilation error.
* D. It cannot implement any interface.
* Incorrect. A final class can implement interfaces. Declaring a class as final restricts inheritance but does not prevent the class from implementing interfaces.
* E. It cannot extend another class.
* Incorrect. A final class can extend another class. The final keyword prevents the class from being subclassed but does not prevent it from being a subclass itself.
Therefore, the correct statement about a final class is option C: "It cannot be extended by any other class."
NEW QUESTION # 21
Given:
java
double amount = 42_000.00;
NumberFormat format = NumberFormat.getCompactNumberInstance(Locale.FRANCE, NumberFormat.Style.
SHORT);
System.out.println(format.format(amount));
What is the output?
- A. 42 000,00 €
- B. 42000E
- C. 0
- D. 42 k
Answer: D
Explanation:
In this code, a double variable amount is initialized to 42,000.00. The NumberFormat.
getCompactNumberInstance(Locale.FRANCE, NumberFormat.Style.SHORT) method is used to obtain a compact number formatter for the French locale with the short style. The format method is then called to format the amount.
The compact number formatting is designed to represent numbers in a shorter form, based on the patterns provided for a given locale. In the French locale, the short style represents thousands with a lowercase 'k'.
Therefore, 42,000 is formatted as 42 k.
* Option Evaluations:
* A. 42000E: This format is not standard in the French locale for compact number formatting.
* B. 42 000,00 €: This represents the number as a currency with two decimal places, which is not the compact form.
* C. 42000: This is the plain number without any formatting, which does not match the compact number format.
* D. 42 k: This is the correct compact representation of 42,000 in the French locale with the short style.
Thus, option D (42 k) is the correct output.
NEW QUESTION # 22
Given:
java
interface SmartPhone {
boolean ring();
}
class Iphone15 implements SmartPhone {
boolean isRinging;
boolean ring() {
isRinging = !isRinging;
return isRinging;
}
}
Choose the right statement.
- A. Iphone15 class does not compile
- B. Everything compiles
- C. An exception is thrown at running Iphone15.ring();
- D. SmartPhone interface does not compile
Answer: A
Explanation:
In this code, the SmartPhone interface declares a method ring() with a boolean return type. The Iphone15 class implements the SmartPhone interface and provides an implementation for the ring() method.
However, in the Iphone15 class, the ring() method is declared without the public access modifier. In Java, when a class implements an interface, it must provide implementations for all the interface's methods with the same or a more accessible access level. Since interface methods are implicitly public, the implementing methods in the class must also be public. Failing to do so results in a compilation error.
Therefore, the Iphone15 class does not compile because the ring() method is not declared as public.
NEW QUESTION # 23
Which of the following statements are correct?
- A. None
- B. You can use 'protected' access modifier with all kinds of classes
- C. You can use 'public' access modifier with all kinds of classes
- D. You can use 'final' modifier with all kinds of classes
- E. You can use 'private' access modifier with all kinds of classes
Answer: A
Explanation:
1. private Access Modifier
* The private access modifiercan only be used for inner classes(nested classes).
* Top-level classes cannot be private.
* Example ofinvaliduse:
java
private class MyClass {} // Compilation error
* Example ofvaliduse (for inner class):
java
class Outer {
private class Inner {}
}
2. protected Access Modifier
* Top-level classes cannot be protected.
* protectedonly applies to members (fields, methods, and constructors).
* Example ofinvaliduse:
java
protected class MyClass {} // Compilation error
* Example ofvaliduse (for methods/fields):
java
class Parent {
protected void display() {}
}
3. public Access Modifier
* Atop-level class can be public, butonly one public class per file is allowed.
* Example ofvaliduse:
java
public class MyClass {}
* Example ofinvaliduse:
java
public class A {}
public class B {} // Compilation error: Only one public class per file
4. final Modifier
* finalcan be used with classes, but not all kinds of classes.
* Interfaces cannot be final, because they are meant to be implemented.
* Example ofinvaliduse:
java
final interface MyInterface {} // Compilation error
Thus,none of the statements are fully correct, making the correct answer:None References:
* Java SE 21 - Access Modifiers
* Java SE 21 - Class Modifiers
NEW QUESTION # 24
Given:
java
public class ThisCalls {
public ThisCalls() {
this(true);
}
public ThisCalls(boolean flag) {
this();
}
}
Which statement is correct?
- A. It compiles.
- B. It throws an exception at runtime.
- C. It does not compile.
Answer: C
Explanation:
In the provided code, the class ThisCalls has two constructors:
* No-Argument Constructor (ThisCalls()):
* This constructor calls the boolean constructor with this(true);.
* Boolean Constructor (ThisCalls(boolean flag)):
* This constructor attempts to call the no-argument constructor with this();.
This setup creates a circular call between the two constructors:
* The no-argument constructor calls the boolean constructor.
* The boolean constructor calls the no-argument constructor.
Such a circular constructor invocation leads to a compile-time error in Java, specifically "recursiveconstructor invocation." The Java Language Specification (JLS) states:
"It is a compile-time error for a constructor to directly or indirectly invoke itself through a series of one or more explicit constructor invocations involving this." Therefore, the code will not compile due to this recursive constructor invocation.
NEW QUESTION # 25
What do the following print?
java
public class DefaultAndStaticMethods {
public static void main(String[] args) {
WithStaticMethod.print();
}
}
interface WithDefaultMethod {
default void print() {
System.out.print("default");
}
}
interface WithStaticMethod extends WithDefaultMethod {
static void print() {
System.out.print("static");
}
}
- A. default
- B. static
- C. Compilation fails
- D. nothing
Answer: B
Explanation:
In this code, we have two interfaces and a class with a main method:
* WithDefaultMethod Interface:
* Declares a default method print() that outputs "default".
* WithStaticMethod Interface:
* Extends WithDefaultMethod.
* Declares a static method print() that outputs "static".
* DefaultAndStaticMethods Class:
* Contains the main method, which calls WithStaticMethod.print().
Key Points:
* Static Methods in Interfaces:
* Static methods in interfaces are not inherited by implementing or extending classes or interfaces.
They belong solely to the interface in which they are declared.
* Default Methods in Interfaces:
* Default methods can be inherited by implementing classes, but they cannot be overridden by static methods in subinterfaces.
Execution Flow:
* The main method calls WithStaticMethod.print().
* This invokes the static method print() defined in the WithStaticMethod interface, which outputs "static".
Therefore, the program compiles successfully and prints static.
NEW QUESTION # 26
Given:
java
interface A {
default void ma() {
}
}
interface B extends A {
static void mb() {
}
}
interface C extends B {
void ma();
void mc();
}
interface D extends C {
void md();
}
interface E extends D {
default void ma() {
}
default void mb() {
}
default void mc() {
}
}
Which interface can be the target of a lambda expression?
- A. None of the above
- B. B
- C. D
- D. A
- E. C
- F. E
Answer: A
Explanation:
In Java, a lambda expression can be used where a target type is a functional interface. A functional interface is an interface that contains exactly one abstract method. This concept is also known as a Single Abstract Method (SAM) type.
Analyzing each interface:
* Interface A: Contains a single default method ma(). Since default methods are not abstract, A has no abstract methods.
* Interface B: Extends A and adds a static method mb(). Static methods are also not abstract, so B has no abstract methods.
* Interface C: Extends B and declares two abstract methods: ma() (which overrides the default method from A) and mc(). Therefore, C has two abstract methods.
* Interface D: Extends C and adds another abstract method md(). Thus, D has three abstract methods.
* Interface E: Extends D and provides default implementations for ma(), mb(), and mc(). However, it does not provide an implementation for md(), leaving it as the only abstract method in E.
For an interface to be a functional interface, it must have exactly one abstract method. In this case, E has one abstract method (md()), so it qualifies as a functional interface. However, the question asks which interface can be the target of a lambda expression. Since E is a functional interface, it can be the target of a lambda expression.
Therefore, the correct answer is D (E).
NEW QUESTION # 27
Given:
java
final Stream<String> strings =
Files.readAllLines(Paths.get("orders.csv"));
strings.skip(1)
.limit(2)
.forEach(System.out::println);
And that the orders.csv file contains:
mathematica
OrderID,Customer,Product,Quantity,Price
1,Kylian Mbappe,Keyboard,2,25.50
2,Teddy Riner,Mouse,1,15.99
3,Sebastien Loeb,Monitor,1,199.99
4,Antoine Griezmann,Headset,3,45.00
What is printed?
- A. arduino
1,Kylian Mbappe,Keyboard,2,25.50
2,Teddy Riner,Mouse,1,15.99
3,Sebastien Loeb,Monitor,1,199.99
4,Antoine Griezmann,Headset,3,45.00 - B. arduino
2,Teddy Riner,Mouse,1,15.99
3,Sebastien Loeb,Monitor,1,199.99 - C. Compilation fails.
- D. An exception is thrown at runtime.
- E. arduino
1,Kylian Mbappe,Keyboard,2,25.50
2,Teddy Riner,Mouse,1,15.99
Answer: C,D
Explanation:
1. Why Does Compilation Fail?
* The error is in this line:
java
final Stream<String> strings = Files.readAllLines(Paths.get("orders.csv"));
* Files.readAllLines(Paths.get("orders.csv")) returns a List<String>,not a Stream<String>.
* A List<String> cannot be assigned to a Stream<String>.
2. Correcting the Code
* The correct way to create a stream from the file:
java
Stream<String> strings = Files.lines(Paths.get("orders.csv"));
* This correctly creates a Stream<String> from the file.
3. Expected Output After Fixing
java
Files.lines(Paths.get("orders.csv"))
skip(1) // Skips the header row
limit(2) // Limits to first two data rows
forEach(System.out::println);
* Output:
arduino
1,Kylian Mbappe,Keyboard,2,25.50
2,Teddy Riner,Mouse,1,15.99
Thus, the correct answer is:Compilation fails.
References:
* Java SE 21 - Files.readAllLines
* Java SE 21 - Files.lines
NEW QUESTION # 28
Given:
java
DoubleSummaryStatistics stats1 = new DoubleSummaryStatistics();
stats1.accept(4.5);
stats1.accept(6.0);
DoubleSummaryStatistics stats2 = new DoubleSummaryStatistics();
stats2.accept(3.0);
stats2.accept(8.5);
stats1.combine(stats2);
System.out.println("Sum: " + stats1.getSum() + ", Max: " + stats1.getMax() + ", Avg: " + stats1.getAverage()); What is printed?
- A. Sum: 22.0, Max: 8.5, Avg: 5.0
- B. Sum: 22.0, Max: 8.5, Avg: 5.5
- C. An exception is thrown at runtime.
- D. Compilation fails.
Answer: B
Explanation:
The DoubleSummaryStatistics class in Java is part of the java.util package and is used to collect and summarize statistics for a stream of double values. Let's analyze how the methods work:
* Initialization and Data Insertion
* stats1.accept(4.5); # Adds 4.5 to stats1.
* stats1.accept(6.0); # Adds 6.0 to stats1.
* stats2.accept(3.0); # Adds 3.0 to stats2.
* stats2.accept(8.5); # Adds 8.5 to stats2.
* Combining stats1 and stats2
* stats1.combine(stats2); merges stats2 into stats1, resulting in one statistics summary containing all values {4.5, 6.0, 3.0, 8.5}.
* Calculating Output Values
* Sum= 4.5 + 6.0 + 3.0 + 8.5 = 22.0
* Max= 8.5
* Average= (22.0) / 4 = 5.5
Thus, the output is:
yaml
Sum: 22.0, Max: 8.5, Avg: 5.5
References:
* Java SE 21 & JDK 21 - DoubleSummaryStatistics
* Java SE 21 - Streams and Statistical Operations
NEW QUESTION # 29
Given:
java
public class Test {
static int count;
synchronized Test() {
count++;
}
public static void main(String[] args) throws InterruptedException {
Runnable task = Test::new;
Thread t1 = new Thread(task);
Thread t2 = new Thread(task);
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(count);
}
}
What is the given program's output?
- A. Compilation fails
- B. It's always 2
- C. It's either 0 or 1
- D. It's always 1
- E. It's either 1 or 2
Answer: A
Explanation:
In this code, the Test class has a static integer field count and a constructor that is declared with the synchronized modifier. In Java, the synchronized modifier can be applied to methods to control access to critical sections, but it cannot be applied directly to constructors. Attempting to declare a constructor as synchronized will result in a compilation error.
Compilation Error Details:
The Java Language Specification does not permit the use of the synchronized modifier on constructors.
Therefore, the compiler will produce an error indicating that the synchronized modifier is not allowed in this context.
Correct Usage:
If you need to synchronize the initialization of instances, you can use a synchronized block within the constructor:
java
public class Test {
static int count;
Test() {
synchronized (Test.class) {
count++;
}
}
public static void main(String[] args) throws InterruptedException {
Runnable task = Test::new;
Thread t1 = new Thread(task);
Thread t2 = new Thread(task);
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(count);
}
}
In this corrected version, the synchronized block within the constructor ensures that the increment operation on count is thread-safe.
Conclusion:
The original program will fail to compile due to the illegal use of the synchronized modifier on the constructor. Therefore, the correct answer is E: Compilation fails.
NEW QUESTION # 30
What do the following print?
java
import java.time.Duration;
public class DividedDuration {
public static void main(String[] args) {
var day = Duration.ofDays(2);
System.out.print(day.dividedBy(8));
}
}
- A. It throws an exception
- B. Compilation fails
- C. PT6H
- D. PT0H
- E. PT0D
Answer: C
Explanation:
In this code, a Duration object day is created representing a duration of 2 days using the Duration.ofDays(2) method. The dividedBy(long divisor) method is then called on this Duration object with the argument 8.
The dividedBy(long divisor) method returns a copy of the original Duration divided by the specified value. In this case, dividing 2 days by 8 results in a duration of 0.25 days. In the ISO-8601 duration format used by Java's Duration class, this is represented as PT6H, which stands for a period of 6 hours.
Therefore, the output of the System.out.print statement is PT6H.
NEW QUESTION # 31
Which three of the following are correct about the Java module system?
- A. Code in an explicitly named module can access types in the unnamed module.
- B. If a request is made to load a type whose package is not defined in any known module, then the module system will attempt to load it from the classpath.
- C. If a package is defined in both a named module and the unnamed module, then the package in the unnamed module is ignored.
- D. The unnamed module can only access packages defined in the unnamed module.
- E. We must add a module descriptor to make an application developed using a Java version prior to SE9 run on Java 11.
- F. The unnamed module exports all of its packages.
Answer: B,C,F
Explanation:
The Java Platform Module System (JPMS), introduced in Java 9, modularizes the Java platform and applications. Understanding the behavior of named and unnamed modules is crucial.
* B. The unnamed module exports all of its packages.
Correct. The unnamed module, which includes all code on the classpath, exports all of its packages. This means that any code can access the public types in these packages. However, the unnamed module cannot be explicitly required by named modules.
* C. If a package is defined in both a named module and the unnamed module, then the package in the unnamed module is ignored.
Correct. In cases where a package is present in both a named module and the unnamed module, the version in the named module takes precedence. The package in the unnamed module is ignored to maintain module integrity and avoid conflicts.
* F. If a request is made to load a type whose package is not defined in any known module, then the module system will attempt to load it from the classpath.
Correct. When the module system cannot find a requested type in any known module, it defaults to searching the classpath (i.e., the unnamed module) to locate the type.
Incorrect Options:
* A. Code in an explicitly named module can access types in the unnamed module.
Incorrect. Named modules cannot access types in the unnamed module. The unnamed module can read from named modules, but the reverse is not allowed to ensure strong encapsulation.
* D. We must add a module descriptor to make an application developed using a Java version prior to SE9 run on Java 11.
Incorrect. Adding a module descriptor (module-info.java) is not mandatory for applications developed before Java 9 to run on Java 11. Such applications can run in the unnamed module without modification.
* E. The unnamed module can only access packages defined in the unnamed module.
Incorrect. The unnamed module can access all packages exported by all named modules, in addition to its own packages.
NEW QUESTION # 32
Consider the following methods to load an implementation of MyService using ServiceLoader. Which of the methods are correct? (Choose all that apply)
- A. MyService service = ServiceLoader.services(MyService.class).getFirstInstance();
- B. MyService service = ServiceLoader.load(MyService.class).findFirst().get();
- C. MyService service = ServiceLoader.getService(MyService.class);
- D. MyService service = ServiceLoader.load(MyService.class).iterator().next();
Answer: B,D
Explanation:
The ServiceLoader class in Java is used to load service providers implementing a given service interface. The following methods are evaluated for their correctness in loading an implementation of MyService:
* A. MyService service = ServiceLoader.load(MyService.class).iterator().next(); This method uses the ServiceLoader.load(MyService.class) to create a ServiceLoader instance for MyService.
Calling iterator().next() retrieves the next available service provider. If no providers are available, a NoSuchElementException will be thrown. This approach is correct but requires handling the potential exception if no providers are found.
* B. MyService service = ServiceLoader.load(MyService.class).findFirst().get(); This method utilizes the findFirst() method introduced in Java 9, which returns an Optional describing the first available service provider. Calling get() on the Optional retrieves the service provider if present; otherwise, a NoSuchElementException is thrown. This approach is correct and provides a more concise way to obtain the first service provider.
* C. MyService service = ServiceLoader.getService(MyService.class);
The ServiceLoader class does not have a method named getService. Therefore, this method is incorrect and will result in a compilation error.
* D. MyService service = ServiceLoader.services(MyService.class).getFirstInstance(); The ServiceLoader class does not have a method named services or getFirstInstance. Therefore, this method is incorrect and will result in a compilation error.
In summary, options A and B are correct methods to load an implementation of MyService using ServiceLoader.
NEW QUESTION # 33
Given:
java
Object input = 42;
String result = switch (input) {
case String s -> "It's a string with value: " + s;
case Double d -> "It's a double with value: " + d;
case Integer i -> "It's an integer with value: " + i;
};
System.out.println(result);
What is printed?
- A. It's a double with value: 42
- B. It's an integer with value: 42
- C. Compilation fails.
- D. It throws an exception at runtime.
- E. null
- F. It's a string with value: 42
Answer: C
Explanation:
* Pattern Matching in switch
* The switch expression introduced inJava 21supportspattern matchingfor different types.
* However,a switch expression must be exhaustive, meaningit must cover all possible cases or provide a default case.
* Why does compilation fail?
* input is an Object, and the switch expression attempts to pattern-match it to String, Double, and Integer.
* If input had been of another type (e.g., Float or Long), there would beno matching case, leading to anon-exhaustive switch.
* Javarequires a default caseto ensure all possible inputs are covered.
* Corrected Code (Adding a default Case)
java
Object input = 42;
String result = switch (input) {
case String s -> "It's a string with value: " + s;
case Double d -> "It's a double with value: " + d;
case Integer i -> "It's an integer with value: " + i;
default -> "Unknown type";
};
System.out.println(result);
* With this change, the codecompiles and runs successfully.
* Output:
vbnet
It's an integer with value: 42
Thus, the correct answer is:Compilation failsdue to a missing default case.
References:
* Java SE 21 - Pattern Matching for switch
* Java SE 21 - switch Expressions
NEW QUESTION # 34
Which of the following isn't a valid option of the jdeps command?
- A. --list-deps
- B. --list-reduced-deps
- C. --generate-open-module
- D. --generate-module-info
- E. --check-deps
- F. --print-module-deps
Answer: E
Explanation:
The jdeps tool is a Java class dependency analyzer that can be used to understand the static dependencies of applications and libraries. It provides several command-line options to customize its behavior.
Valid jdeps Options:
* --generate-open-module: Generates a module declaration (module-info.java) with open directives for the given JAR files or classes.
* --list-deps: Lists the immediate dependencies of the specified classes or JAR files.
* --generate-module-info: Generates a module declaration (module-info.java) for the given JAR files or classes.
* --print-module-deps: Prints the module dependencies of the specified modules or JAR files.
* --list-reduced-deps: Lists the reduced dependencies, showing only the packages that are directly depended upon.
Invalid Option:
* --check-deps: There is no --check-deps option in the jdeps tool.
Conclusion:
Option A (--check-deps) is not a valid option of the jdeps command.
NEW QUESTION # 35
Given:
java
String s = " ";
System.out.print("[" + s.strip());
s = " hello ";
System.out.print("," + s.strip());
s = "h i ";
System.out.print("," + s.strip() + "]");
What is printed?
- A. [,hello,hi]
- B. [ ,hello,h i]
- C. [,hello,h i]
- D. [ , hello ,hi ]
Answer: C
Explanation:
In this code, the strip() method is used to remove leading and trailing whitespace from strings. The strip() method, introduced in Java 11, is Unicode-aware and removes all leading and trailing characters that are considered whitespace according to the Unicode standard.
docs.oracle.com
Analysis of Each Statement:
* First Statement:
java
String s = " ";
System.out.print("[" + s.strip());
* The string s contains four spaces.
* Applying s.strip() removes all leading and trailing spaces, resulting in an empty string.
* The output is "[" followed by the empty string, so the printed result is "[".
* Second Statement:
java
s = " hello ";
System.out.print("," + s.strip());
* The string s is now " hello ".
* Applying s.strip() removes all leading and trailing spaces, resulting in "hello".
* The output is "," followed by "hello", so the printed result is ",hello".
* Third Statement:
java
s = "h i ";
System.out.print("," + s.strip() + "]");
* The string s is now "h i ".
* Applying s.strip() removes the trailing spaces, resulting in "h i".
* The output is "," followed by "h i" and then "]", so the printed result is ",h i]".
Combined Output:
Combining all parts, the final output is:
css
[,hello,h i]
NEW QUESTION # 36
Given:
java
List<String> l1 = new ArrayList<>(List.of("a", "b"));
List<String> l2 = new ArrayList<>(Collections.singletonList("c"));
Collections.copy(l1, l2);
l2.set(0, "d");
System.out.println(l1);
What is the output of the given code fragment?
- A. [d]
- B. [c, b]
- C. [a, b]
- D. [d, b]
- E. An IndexOutOfBoundsException is thrown
- F. An UnsupportedOperationException is thrown
Answer: B
Explanation:
In this code, two lists l1 and l2 are created and initialized as follows:
* l1 Initialization:
* Created using List.of("a", "b"), which returns an immutable list containing the elements "a" and
"b".
* Wrapped with new ArrayList<>(...) to create a mutable ArrayList containing the same elements.
* l2 Initialization:
* Created using Collections.singletonList("c"), which returns an immutable list containing the single element "c".
* Wrapped with new ArrayList<>(...) to create a mutable ArrayList containing the same element.
State of Lists Before Collections.copy:
* l1: ["a", "b"]
* l2: ["c"]
Collections.copy(l1, l2):
The Collections.copy method copies elements from the source list (l2) into the destination list (l1). The destination list must have at least as many elements as the source list; otherwise, an IndexOutOfBoundsException is thrown.
In this case, l1 has two elements, and l2 has one element, so the copy operation is valid. After copying, the first element of l1 is replaced with the first element of l2:
* l1 after copy: ["c", "b"]
l2.set(0, "d"):
This line sets the first element of l2 to "d".
* l2 after set: ["d"]
Final State of Lists:
* l1: ["c", "b"]
* l2: ["d"]
The System.out.println(l1); statement outputs the current state of l1, which is ["c", "b"]. Therefore, the correct answer is C: [c, b].
NEW QUESTION # 37
......
1z0-830 Exam Practice Materials Collection: https://passleader.testpassking.com/1z0-830-exam-testking-pass.html