Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

This noncompliant code example also violates ERR13-J. Do not throw RuntimeException, Exception, or Throwable. It falls under EX0 of ERR14-J. Do not catch NullPointerException , RuntimeException, Exception, or Throwableor any of its ancestors.

Code Block
bgColor#FFcccc
public class NewInstance {
  private static Throwable throwable;

  private NewInstance() throws Throwable {
    throw throwable;
  }

  public static synchronized void undeclaredThrow(Throwable throwable) {
    // These exceptions should not be passed
    if (throwable instanceof IllegalAccessException ||
        throwable instanceof InstantiationException) {
        throw new IllegalArgumentException(); // Unchecked, no declaration required
    }

    NewInstance.throwable = throwable;
    try {
      // next line throws the Throwable argument passed in above,
      // even though the throws clause of class.newInstance fails
      // to declare that this may happen
      NewInstance.class.newInstance();
    } catch (InstantiationException e) { /* unreachable */
    } catch (IllegalAccessException e) { /* unreachable */
    } finally { // Avoid memory leak
      NewInstance.throwable = null;
    }
  }
}

public class UndeclaredException {
  public static void main(String[] args) {   // No declared checked exceptions
    NewInstance.undeclaredThrow(new Exception("Any checked exception"));
  }
}

...

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="947d74f2209ccbcb-bacb0c35-4fd14ce9-b9678be9-e98361c7545f73b7cd8c18e6"><ac:plain-text-body><![CDATA[

[[MITRE 2009

AA. Bibliography#MITRE 09]]

[CWE-703

http://cwe.mitre.org/data/definitions/703.html] "Improper Check or Handling of Exceptional Conditions"

]]></ac:plain-text-body></ac:structured-macro>

 

CWE-248 "Uncaught Exception"

...

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="eb99c960481f41a8-a6c9dda2-43fc402f-8261be22-ebc5d8cf73c955e3113721bd"><ac:plain-text-body><![CDATA[

[[Bloch 2008

AA. Bibliography#Bloch 08]]

Item 2: "Consider a builder when faced with many constructor parameters"

]]></ac:plain-text-body></ac:structured-macro>

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="26c1ab591ce07595-d3c6d693-469d4cf3-9c7889b2-b77ec2728c01f6cdb9e550cf"><ac:plain-text-body><![CDATA[

[[Goetz 2004b

AA. Bibliography#Goetz 04b]]

 

]]></ac:plain-text-body></ac:structured-macro>

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="94a8978e0d9b943c-6a8e200d-43b74d68-97d4b7f5-0365ffe064c842da729b2705"><ac:plain-text-body><![CDATA[

[[JLS 2005

AA. Bibliography#JLS 05]]

Chapter 11: Exceptions

]]></ac:plain-text-body></ac:structured-macro>

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="af209d12f66660fe-670673e1-4e1e405e-91f18748-eedd57064c2873107ad9068a"><ac:plain-text-body><![CDATA[

[[Roubtsov 2003

AA. Bibliography#Roubtsov 03]]

 

]]></ac:plain-text-body></ac:structured-macro>

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="4c50c6c68b736b23-75dca182-43134e32-addb8da9-90b73dd16c70c2029513e846"><ac:plain-text-body><![CDATA[

[[Schwarz 2004

AA. Bibliography#Schwarz 04]]

 

]]></ac:plain-text-body></ac:structured-macro>

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="e879525c3241081e-00e285c1-48be4b9a-89e5aeea-0cd75ff4509e732ed938c97d"><ac:plain-text-body><![CDATA[

[[Venners 2003

AA. Bibliography#Venners 03]]

"Scalability of Checked Exceptions"

]]></ac:plain-text-body></ac:structured-macro>

...