# Interface CodeBuilder.CatchBuilder

Enclosing interface:
  `CodeBuilder`

public static sealed interface CodeBuilder.CatchBuilder
A builder to add catch blocks.

Since:
  24
See Also:
  - `CodeBuilder.trying(java.util.function.Consumer<java.lang.classfile.CodeBuilder.BlockCodeBuilder>, java.util.function.Consumer<java.lang.classfile.CodeBuilder.CatchBuilder>)`
  - `ExceptionCatch`

## Method Summary

Modifier and Type
Method
Description
`CodeBuilder.CatchBuilder`
`catching(ClassDesc exceptionType, Consumer<CodeBuilder.BlockCodeBuilder> catchHandler)`
Adds a catch block that catches an exception of the given type.
`void`
`catchingAll(Consumer<CodeBuilder.BlockCodeBuilder> catchAllHandler)`
Adds a "catch" block that catches all exceptions.
`CodeBuilder.CatchBuilder`
`catchingMulti(List<ClassDesc> exceptionTypes, Consumer<CodeBuilder.BlockCodeBuilder> catchHandler)`
Adds a catch block that catches exceptions of the given types.

## Method Details

### catching

CodeBuilder.CatchBuilder catching(ClassDesc exceptionType, Consumer<CodeBuilder.BlockCodeBuilder> catchHandler)
Adds a catch block that catches an exception of the given type.

The caught exception will be on top of the operand stack when the catch block is entered.

The `CodeBuilder.BlockCodeBuilder.breakLabel()` for the catch block corresponds to the break label of the `tryHandler` block in `CodeBuilder.trying(java.util.function.Consumer<java.lang.classfile.CodeBuilder.BlockCodeBuilder>, java.util.function.Consumer<java.lang.classfile.CodeBuilder.CatchBuilder>)`.

If the type of exception is `null` then the catch block catches all exceptions.

Parameters:
  `exceptionType` - the type of exception to catch, may be `null`
  `catchHandler` - handler that receives a `CodeBuilder.BlockCodeBuilder` to generate the body of the catch block
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if an existing catch block catches an exception of the given type or `exceptionType` represents a primitive type
See Also:
  - `catchingMulti(java.util.List<java.lang.constant.ClassDesc>, java.util.function.Consumer<java.lang.classfile.CodeBuilder.BlockCodeBuilder>)`
  - `catchingAll(java.util.function.Consumer<java.lang.classfile.CodeBuilder.BlockCodeBuilder>)`

### catchingMulti

CodeBuilder.CatchBuilder catchingMulti(List<ClassDesc> exceptionTypes, Consumer<CodeBuilder.BlockCodeBuilder> catchHandler)
Adds a catch block that catches exceptions of the given types.

The caught exception will be on top of the operand stack when the catch block is entered.

The `CodeBuilder.BlockCodeBuilder.breakLabel()` for the catch block corresponds to the break label of the `tryHandler` block in `CodeBuilder.trying(java.util.function.Consumer<java.lang.classfile.CodeBuilder.BlockCodeBuilder>, java.util.function.Consumer<java.lang.classfile.CodeBuilder.CatchBuilder>)`.

If list of exception types is empty then the catch block catches all exceptions.

Parameters:
  `exceptionTypes` - the types of exception to catch
  `catchHandler` - handler that receives a `CodeBuilder.BlockCodeBuilder` to generate the body of the catch block
Returns:
  this builder
Throws:
  `IllegalArgumentException` - if an existing catch block catches one or more exceptions of the given types
See Also:
  - `catching(java.lang.constant.ClassDesc, java.util.function.Consumer<java.lang.classfile.CodeBuilder.BlockCodeBuilder>)`
  - `catchingAll(java.util.function.Consumer<java.lang.classfile.CodeBuilder.BlockCodeBuilder>)`

### catchingAll

void catchingAll(Consumer<CodeBuilder.BlockCodeBuilder> catchAllHandler)
Adds a "catch" block that catches all exceptions.

The `CodeBuilder.BlockCodeBuilder.breakLabel()` for the catch block corresponds to the break label of the `tryHandler` block in `CodeBuilder.trying(java.util.function.Consumer<java.lang.classfile.CodeBuilder.BlockCodeBuilder>, java.util.function.Consumer<java.lang.classfile.CodeBuilder.CatchBuilder>)`.

The caught exception will be on top of the operand stack when the catch block is entered.

Parameters:
  `catchAllHandler` - handler that receives a `CodeBuilder.BlockCodeBuilder` to generate the body of the catch block
Throws:
  `IllegalArgumentException` - if an existing catch block catches all exceptions
See Also:
  - `catching(java.lang.constant.ClassDesc, java.util.function.Consumer<java.lang.classfile.CodeBuilder.BlockCodeBuilder>)`
  - `catchingMulti(java.util.List<java.lang.constant.ClassDesc>, java.util.function.Consumer<java.lang.classfile.CodeBuilder.BlockCodeBuilder>)`