Despite Java attributes (memory management, strong type checking, and built
-in support for exception handling) that promote reliable, bug-free soft-wa
re, some features contribute to, rather than alleviate, programmer stress b
ecause they create obscure places for bugs to hide.
The authors have identified seven features that can lead to particularly re
sistant bugs. Their goal is not to indict Java -they are strong supporters,
and their own organizations have adopted Java as their primary programming
language. Rather, they want programmers to better understand Java's weakne
sses and know how to cope with them.
Being aware of these design weaknesses (Java's false sense of protection, c
onstructor confusion, finalizer methods, subclass substitution, container l
imitations, final parameters, and initialization diffusion), programmers ca
n make sure that Java's design flaws don't make implementation more difficu
lt that it has to be.