Difficulty: Easy
Correct Answer: This program fails to compile due to an error at line 18.
Explanation:
Introduction / Context:
This question focuses on Java’s checked exceptions and resource cleanup. Since FileOutputStream.close()
declares throws IOException
, calling it must be handled or declared. The code calls close()
in finally
without handling it.
Given Data / Assumptions:
FileOutputStream
, including close()
, can throw IOException
.finally
executes whether or not an exception occurs.out.close()
, and main
does not declare throws IOException
.
Concept / Approach:
Checked exceptions must be either caught or declared. The compiler flags the call to out.close()
as an unhandled checked exception. Additionally, out
could be null
if the constructor fails, but the compilation error is about the unhandled exception, not a NullPointerException (which would be a runtime concern).
Step-by-Step Solution:
finally
block calls out.close()
.Since close()
declares throws IOException
, wrap it in a try/catch or test for null and handle exceptions.Without handling, compilation fails at this line.
Verification / Alternative check:
Fix by using try-with-resources or by writing finally { if (out != null) { try { out.close(); } catch(IOException e) { / handle */ } } }
.
Why Other Options Are Wrong:
IOException
.finally
block.
Common Pitfalls:
Assuming code in finally
does not need its own exception handling; it does.
Final Answer:
This program fails to compile due to an error at line 18.
Discussion & Comments