Introduction to Object-Oriented
Design in Java
In this chapter, we'll look at how to work with Java's objects, covering the key meth‐
ods of Object , aspects of object-oriented design, and implementing exception han‐
dling schemes. Throughout the chapter, we will be introducing some design patterns
—essentially best practices for solving some very common situations that arise in
software design. Towards the end of the chapter, we'll also consider the design of
safe programs—those that are designed so as not to become inconsistent over time.
We'll get started by considering the subject of Java's calling and passing conventions
and the nature of Java values.
Java's values, and their relationship to the type system, are quite straightforward.
Java has two types of values—primitives and object references.
Some topics refer to primitives as “value types”—this makes it
confusing to think of object references as a value in Java. For
this reason, we stick to the term primitive when discussing any
of Java's eight nonreference types.
These two kinds of values are the only things that can be put into variables. In fact,
that's one way to define a value: “a thing that can be put into a variable or passed to a
method.” For C++ and C programmers, note that object contents cannot be put into
variables—so there is no equivalent of a dereference operator or a struct .
The key difference between primitive values and references is that primitive values
cannot be altered—the value 2 is always the same value. By contrast, the contents of