Sei sulla pagina 1di 13

Interview question and answer on

Exception Handling in Java


March 2, 2017 SJ Exception Handling, Interview Questions 0
In this article, we will cover some of the interview questions with their justification on Java Exception
handling

These are most frequently asked interview question from Java Exception handling

Read Exception handling concepts in detail

Section A) Exception & Error:


Q) What is an Exception in Java ?
 Exception: An event which disrupts normal execution of a program is known as exception
Q) What is an Exception handling in Java ?
 When such event occurs during execution of the program, in Java terms it is called as
exception thrown or exception raised at runtime
 Which results in abrupt or abnormal termination of the program and rest of the program
(code i.e.; after the line where exception is raised) won’t be executed
 To avoid abnormal termination of the program, all possible exceptions that could be
thrown/raised needs to be handled
 This is known as exception handling in Java
 This helps to maintain graceful termination of the program
 Read Exception handling in Java for more detail
Q) Explain exception hierarchy in Java ?
 Throwable class is the root class for every exception and it branches out to 2 main
categories i.e.; Exception & Error
 Read Exception hierarchy in Java in detail
 Refer below figure for Exception hierarchy

Q) What is the difference between Exception v/s Error in Java ?


 Both are sub-class of Throwable class
 Error is due to lack of system resources and it is non-recoverable. Therefore it isn’t
feasible to handled by programmer
 Exception is due to programmatic logic and it is recoverable. Therefore it must be
handled using either try-catch block or throws clause
 Read Error v/s Exception in Java in detail
Q) What is the super class for Exception & Error in Java ?
 java.lang.Throwable is the root class for all types of Error & ExceptionQ) What is the
difference between checked exception v/s unchecked exceptions in Java ?
 Read checked exception v/s unchecked exception for more details
Checked Exception Unchecked Exception

Exception which are checked at compile-time during compilation is known as Checked


Exception Exception which are NOT checked at compile-time is known

Alternate definition: any line of code that could possibly throw exception, and if raised Alternate definition: any line of code that could possibly thr
during compilation is said to be checked exception be unchecked exception

Example of unchecked-exception :
Except Runtime exception & its child classes and error & its child classes, all other exception  Runtime exception & its child classes
fall under the category of Checked Exception  error & its child classes
Some of the checked exception Some of the unchecked exception
 IOException  RuntimeException
 SQLException  NullPointerException
 InterruptedException  ArithmeticException
 Etc  etc

Q) Explain important keywords in Java Exception handling ?


Read 5 important keywords in Java Exception handling in detail with examples
1. try
2. catch
3. finally
4. throw
5. throws

Section B) try-catch-finally blocks combination:


Q) Is it valid to keep only try-block without catch-block or finally-block ?
 No, keeping only try-block will raise compile-time error stating “Syntax error, insert
“Finally” to complete BlockStatements”
 There are 3 possible combination for try block
 1st combination : try-block is followed by catch-block only
 2nd combination : try-block is followed by finally-block only
 3rd combination : is sequence of try-catch-finally block
 The only other possible combination is, try block followed by multiple catch blocks

Q) Whether multiple catch is possible for single try-block ?


 Yes, it is very much possible to declare multiple catch block for single try-block
 Example, as shown in the below screen-capture
Q) What are rules for declaring multiple catch-blocks ?
 For try with multiple catch block, order of exception declaration is very important
 That’s, most specific exception must come up 1st in the order and followed by more
general exception
 In other words, if there exists parent-child relationship between 2 exception then child
exception must come 1st up in the order and then followed by parent exception
 Otherwise, compile-time error will be thrown stating “Exception <name-of-exception> has
already been caught”
 Also, declaring multiple catch with same type of exception results in compile-time error
stating “Unreachable catch block for <exception-type>. It is already handled by the catch
block for <exception-type>”
 Read try with multiple catch block for details
Q) Whether it is very mandatory to include curly braces for try-catch-finally block, what happens if
not included ?
 Yes, it is must to include curly braces for try-block, catch-block and finally-block even if it
