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:
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:
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);
}
}
Suppress false positives by adding the suppression annotation @SuppressWarnings("SystemExitOutsideMain")
to the enclosing element.