Question: In a Java 7 multicatch block such as the following:

```
try {
    // code that throws exception
} catch (CharacterCodingException | UnknownServiceException ex) {
    // handle exception
}

```

what is the compile-time type of `ex`? Is it the most derived class that both exception types have in common? In this example that would be an `IOException`.

Answer: 
Yes, the type of `ex` is the most specific supertype of both `CharacterCodingException` and `UnknownServiceException`, which would be `IOException`.

**Edit:** Straight from the horse's mouth on <http://cr.openjdk.java.net/~darcy/ProjectCoin/ProjectCoin-Documentation-v0.83.html#multi_catch>:

> 
> Informally, the lub (least upper bound) is the most specific supertype of the types in question.
> 
> 
>
In JSL 7 <http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20-510>

§14.20 > The declared type of an exception parameter that denotes its type as a union with
alternatives D1 | D2 | ... | Dn is lub(D1, D2, ..., Dn) (§15.12.2.7).

The definition of `lub()` i.e. *the least upper bound* is quite convoluted. Fortunately types we are talking about here are usually simply non generic subclasses of Throwable, and `lub()` yields the most specific super class.

For a more complicated case, consider 

```
class E1 extends Exception implements G<A>
class E2 extends Error implements G<B>

lub(E1, E2) = Throwable & G<?>

```