contains just one line of code
 Otherwise, compile-time error will be thrown as shown in the below screen-capture
 Read try-catch block and finally block for details
Q) Whether nested try-catch block is possible inside outer try-catch block ?
 Yes, nesting try-catch block inside another try-catch is possible & valid
 It can be nested inside another try-block, catch-block or finally-block
 Read nested try-catch block for details
Q) Can we write any Java statements in between try-block & catch-block ?
 No, any statement in between try block & catch block results in compile-time error
 Example, as shown in the below screen capture

Q) What is the main purpose of finally-block in Java ?


 The main purpose of finally-block is to perform clean-up activities or code clean-up like
closing database connection & closing streams or file resources, etc.
 finally-block is always associated with try-catch block
 Advantage: The beauty of finally-block is that, it is executed irrespective of whether
exception is thrown or NOT and its handled or NOT
 Read finally block in detail
Q) Can we have finally-block followed by try-block (without catch-block) ?
 Yes, it is valid sequence to have try-block followed by finally-block (without catch-block or
multiple block in between them)
 Read finally block in detail to understand this sequence
Q) Whether it is possible to write any statements after finally-block ?
 If there is no return statement for a method, then it is valid to write any valid statements
after finally-block
 But if there is a method that returns a value then writing any statement after finally-block
results in compile-time error
 If there is a return statement after finally-block, then it is valid
 Read returning a value from method having try-catch-finally block for understanding all
scenarios
Q) Whether finally-block always executed, irrespective of any exception ?
 finally-block always executed irrespective of whether exception thrown or NOT and it is
handled or NOT
 But on one condition, finally-block wont executed when it
encounters System.exit(0); method as it kills program execution further
 Read return statement with finally block for understanding exit scenario
Q) Will finally-block always be executed, even if there is return statement inside both try-block or
catch-block ?
 Yes, finally-block always executed even if there is a return statement inside try-catch
block
 Read return statement with finally block for understanding both valid & exception
scenarios
Q) Explain various possible combinations to write return in a method enclosed with try-catch-
finally block ?
 There are 9 possible combination to return a value from method enclosing try-catch-
finally block
 Read Various possible combination for returning a value from method having try-catch-
finally block in detail
Q) Whether exception raises from catch-block ?
 It is very much possible that, code inside catch-block too raises exception and this need
to be handled
 Otherwise, program terminates abnormally
Q) Whether it is possible to declare catch-block with same exception-type twice, for example
ArithmeticException ?
 No, it isn’t possible to declare multiple catch with same exception-type
 This leads to compile-time error stating “Unreachable catch block for ArithmeticException.
It is already handled by the catch block for ArithmeticException”
 Example, as shown in the below screen-capture
Section C) Exception information:
Q) What are various methods available to print exception information in console ?
 Whenever exception is raised. then respective method from where exception is raised is
responsible for creating an exception object with following information like
1. Name of the exception
2. Description of the exception
3. Location at which exception is raised i.e.; stack trace
 Read Various methods to print exception information in Java for more detail
Method Description Form
Name-of-ex : Description
Prints all details related to exception from At location (StackTrace)
printStackTrace(); exception object created by method
Returns name & description of the exception in
toString(); String format Name-of-ex : Description
Returns detailed description of the exception
getMessage(); thrown Description-of-ex
Returns the cause of the exception;
Otherwise, returns null
getCause(); Caused By: classname &
Q) Which method is used by default exception handler to print stack trace ?
 printStackTrace(); method of Throwable class
Section D) throw & throws keywords and Custom Exception:
Q) Explain throw keyword with its rules ?
throw keyword:
 User or programmer can also throw/raise exception explicitly at runtime on the basis of
some business condition
 To raise such exception explicitly during program execution, we need to
use throw keyword
 Syntax: throw instanceOfThrowableType;
 The main purpose of throw keyword is used to throw user-defined exception or custom
exception
 Read throw keyword for more details
