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:

* Will be fully defined at the same time the ``++Exception++`` is instantiated.
* Won't be updated or corrupted by a questionable error handler.

This will enable developers to quickly understand what went wrong.


== Noncompliant Code Example

[source,java]
----
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

[source,java]
----
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;
  }

}
----


ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

include::message.adoc[]

'''
== Comments And Links
(visible only on this page)

include::comments-and-links.adoc[]
endif::env-github,rspecator-view[]
