Java and a Typical Java Development Environment
The microprocessor revolution’s most important contribution to date
is that it made possible the development of personal computers. Microprocessors
are having a profound impact in intelligent consumer-electronic devices.
Recognizing this, Sun Microsystems in 1991 funded an internal corporate
research project led by James Gosling, which resulted in a C++-based
object-oriented programming language Sun called Java.
A key goal of Java
is to be able to write programs that will run on a great variety of computer
systems and computer-control devices. This is sometimes called “write once, run
anywhere.”
The web exploded
in popularity in 1993, and Sun saw the potential of using Java to add dynamic
content, such as interactivity and animations, to web pages. Java garnered the
attention of the business community because of the phenomenal interest in the
web. Java is now used to develop large-scale enterprise applications, to
enhance the functionality of web servers (the computers that provide the
content we see in our web browsers), to provide applications for consumer
devices (e.g., cell phones, smartphones, television set-top boxes and more) and
for many other purposes. Sun Microsystems was acquired by Oracle in 2009. At
the Java One 2010 conference, Oracle announced that 97% of enterprise desktops,
three billion handsets, and 80 million television devices run Java. There are
currently over 9 million Java developers, up from 4.5 million in 2005.10 Java is
now the most widely used software development language in the world.
Java Class Libraries
You can create each class and method you need to form your Java
programs. However, most Java programmers take advantage of the rich collections
of existing classes and methods in the Java class libraries, which are also
known as the Java APIs (Application Programming Interfaces).
Performance Tip 1.1
Using Java API classes and methods instead of writing your own
versions can improve program
performance, because they’re carefully written to perform
efficiently. This also shortens
program development time.
Portability Tip 1.1
Although it’s easier to
write portable programs (i.e., programs that can run on many different
types of computers) in Java
than in most other programming languages, differences
between compilers, JVMs and
computers can make portability difficult to achieve. Simply
writing programs in Java
does not guarantee portability.
Phase 1: Creating a Program
Phase 1 consists of editing a file with an editor program, normally
known simply as an editor You type a Java program (typically referred to as
source code) using the editor, make any necessary corrections and save the
program on a secondary storage device, such as your hard drive. A file name ending
with the .java extension indicates that the file contains Java source code.
Two editors widely used on Linux systems are vi and emacs. On
Windows, Notepad will suffice.Many freeware and shareware editors are also
available online.
environments (IDEs) are available from many major software
suppliers. IDEs provide tools that support the software development process,
including editors for writing and editing programs and debuggers for locating
logic errors—errors that cause programs to execute incorrectly. Popular IDEs
include Eclipse and Net Beans.
Phase 2: Compiling a Java Program into Bytecodes
In Phase 2, you use the command javac (the Java compiler) to
compile a program For example, to compile a program called Welcome.java, you’d
type
javac Welcome.java
in the command window of your system (i.e., the Command Prompt in
Windows, the shell prompt in Linux or the Terminal application in Mac OS X). If
the program compiles, the compiler produces a .class file called Welcome .class
that contains the compiled version of the program.
The Java compiler translates Java source code into bytecodes that
represent the tasks to execute in the execution phase (Phase 5). Bytecodes are
executed by the Java Virtual Machine (JVM)—a part of the JDK and the foundation
of the Java platform. A virtual machine (VM) is a software application that
simulates a computer but hides the underlying operating system and hardware
from the programs that interact with it. If the same VM is implemented on many
computer platforms, applications that it executes can be used on all those
platforms. The JVM is one of the most widely used virtual machines. Microsoft’s
.NET uses a similar virtual-machine architecture.
Unlike machine
language, which is dependent on specific computer hardware, bytecodes are
platform independent—they do not depend on a particular hardware platform. So,
Java’s bytecodes are portable—without recompiling the source code, the same bytecodes
can execute on any platform containing a JVM that understands the version of
Java in which the bytecodes were compiled. The JVM is invoked by the java
command. For example, to execute a Java application called Welcome, you’d type
the command into Memory:
In Phase 3, the JVM places the program in memory to execute it—this
is known as loading (Fig. 1.8).The JVM’s class loader takes the .class files
containing the program’s bytecodes and transfers them to primary memory. The
class loader also loads any of the .class files provided by Java that your
program uses. The .class files can be loaded from a disk on your system or over
a network (e.g., your local college or company network, or the Internet).
Phase 4: Bytecode Verification
In Phase 4, as the classes are loaded, the bytecode verifier
examines their bytecodes to ensure that they’re valid and do not violate Java’s
security restrictions (Fig. 1.9). Java enforces strong security to make sure
that Java programs arriving over the network do not damage your files or your
system (as computer viruses and worms might).
Phase 5: Execution
In Phase 5, the JVM executes the program’s bytecodes, thus
performing the actions specified by the program.
In early Java versions, the JVM was simply an interpreter for Java
bytecodes. This caused most Java programs to execute slowly, because the JVM
would interpret and execute one bytecode at a time. Some modern computer
architectures can execute several instructions in parallel. Today’s JVMs
typically execute bytecodes using a combination of interpretation and so-called
just-in-time (JIT) compilation. In this process, the JVM analyzes the bytecodes
as they’re interpreted, searching for hot spots— parts of the bytecodes that
execute frequently. For these parts, a just-in-time (JIT) compiler— known as
the Java HotSpot compiler—translates the bytecodes into the underlying
computer’s machine language. When the JVM encounters these compiled parts
again,
the faster machine-language code executes. Thus Java programs
actually go through two compilation phases—one in which source code is
translated into bytecodes (for portability across JVMs on different computer
platforms) and a second in which, during execution, the bytecodes are
translated into machine language for the actual computer on which the program
executes.
Problems That May Occur at Execution Time
Programs might not work on the first try. Each of the preceding
phases can fail because of various errors that we’ll discuss throughout this
book. For example, an executing program might try to divide by zero (an illegal
operation for whole-number arithmetic in Java).
This would cause the Java program to display an error message. If
this occurred, you’d have to return to the edit phase, make the necessary
corrections and proceed through the remaining phases again to determine that
the corrections fixed the problem(s). [Note: Most programs in Java input or
output data. When we say that a program displays a message, we normally mean
that it displays that message on your computer’s screen. Messages and other
data may be output to other devices, such as disks and hardcopy printers, or
even to a network for transmission to other computers.]
Common Programming Error 1.1
Errors such as division by
zero occur as a program runs, so they’re called runtime errors
or execution-time errors.
Fatal runtime errors cause programs to terminate immediately
without having successfully
performed their jobs. Nonfatal runtime errors allow programs
to run to completion, often
producing incorrect results.
Comments
Post a Comment