Exceptions are meant to represent the application's state at the point at which an error occurred.

Making all fields in an Exception class final ensures that this state:

This will enable developers to quickly understand what went wrong.

Noncompliant Code Example

public class MyException extends Exception {

  private int status;                               // Noncompliant

  public MyException(String message) {
    super(message);
  }

  public int getStatus() {
    return status;
  }

  public void setStatus(int status) {
    this.status = status;
  }

}

Compliant Solution

public class MyException extends Exception {

  private final int status;

  public MyException(String message, int status) {
    super(message);
    this.status = status;
  }

  public int getStatus() {
    return status;
  }

}