...
This noncompliant code example attempts to concatenate the string elements of array c values and store the result as the first element. It uses an ArrayIndexOutOfBoundsException to detect the end of the array and reinitialize the value of variable i to 0 in the catch block. However, if some element of the array is null, a NullPointerException results. This exception is caught and ignored, a violation of EXC15-J. Do not catch NullPointerException. Consequently, the variable i is not reinitialized to 0 in the catch block.
| Code Block | ||
|---|---|---|
| ||
String cvalues[] = new String[3]; cvalues[0] = "value1"; cvalues[1] = "value2"; cvalues[2] = "value3"; int i; cvalues[1] = null; // gets null value try { i = 0; while(true) { cvalues[0] = cvalues[0].concat(cvalues[i + 1]); // Concatenate and store in cvalues[0] i++; } } catch (ArrayIndexOutOfBoundsException e) { i = 0; // Attempts to initialize i to 0 } catch (NullPointerException npe) { // Ignores } |
It uses an ArrayIndexOutOfBoundsException to detect the end of the array and reinitialize the value of variable i to 0 in the catch block. However, if some element of the array is null, a NullPointerException results. This exception is caught and ignored, a violation of EXC15-J. Do not catch NullPointerException. Consequently, the variable i is not reinitialized to 0 in the catch block.
The real purpose of exception handling is to detect and recover from exceptional conditions and not to willfully transfer control flow. Besides, performance wise, the exception-based idiom is far slower than the standard code block. It also prevents certain optimizations that the JVM would otherwise perform.
...
| Code Block | ||
|---|---|---|
| ||
String cvalues[] = new String[3]; cvalues[0] = "value1"; cvalues[1] = "value2"; cvalues[2] = "value3"; int i; for (i = 1; i < cvalues.length; i++) { cvalues[0] = cvalues[0].concat(cvalues[i]); } i = 0; // Initialize i to 0 after operation |
Risk Assessment
The use of Using exceptions for anything but detecting and handling exceptional conditions can result in performance degradation and poor design.
...