A Brief History of Java
A Brief History of Java
Java is an Object Oriented Programming language developed by the team of James Gosling,
Patrick Naughton, Chris Warth, Ed Frank, and Mike Sheridan at Sun Microsystems in 1991. This
language was initially called “Oak” but was renamed “Java” in 1995. The name Java came about
when some Suns people went for a cup of coffee and the name Java was suggested and it struck.
Java was developed out of the rich experiences of the professionals who came together to design
the programming language thus, it is an excellent programming language. It has similar syntax to
C/C++ programming languages but without it complexities. Java is an elegant programming
language.
Java was initially developed for programming intelligent electronic devices such as TVs, cell
phones, pagers, smart cards etc. Unfortunately the expectations of the Suns team in this area did
not develop as they envisaged. With the advent of the in the boom of the Internet and the World
Wide Web (WWW), the team changed their focus and Java was developed for developing web
based applications. It is currently being used to develop a variety of applications.
Why Java?
Thousands of programmers are embracing Java as the programming language of choice and
several hundred more will joining before the end of the decade. Why is this so? The basic
reasons for these are highlighted below:
a. Portability: Java is a highly portable programming language because it is not designed for any
specific hardware or software platform. Java programs once written are translated into an
intermediate form called bytecode. The bytecode is then translated by the Java
Virtual Machine (JVM) into the native object code of the processor that the program is been
executed on. JVMs exist for several computer platforms; hence the term Write Once Run
Anywhere (WORA).
b. Memory Management: Java is very conservative with memory; once a resource is no longer
referenced the garbage collector is called to reclaim the resource. This is one of the elegant
features that distinguishes Java from C/C++ where the programmer has to “manually” reclaim
memory.
c. Extensibility: The basic unit of Java programs is the class. Every program written in
Java is a class that specifies the attributes and behaviors of objects of that class. Java
APIs (Application Programmers Interface) contains a rich set reusable classes that is made
available to the programmers. These classes are grouped together as packages from which the
programmer can build new enhanced classes. One of the key terms of object oriented
programming is reuse.
d. Secure: Java is a very secure programming language. Java codes (applets) may not access the
memory on the local computer that they are downloaded upon. Thus it provides a secure means
of developing internet applications.
e. Simple: Java‟s feature makes it a concise programming language that is easy to learn and
understand. It is a serious programming language that easily depicts the skill of the programmer.
f. Robustness: Java is a strongly typed programming language and encourages the development
of error free applications.
Java programs may be developed in three ways. They will be mentioned briefly here:
a. Java Applications: These are stand-alone applications such word processors, inventory
b. Java Applets: These programs that are executed within a browser. They are executed on
c. Java Serverlets: These are server side programs that are executed within a browser.
In this course we will limit ourselves to only the first two mentioned types of Java programs
applications and applets.
As earlier described Java applications are stand-alone programs that can be executed to solve
specific problems. Before delving into the details of writing Java applications (and applets) we
will consider the concept on which the language is based upon being: Object Oriented
Programming (OOP).
a. Encapsulation: Encapsulation is a methodology that binds together data and the codes that it
manipulates thus keeping it safe from external interference and misuse. An object oriented
program contains codes that may have private members that are directly accessible to only the
members of that program. Also it may have program codes (methods) that will enable other
programs to access these data is a uniform and controlled fashion.
c. Inheritance: Inheritance is the process of building new classes based on existing classes.
The new class inherits the properties and attributes of the existing class. Object oriented
programs models real world concepts of inheritance. For example children inherit attributes and
behaviors from their parents. The attributes such as color of eyes, complexion, facial features etc
represent the fields in an java. Behaviors such as being a good dancer, having a good sense of
humor etc represent the methods. The child may have other attributes and behaviors that
differentiate them from the parents.
Every Java application program comprises of a class declaration header, fields (instance
variables – which is optional), the main method and several other methods as required for
solving the problem. The methods and fields are members of the class. In order to explore these
components let us write our first Java program.
/*
* HelloWorld.java
*/
/*
* HelloWorld.java
*/
Comments are used for documenting a program, that is, for passing across vital information
concerning the program – such as the logic being applied, name of the program and any other
Comments may also be created by using the // symbols either at the beginning of a line:
// This is a comment
Or on the same line after with an executable statement. To do this the comment must be written
after the executable statement and not before else the program statement will be ignored by the
computer:
The rest of the program is the class declaration, starting with the class definition header:
public class HelloWorld, followed by a pair of opening and closing curly brackets.
{
}
The class definition header starts with the access modifier public followed by the keyword class
then the name of the class HelloWorld. The access modifier tells the Java compiler that the class
can be accessed outside the program file that it is declared in.
The keyword class tells Java that we want to define a class using the name HelloWorld
Note: The file containing this class must be saved using the name HelloWorld.java. The name of
the file and the class name must be the same both in capitalization and sequence. Java is very
case sensitive thus HelloWorld is different from helloworld and also different from
HELLOWORLD.
The next part of the program is the declaration of the main method. Methods are used for
carrying out the desired tasks in a Java program, they are akin to functions used in C/C++
programming languages. The listing:
is the main method definition header. It starts with the access modifier public, followed by the
keyword static which implies that the method main( ) may be called before an object of the class
has been created. The keyword void implies that the method will not return any value on
completion of its task. These keywords public, static, and void should always be placed in the
sequenced shown.
Any information that you need to pass to a method is received by variables specified within the
set of parentheses that follow the name of the method. These variables are called parameters. If
no parameters are required for a given method, you still need to include the empty parentheses.
In main( ) there is only one parameter, String[] args, which declares a parameter named args.
This is an array of objects of type String. (Arrays are collections of similar objects.) Objects of
type String store sequences of characters. In this case, args receives any command-line
arguments present when the program is executed. Note that the parameters could have been
written as String args[]. This is perfectly correct.
The instructions (statements) enclosed within the curly braces will be executed once the main
method is run. The above program contains the instruction that tells Java to display the output
This line outputs the string "Hello World!!!" followed by a new line on the screen.
Output is actually accomplished by the built-in println( ) method. In this case, println( ) displays
the string which is passed to it. As you will see, println( ) can be used to display other types of
information, too. The line begins with System.out. While too complicated to explain in detail at
this time, briefly, System is a predefined class that provides access to the system, and out is the
output stream that is connected to the console. Thus, System.out is an object that encapsulates
console output. The fact that Java uses an object to define console output is further evidence of
its object-oriented nature.
Notice that the println( ) statement ends with a semicolon. All statements in Java end with a
semicolon. The reason that the other lines in the program do not end in a semicolon is that they
are not, technically, statements.
The first closing brace -}- in the program ends main( ), and the last } ends the HelloWorld class
definition; it is a good practice to place a comment after the closing curly brace. The opening and
close brace are referred to as a block of code.
One last point: Java is case sensitive. Forgetting this can cause you serious problems.
As earlier mentioned in this text we will create only two types of Java programs – applications
and applets. In the next few paragraphs the steps for editing, compiling and executing a Java
programs. The procedures for Java application and Java applets are basically the same. The
major difference is that Java applets are executed within a browser.
The basic steps for compiling and executing a Java program are:
a. Enter the source code using a text editor. He file must be saved using the file extension .java.
b. Use the Java compiler to convert the source code to its bytecode equivalent. The byte code
will be saved in a file having the same name as the program file with an extension .class. To
compile our HelloWorld.java program, type the following instructions at the Windows command
prompt (c:\>): javac HelloWorld.java
The bytecodes (.class file) will be created only if there are no compilation errors.
c. Finally use the Java interpreter to execute the application, to do this at the Windows command
prompt (c:\>) type: java HelloWorld. (You need not type the .class extension)
Note: Other programs, called Integrated Development Environments (IDEs), have been created
to support the development of Java programs. IDEs combine an editor, compiler, and other Java
support tools into a single application. The specific tools you will use to develop your programs
depend on your environment. Examples of IDEs include NetBeans, Eclipse, BlueJ etc.
Data Types in Java
A data type defines a set of values and the operations that can be defined on those values. Data
types in Java can be divided into two groups:
Data types are especially important in Java because it is a strongly typed language. This means
that all operations are type checked by the compiler for type compatibility. Illegal operations will
not be compiled. Thus, strong type checking helps prevent errors and enhances reliability.
To enable strong type checking, all variables, expressions, and values have a type. There is no
concept of a “type-less” variable, for example. Furthermore, the type of a value determines what
operations are allowed on it. An operation allowed on one type might not be allowed on another .
The term primitive is used here to indicate that these types are not objects in an object-oriented
sense, but rather, normal binary values. These primitive types are not objects because of
efficiency concerns. All of Java‟s other data types are constructed from these primitive types.
Java strictly specifies a range and behavior for each primitive type, which all implementations of
the Java Virtual Machine must support. Because of Java‟s portability requirement, Java is
uncompromising on this account. For example, an int is the same in all execution environments.
This allows programs to be fully portable. There is no need to rewrite code to fit a specific
platform. Although strictly specifying the size of the primitive types may cause a small loss of
performance in some environments, it is necessary in order to achieve portability.
There are eight primitive data types in Java: four subsets of integers, two subsets of floating
point numbers, a character data type, and a boolean data type. Everything else is represented
using objects. Let‟s examine these eight primitive data types in some detail.
A literal is an explicit data value used in a program. The various numbers used in programs such
as Facts and Addition and Piano Keys are all integer literals.
Java assumes all integer literals are of type int, unless an L or l is appended to the end of the
value to indicate that it should be considered a literal of type long, such as 45L.
Likewise, Java assumes that all floating point literals are of type double. If we need to treat a
floating point literal as a float, we append an F or f to the end of the value, as in 2.718F or
Arithmetic Operators
Arithmetic operators are special symbols for carrying out calculations. These operators enable
programmers to write arithmetic expressions. An expression is an algebraic like term that
evaluates to a value; it comprises of one or more operands (values) joined together by one or
more operators. Below is a summary of Java arithmetic operators in their order of precedence,
that is, the order in which the arithmetic expression are evaluated.
Precedence of Arithmetic Operators
The order in which arithmetic operators are applied on data values (operand) is termed rules of
operator precedence. These rules are similar to that of algebra. They enable Java to evaluate
arithmetic expressions consistently and correctly.
a. Multiplication, division and modulus are applied first. Arithmetic expressions with several of
these operators are evaluated from the left to the right.
b. Addition and subtraction are applied next. In the situation that an expression contains several
of these operators they are evaluated from right to left.
The order in which the expressions are evaluated is referred to as their association.
Reference or non-primitive type data is used to represent objects. An object is defined by a class,
which can be thought of as the data type of the object. The operations that can be performed on
the object are defined by the methods in the class. The attributes or qualities of the objects of a
class are defined by the fields – which in essence are primitive type data values.
Every object belongs to a class and can be referenced using identifiers. An identifier is a name
which is used to identify programming elements such as memory location, names of classes, Java
statements and so on. The names used for identifying memory locations are commonly referred
to as memory variables or variables for short.
Variable names are created by the programmer for representing values to be stored in the
computer memory. Each memory location is associated with a type, a value, and a name.
primitive data such as int (integer) can hold a single value and that value must correspond to the
data type specified by the programmer. Reference data types on the other hand contain not the
objects in memory but the addresses of where the objects (their method and fields etc) are stored
in memory. Examples of reference data types include arrays, strings and objects of any class
declared by the programmer.
Pertinent data about any object can be gathered and used to represent attributes (fields) and tasks
the objects can perform (methods) by using a well defined interface. Once a class has been
declared several objects can be created from it. The objects protect their own data and it cannot
be directly accessed by other objects.
Variables names may start with and alphabet (a-z / A-Z) and he remaining characters may
be, an underscore (_) or a dollar sign, or a number for example sum, counter, firstName, bar2x
amount_Paid are all valid variable names. 9x, 0value are invalid.
b. Embedded blank spaces may not be included in variable names though an underscore
may be used to join variable names that comprises of compound words. Example x 10 is not
c. Reserved words (words defined for specific use in Java) may not be employed as
variables names. Example loop, do, for, while, switch are reserved.
d. Special symbols such as arithmetic operators, comma (,), ?, /, ! are not allowed.
It is a good programming practice to use names that indicate the meaning of the value it
represents. For amountPaid, or amt_paid can be easily remembered that it represent an amount
paid value. Though if the programmer had used x or y as the variable name it would still have
been valid.
Java is a case sensitive programming language thus the programmer must be very careful and
consistent when giving and using variable names. Java distinguishes between upper case
(capital) letters and lower case letters (small letters) hence „a‟ is different from „A‟ as far as Java
is concerned.
Variable Declaration
Variable may represent values that are expected to change or not during the execution of a
computer program. When declaring variable names the scope (visibility) of variables from other
part of the program may be specified, the type of data that should be stored in the area of
memory.
Variable names may also represent either primitive data or reference data. The general form for
creating or declaring variable is presented below.
Where:
accessModifier determines the visibility of the variable to other part of the program e.g. public
or private.
dataType represents either primitive (int, char, float) or reference type data (array, String).
Example:
private int x, y, z;
In this example the access modifier is private, the data type is int and the variables that are
permitted to hold integer values are the identifiers x, y and z.