Exception matching | CodeGuru

Exception matching

Bruce Eckel’s Thinking in Java Contents | Prev | Next When an exception is thrown, the exception-handling system looks through the “nearest” handlers in the order they are written. When it finds a match, the exception is considered handled, and no further searching occurs. Matching an exception doesn’t require a perfect match between the exception […]

Written By
CodeGuru Staff
CodeGuru Staff
Mar 1, 2001
2 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

When


an exception is thrown, the exception-handling system looks through the


“nearest” handlers in the order they are written. When it finds a


match, the exception is considered handled, and no further searching occurs.

Matching


an exception doesn’t require a perfect match between the exception and


its handler. A derived-class object will match a handler for the base class, as


shown in

this
example:
//: Human.java
// Catching Exception Hierarchies
 
class Annoyance extends Exception {}
class Sneeze extends Annoyance {}
 
public class Human {
  public static void main(String[] args) {
    try {
      throw new Sneeze();
    } catch(Sneeze s) {
      System.out.println("Caught Sneeze");
    } catch(Annoyance a) {
      System.out.println("Caught Annoyance");
    }
  }
} ///:~ 

The


Sneeze

exception will be caught by the first


catch

clause that it matches, which is the first one, of course. However, if you


remove the first catch clause:

    try {
      throw new Sneeze();
    } catch(Annoyance a) {
      System.out.println("Caught Annoyance");
    }

The


remaining catch clause will still work because it’s catching the base


class of


Sneeze

.


Put another way,


catch(Annoyance
e)

will catch a


Annoyance
or
any class derived from it

.


This is useful because if you decide to add more exceptions to a method, if


they’re all inherited from the same base class then the client


programmer’s code will not need changing, assuming they catch the base


class, at the very least.

If


you try to “mask” the derived-class exceptions by putting the


base-class catch clause first, like this:

    try {
      throw new Sneeze();
    } catch(Annoyance a) {
      System.out.println("Caught Annoyance");
    } catch(Sneeze s) {
      System.out.println("Caught Sneeze");
    }

the


compiler will give you an error message, since it sees that the


Sneeze

catch-clause can never be reached.


Exception
guidelines

Use


exceptions to:

  1. Fix
    the problem and call the method (which caused the exception) again.
  2. Patch
    things up and continue without retrying the method.
  3. Calculate
    some alternative result instead of what the method was supposed to produce.
  4. Do
    whatever you can in the current context and rethrow the
    same
    exception to a higher context.
  5. Do
    whatever you can in the current context and throw a
    different
    exception to a higher context.
  6. Terminate
    the program.
  7. Simplify.
    If your exception scheme makes things more complicated, then it is painful and
    annoying to use.
  8. Make
    your library and program safer. This is a short-term investment (for debugging)
    and a long-term investment (for application robustness).
Contents

|

Prev

|

Next
CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.