| Calling `System.exit` terminates the java process and returns a status code. | |
| Since it is disruptive to shut down the process within library code, | |
| `System.exit` should not be called outside of a main method. | |
| Instead of calling `System.exit` consider throwing an unchecked exception to | |
| signal failure. | |
| For example, prefer this: | |
| ```java | |
| public static void main(String[] args) { | |
| try { | |
| doSomething(args[0]); | |
| } catch (MyUncheckedException e) { | |
| System.err.println(e.getMessage()); | |
| System.exit(1); | |
| } | |
| } | |
| // In library code | |
| public static void doSomething(String s) { | |
| try { | |
| doSomethingElse(s); | |
| } catch (MyCheckedException e) { | |
| throw new MyUncheckedException(e); | |
| } | |
| } | |
| ``` | |
| to this: | |
| ```java | |
| public static void main(String[] args) { | |
| doSomething(args[0]); | |
| } | |
| // In library code | |
| public static void doSomething(String s) { | |
| try { | |
| doSomethingElse(s) | |
| } catch (MyCheckedException e) { | |
| System.err.println(e.getMessage()); | |
| System.exit(1); | |
| } | |
| } | |
| ``` |