Home : Course Map : Chapter 1 : Java : Supplements :
J2SE 5.0 - Survey of New Features
JavaTech
Course Map
Chapter 1
Introduction
History
What is Java?
Versions
Java 5.0
Features

Java Process
Tools
Documentation
Compatibility
Getting Started
Simple Applet
Simple Application
Starters
Exercises

    Supplements
Interpret/Compile

Making WebPages
Plug-in
Java 5.0 Features
The JVM
Advanced JVMs
Alt. Compilers
Alt. JVMs
Java Deployment

     About JavaTech
     Codes List
     Exercises
     Feedback
     References
     Resources
     Tips
     Topic Index
     Course Guide
     What's New

In the main track we gave an overview of Java 2 Platform, Standard Edition 5.0 (J2SE 5.0) . We indicated that most of the changes fall into the ease of development (EoD) category. With a few important exceptions, the changes do not add new functionality but rather provide an easier way of doing the same things you could do before but with less code and better compiler-time error detection.

We list below the most important of the many EoD improvements in Java 5.0, roughly in the order in which they are encountered in the rest of this book, not in the order of importance.

Note: Most of these enhancements to the language can only be appreciated after having had experience with programming in Java. If you are completely new to object oriented programming and Java, you can come back to this section after you complete Part I.

Autoboxing and unboxing

Chapter 2 explains that Java has primitive types like int for integers, and Chapter 3 explains "object" types like Integer The difference between the two types is very important as we will see. Previous versions of Java made it necessary to explicitly convert between the primitive types and the object types.

In Chapter 3 we examine the so-called autoboxing and unboxing feature added with J2SE 5.0 that removes the need for explicit conversions in most cases and thus improves code readability and removes boilerplate code and sources of errors.

Enhanced for loop

Chapter 2 looks at the several types of looping structures in the Java language, one of which is the for loop (quite similar to the C/C++ for loop). Version 5.0 includes an enhanced for loop syntax that reduces code complexity and improves readability. We introduce the enhanced for loop in Chapter 2: Supplements and in Chapter 10: Generics after we have described the object types with which the enhanced for loop works.

Metadata

In Chapter 4 we encounter the @Override annotation. It falls under the category of metadata or "data about data." In this case, it is better thought of as "data about code." The new metadata facility, also called the annotation facility, is designed to use an "annotation" in your code that greatly reduces much of the boilerplate code that would be required in previous versions of Java.

An annotation is a new 5.0 language element that begins with "@". Some annotations are processed by the javac compiler and some require the new annotation processing tool apt. There are currently only three annotations in the beta release of version 5.0. However, now that the metadata framework is available, we anticipate the appearance of many useful annotations and annotation processors in the future.

Formatted input and output and varargs

In Chapter 5: Tech we discuss how to format numerical output with Java. Version 5.0 finally adds the oft-requested ability to produce formatted output easily in the form of a printf() method that behaves very similarly to the printf() function in the C/C++ stdio library. There is also a new formatted input feature (the Scanner class) that is described in Chapter 9: Java.

Both these features rely on another new feature known as "varargs," which stands for "variable argument list" in which the number of parameters passed to a Java method is not known when the source is constructed. (This is also referred to as variable arity methods). Varargs is a very cool new feature that can be of value in your own code, not just in the new printf() feature.

Chapter 10: Java presents another EoD enhancement that provides for automatic format and output of the elements of an array (see the java.util.Arrays class). This feature really has nothing to do with printf or varargs, but we mention it here because it eases the amount of work that was necessary in pre-5.0 releases to output all the elements in an array in a nicely formatted style.

Static import

Release 5.0 includes a new technique for accessing Java static methods and constants in another class without the need to include the full package and class name every time they are used. (We explain what the terms class, package, static, import, etc. mean in Chapters 3-5.) This new "static import" facility makes your code easier to write and, since there's less of it, less error-prone. We discuss static import in more detail in Chapter 5 after discussing import in general.

New pack200 hyper-compression JAR format

Chapter 5: Java discusses JAR (Java Archive) files used to combine and compress Java class files. We also look at the new pack200 format that compresses JAR files very tightly, reducing bandwidth and saving download time. (This is not really an EoD change, but more of an "ease of deployment" change.)

Graphics system improvements

Release 5.0 includes numerous bug fixes and minor tweaks to Java's graphics subsystems known as AWT and Swing (see Chapter 6 and Chapter 7), including reduced memory usage. In the EoD area, perhaps the biggest improvement is that it is no longer necessary to call getContentPane() when using Swing components. See Chapter 6 for details. Other enhancements include an improved popup menu support, improved printing support for some graphics components, and the ability to query for the mouse location on the desktop.

New concurrency features

Chapter 8 discusses Java's multithreading support that has been present since version 1.0. Release 5.0 adds new capabilities that greatly enhance the multithreading features of Java. Some of these additions depend upon the generics concept (see next item), so we wait until Chapter 10 to introduce these important new capabilities.

Generics

In Chapter 10 we introduce the new generics feature, a large and important subject that we do not have space to cover in detail in this book. Java is already a very type-safe language, which simply means that every variable has a specific type and that only compatible types can be assigned to each other. However, the use of generics brings an even greater amount of type safety to the Java language.

Java includes a number of "object containers", such as the ArrayList class, that can contain "objects" of many different types. When retrieving an object from one of these containers, it must be retrieved as a very basic type and then converted back to the original type. If, however, an incorrect type is added to the container, then an error occurs at runtime during the conversion attempt. The use of generics makes it possible for the object containers to require that only certain types can be placed into them, else a compile time error occurs. Since mistakes are found at compile time, runtime safety and correctness is improved. In addition, since the specialized containers only contain items of the desired type, retrieval of items from the containers is easier since no explicit conversion to the desired type is necessary

You are not required to use the generics approach but the 5.0 compiler will give a warning for code that uses the older containers.

Enumerated types

Chapter 10 presents a feature of C/C++ that many programmers have missed in Java. Version 5.0 adds an enumerated type using the enum keyword. The new Java enumerated type includes all the features of C/C++ enum and more, including type safety.

New StringBuilder class

We discuss this new class in Chapter 10, along with the older StringBuffer class. Both are used in the building, concatenating, and appending of string types, but the new class has improved performance.

Changes to ease RMI development

Chapter 18 explains the Remote Method Invocation (RMI) techniques, including a simple but important change in J2SE 5.0 that makes RMI development simpler.


We do not go into great depth on these changes here or in the book. See the book by McLaughlin for details. There is also much documentation available online at java.sun.com. See the references below.

References and Web Resources

Most recent update: Oct.19, 2005

            Tech
Java in Science
    & Engineering
Benefits
Shortcomings
RealWorld Examples

           Physics
Java in Physics
SimulationTypes
Simulate&Analyze
Sim. in Experiments
  Demo 1: Event
  Demo 2: Continuous
  Demo 3: Static

Learn by Coding
Exercises

  Part I Part II Part III
Java Core 1  2  3  4  5  6  7  8  9  10  11  12 13 14 15 16 17
18 19 20
21
22 23 24
Supplements

1  2  3  4  5  6  7  8  9  10  11  12

Tech 1  2  3  4  5  6  7  8  9  10  11  12
Physics 1  2  3  4  5  6  7  8  9  10  11  12

Java is a trademark of Sun Microsystems, Inc.