Java Differs from C++
Java functionality differs from
that of C and C++ in many ways. These changes
are intended to create an object-oriented
language that eliminates many of the
opportunities for bugs and memory leaks that are
common in C and C++. If you have experience in C
or C++ programming, some of Java's changes may
take some getting used to. The following list
touches on the most important of these changes:
- Java is an interpreted
language, not a compiled language as is C++.
This means that compiling is done by an
interpreter before execution.
- Java uses classes or
interfaces to build composite data types
instead of structures and unions, as in C++.
This ensures portability.
- There are no #defines
in Java because the development team felt that
using #defines advocates coding that
is hard to read.
- Command-line arguments are
different in Java. They are arrays of strings
that contain the arguments. Through a
mechanism known as varargs, C++ allows
you to provide a variable number of arguments
to a function. This mechanism is not supported
by the Java language.
- Java has no header files.
Instead, Java uses interfaces that show only
the methods and final, or constant, variables
instead of the entire structure.
- Pointers, one of the
primary features that introduce bugs and
memory leaks into programs, are removed in
Java. By getting rid of structures and
encapsulating arrays through references, Java
has attempted to get rid of the original
reasoning behind pointers. Java does not allow
you to construct a reference to anonymous
memory, so it produces robust, efficient code
much less prone to bugs, memory leaks, and
- Java has replaced multiple
inheritance by interfaces to avoid problems
with fragile superclasses.
- To ensure a purely
object-oriented structure, there are no
individual functions in Java. Functions must
be encapsulated in a class.
- While Java retains goto
as a reserved word, it is not implemented or
supported by the Java language.
- Java has strict definition
of operators. It doesn't allow for operator
- Automatic coercion, which
is a common cause of inaccuracy in C++, would
allow you to place an incompatible variable
into another without declaring that you were
aware of this change. In Java, in order to
store a variable of one type in a variable of
another type, you must explicitly call it with
a cast statement.
- Java programs crash
reliably and obviously, whereas crashes in C
and C++ programs are not as apparent.
- Java implements a new
function called automatic garbage collection.
The Java runtime system keeps track of all
references to an object until the object is no
longer needed. When there are no more
references to an object, it makes it available
for garbage collection.
- Java also implements
automatic memory management and thread
controls. Although threads still require the
use of classes, Java balances the addition of
thread synchronization between the language
and class levels. For example, garbage
collection is run as a background process (or
low-priority thread). It remains quiet until
there is either a sufficient pause in the
execution of foreground threads for it to run,
or the system explicitly requires the use of
memory which is taken up by unreferenced
- The Java language provides
a finally statement for use with Java
exceptions. The finally statement
delimits a block of code used to release
system resources and perform various other
cleanup operations after the try
- Java strings are
first-class objects. They are a class provided
in the java.lang package. This
provides consistency and predictability in