|             Never use deprecated fields, methods, or classes in new code. The Java SE 6 documentation provides a complete list of deprecated APIs \[[API 2006|AA. Bibliography#API 06]\]. Java provides a {{@deprecated}} annotation to indicate the deprecation of specific fields, methods, and classes.  For instance, many methods of {{java.util.Date}}, such as {{Date.getYear()}}, have been explicitly deprecated.  The rule [THI05-J. Do not use Thread.stop() to terminate threads|THI05-J. Do not use Thread.stop() to terminate threads] describes issues that can result from using the deprecated {{Thread.stop()}} method. | 
| Obsolete fields, methods, and classes should not be used.  Java provides no annotation to indicate obsolescence, but several objects are documented as obsolete. For instance, the {{java.util.Dictionary}} class is marked as obsolete, and new code should use {{java.util.Map<K,V>}} instead \[[API 2006|AA. Bibliography#API 06]\]. | 
Finally, several classes and methods impose particular limitations on their use. For instance, all of the subclasses of the abstract class java.text.Format are thread-unsafe. These classes must be avoided in multithreaded code. For more information about thread-safety, see rule TSM04-J. Document thread-safety and use annotations where applicable.
The following methods and classes must not be used:
| Class or Method | Replacement | Rule | 
|---|---|---|
|   |   | |
|   |   | |
|   |   | |
|   |   | ERR10-J. Do not let code throw undeclared checked exceptions | 
|   |   | |
|   |   | |
|   |   | 
Using deprecated or obsolete classes or methods in program code can lead to erroneous behavior.
| Rule | Severity | Likelihood | Remediation Cost | Priority | Level | 
|---|---|---|---|---|---|
| MET02-J | high | likely | medium | P18 | L1 | 
Detecting uses of deprecated methods is straightforward. Obsolete methods and thread-unsafe methods have no automatic means of detection.
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
| <ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="2d9a05da-a3f4-422b-92af-1dbab04c2800"><ac:plain-text-body><![CDATA[ | [ISO/IEC TR 24772:2010 | http://www.aitcnet.org/isai/] | "Deprecated Language Features [MEM]" | ]]></ac:plain-text-body></ac:structured-macro> | 
| CWE ID 589, "Call to Non-ubiquitous API" | 
| <ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="00581fc3-24a4-496e-90dc-c004beff859f"><ac:plain-text-body><![CDATA[ | [[API 2006 | AA. Bibliography#API 06]] | [Deprecated API | http://java.sun.com/javase/6/docs/api/deprecated-list.html], [Dictionary | http://download.oracle.com/javase/6/docs/api/java/util/Dictionary.html] | ]]></ac:plain-text-body></ac:structured-macro> | 
| <ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="ea0ea259-8ff0-4180-b9ec-cc857f615831"><ac:plain-text-body><![CDATA[ | [[SDN 2008 | AA. Bibliography#SDN 08]] | Bug database, [Bug ID 4264153 | http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4264153] | ]]></ac:plain-text-body></ac:structured-macro> | 
MET01-J. Never use assertions to validate method parameters      05. Methods (MET)