Rules:
 Both checked & unchecked exception can be thrown using throw keyword
 The caller-method has to handle exception, whenever target method declares exception
using throw keyword
 Any valid Java statement after throw keyword is not reachable and it raises compile-time
error
 Whenever thrown exception using throw keyword refers to null reference, then instead of
throwing actual exception, NullPointerException will be thrown
 Re-throwing: Caught exception in catch block can be re-thrown using throw keyword after
some alteration
Q) Explain throws keyword with its rules ?
throws keyword:
 throws keyword is used to declare exception that might raise during program execution
 whenever exception might thrown from program, then programmer doesn’t necessarily
need to handle that exception using try-catch block instead simply declare that
exception using throws clause next to method signature
 But this forces/tells caller-method to handle that exception; but again caller can handle
that exception using try-catch block or re-declare those exception with throws clause
 In other words it can also be stated that, it provides information to the caller method that
possible exception might raise during program execution and it need to be handled
 Read throws keyword for more detail
Rules:
 Whenever exception is declared using throws clause by target method, then caller
method must handle this exception-type
 either using try-catch block or declaring throws clause mentioning exception-type
 Any number of exceptions can be declared using throws clause, but they are all must be
separated using commas (,)
 Constructor can also declare exception using throws clause
 User-defined exception or custom exception can also be declared using throws clause
Q) Can we declare unchecked exception using throws keyword in method signature ?
 Yes, it is possible to declare unchecked exception using throws clause
Q) What happens, if there are some Java statements after explicit exception thrown using throw
keyword ?
 Compile-time error will be thrown stating “Unreachable code”
 Example, as shown in the below screen-capture
Q) Why only object of type Throwable (or its sub-type) is allowed to thrown ?
 Using throw keyword, only exception can be thrown
 Therefore, all exception thrown should fall in the exception hierarchy (extending any one
of the types of Throwable class)
 It can be checked or unchecked or user-define exception
Q) Whether it is valid to throw Java object, which isn’t extending any Exception/Error from
exception hierarchy ?
 As explained in the above question, only exception can be thrown which should extend
any one of the types of Throwable class
 Throwing normal Java object which isn’t extending any exception-type from exception
hierarchy will results in compile-time error stating “incompatible types”
Q) Whether it is a normal termination or abnormal termination, if we are using throws keyword ?
 It’s a abnormal termination, irrespective of whether program raises any exceptions or
NOT
 When we are using throws keyword to handle any exception raised during program
execution, then it is always considered as a abnormal termination
Q) Whether it is possible to create custom exception and can we throw this custom made exception ?
 Yes, it is very much possible to create user-defined exception
 Condition: while creating user-defined exception, it should extend any one of the types of
Throwable class
 Otherwise, while throwing user-defined exception a compile-time error will be thrown
stating “incompatible types”
 Read User-defined exception or Custom exception for more details
Q) Whether it is possible to throw user-defined exception ?
 Yes, it is possible to throw user-defined exception
 The only condition is that it should extend any one of the types of Throwable class
 Otherwise, while throwing user-defined exception a compile-time error will be thrown
stating “incompatible types”
Q) How to write custom exception, explain its steps ?
 It is very simple
 Write a Java class with any valid names adhering to Java syntax and extend any one of
the types of Throwable class
 Later, this exception can be used with throw, throws or catch keyword in exception
handling
Q) Explain Exception propagation ?
Exception propagation:
 Whenever exception is raised from method and if it isn’t handled in the same method,
then it is propagated back to the caller method
 This step is repeated until handler code is found in one of the caller method in the
runtime stack or else it reaches the bottom of the runtime stack
 This is known as Exception propagation
 Read Exception propagation for more details
Rules for Exception propagation:
 By default, unchecked exception is propagated back to the runtime stack one-by-one
until it finds handler code or it reached the bottom of the stack
 Checked exception isn’t propagated, rather compiler forces the programmer to handle
