'

The programming language Java was introduced to the IT community as an "easy-to-learn" and "easy-to-use" language (typically referring to C++ for comparison). While this is certainly true, it turns out that even this supposedly easy language offers a lot of choices and comes with many programming idioms that must be understood thoroughly in order to produce high-quality software implemented in Java.

In this tutorial we look into the less obvious limitations of some concepts and discuss some fundamental, yet typical misunderstandings. We will focus on two language features that exist in Java since its advent: the implications of reference semantics on object copying and comparison and the use of exceptions for error indication and error handling.

We discuss common problems such as exception hiding, improper use of throws specification, and resource leaks and inconsistent object state. '