checked exception in the same method by surrounding with try-catch block or declaring
with throws keyword
Q) Explain re-throwing an exception ?
It is possible & valid to re-throw caught exception in the catch block. It is generally used in few cases,

 When a method catches exception and doesn’t want to handle, instead it want to
propagate exception to caller-method (basically delegating the responsibly to caller
method)
 Sometimes, method catches one exception-type and convert to another exception-type
before throwing using throw clause
 It is also used to add some user message to caught exception before re-throwing to
caller-method
 Note: in all cases, it the responsibility of the caller method to handle this exception
whether by surrounding with try-catch or declare throws clause

Section E) Difference between:


Q) Difference between throw and throws keywords ?
 Read throw v/s throws keyword for more details with example
throw clause/keyword throws clause/keywo
throws keyword is used to declare excep
delegate/indicate exception handling resp
throw keyword is used to throw exception explicitly method
throw keyword is always followed by instance of Throwable throws keyword is always followed by ex
type or exception type comma separating them)
throw keyword is used within method i.e.; to throw exception
from try-catch block enclosed within method throws keyword is used next to method s
Syntax: access_modifier return_type me
Syntax: throw instanceOfExceptionType; exception_list;
Maximum of only one exception can be thrown using throw
keyword
Thrown exception can be checked exception or unchecked Any number of exception can be thrown
exception or user-defined exception But they are all separated by comma (,)

Q) Difference between try-catch block v/s throws keyword ?


try-catch block throws keyword
Using try-catch block, we can handle exception Whereas using throws keyword, we can simp
surrounding code that might raise an exception exception that might raise from that method
Caught exception in the catch block can be re-thrown after
some alteration There is no such flexibility, as its directly thr
Doesn’t guarantee graceful termination
try-catch block ensures graceful termination for that In most cases, throws declaration leads to ab
particular method termination
Except one scenario when catch block throws exception
Q) Explain the different between final v/s finally v/s finalize() ?
 final is a keyword used for restricting further alteration in inheritance
 finally is associated with try-catch in exception handling for clean-up activity
 finalize() is a method associated with garbage collector to de-allocate resource
associated with Object
 Read final v/s finally v/s finalize for more detail with examples
Q) Explain the difference between ClassNotFoundException v/s NoClassDefFoundError in detail ?
 Read difference between ClassNotFoundException v/s NoClassDefFoundError for more
details
ClassNotFoundException NoClassDefFoundErro
This is generally occurs, when required .class is missing when
program encounters class load statement such as, This is very much similar but differenc
 Class.forName(“class.name”); .class file is available during compile-t
 ClassLoader.loadClass(“class.name”); at runtime
 ClassLoader.findSystemClass(“class.name”); Possible Reason:
Reason: required file missing in the class-path during execution  It is deleted after compilation o
of program without updating JAR file at runtime  there could be version mismatc

Fully qualified class name Fully qualified class name


is java.lang.ClassNotFoundException is java.lang.NoClassDefFoundError
It falls under the category of Exception i.e.; direct sub-class It falls under the category of Error i.e.;
of java.lang.Exception of java.lang.Error through java.lang.
All errors come under unchecked exce
It is a checked exception, therefore it needs to be handled, therefore NoClassDefFoundError is a
whenever class loading is encountered as stated in point no.1 exception
As it is checked exception, programmer can provide handling Errors are thrown by Java Runtime sy
code either using try-catch block or can declare throws clause program execution
Therefore, it is recoverable Therefore, it is non-recoverable

Section F) Java 1.7 version features:


Q) Explain, what are the new features introduced in Java 1.7 version ?
 New featured introduced in Java 1.7 version are,
 try-with-resources for automatic resource management
 multi-catch block for grouping different exception-type for similar handler-code with pipe
character separating them
Q) Explain Automatic Resource management feature in Java exception handling ?
try-with-resources statement:
 Using try-with-resources statement, programmer doesn’t need to explicitly close opened
resources
 Rather it will be automatically closed once control reaches end of try-catch block
 This new feature introduced in Java 1.7 version is alternatively referred as Automatic
Resource Management i.e.; ARM
 Read try-with-resources statement for more detail with example
Rules:
 All resources declared as part of try-with-resources statement must
be AutoCloseable (i.e.; all resources must implements java.lang.AutoCloseable interface)
 Multiple resources can be declared inside try block argument; but they are all must
be separated by semi-colon (;)
 While using try-with-resources statement, try-block itself is enough. There is no
compulsion to write/code either catch-block or finally-block followingtry block, whereas in
prior versions try-block must be followed by either catch-block or finally-block
 All resource reference variable declared inside try-block argument are implicitly final.
Therefore, resource reference variable can’t changed or re-assigned within try-block
Q) Whether it is mandatory to follow catch-block or finally-block, after try-with-resources statement
(try-block) ?
 It isn’t mandatory to have either catch-block or finally-block following try-block
 try-block alone can work without the need of catch-block or finally-block

Q) How is multi-catch block is useful over traditional multiple catch blocks ?


Multi-catch block:
 In Java 1.6 or lesser version, whenever multiple exception is thrown, then programmer
has to provide multiple catch blockto catch different types of exception, although
exception handling code is same
 But in Java 1.7 version, we can write/code single catch block to handle multiple types of
exceptions using multi-catch block
 Multi-catch block helps to provide same handler-code by grouping different exception-
types. And program/code becomes more readable with lesser lines of code
 Read Multi catch block in Java 1.7 version for more detail with example
Rules:
 There shouldn’t be any relationship between declared exception-type in multi-catch block.
 Otherwise, compile-time error will be thrown stating “The exception <child-exception-type>
is already caught by the alternative <parent-exception-type>”
 If a catch block handles more than one exception-type (i.e.; multi-catch block), then
exception variable is implicitly final
 Any changes or re-assignment to this implicit final variable within catch block results
in compile-time error

Section H) Others:
Q) Explain rules for exception handling with respect to method overriding ?
 Read rules for Exception handling w.r.t Method Overriding in Java for more details
 Below listed are the rules for exception handling when overriding,
Rule 1: If parent-class method doesn’t declare any exception,
1. Then child-class overriding-method can declare any type of unchecked-exception (this is
the only possibility)
2. If child-class overriding-method declares checked-exception, then compiler
throws compile-time error stating “Exception <exception-type> is not compatible with
throws clause in ParentClass.testMethod()”
3. Then child-class overriding-method can declare no exception (this is very much same as
that of overridden-method of parent-class –> exactly same method signature)
Rule 2: If parent-class method declares unchecked exception,
1. Then child-class overriding-method can declare any type of unchecked-exception (not
necessarily same exception as that of parent-class’ method)
2. If child-class overriding-method declares any checked-exception, then compiler
throws compile-time error stating “Exception <exception-type> is not compatible with
throws clause in ParentClass.testMethod()”
3. Then child-class overriding-method can declare no exception
Rule 3: If parent-class method declares checked exception,
1. Then child-class overriding-method can declare any type of unchecked-exception
2. Then child-class overriding-method can declare same type of checked-exception or one of
its sub-class or no exception
3. Then child-class overriding-method can declare no exception
Rule 4: If parent-class method declares both checked & unchecked exceptions,
1. Then child-class overriding method can declare any type of unchecked-exception
2. Then child-class overriding-method can declare same type of checked-exception or one of
its sub-class or no exception
3. Then child-class overriding-method can declare no exception
Q) What are unreachable block in Java ?
There are various scenarios when this compile-time error is encountered

 If there are any statement after throw clause


 When declaring multiple catch blocks, parent-exception declared before than child-
exception
 Declaring catch-block for checked-exception, when actually try-block never going to throw
that exception
 Any valid Java statements after return statement
 Any valid Java statement after finally-block, if finally-block is returning some value
 Note: try examples on your own
Q) Does a method can return an exception ?
 A method can only throw exception
 Method can’t return exception
 Note: until & unless method’s return-type itself is valid Exception or one of its sub-types

Potrebbero piacerti anche