You are on page 1of 54

Java I--Copyright 2000-2007 Tom Hunter

Java I--Copyright 2000-2007 Tom Hunter

Chapter 1
Introduction to Computers,
the Internet and the Web

Java I--Copyright 2000-2007 Tom Hunter

The Genesis of Java


It all started with an angry programmer.
1990

Sun Microsystems Software


Engineer Patrick Naughton*,
age 25, was disgusted with
his job at Sun. He had the impossible
job of making different software APIs--from
dozens of languages, platform OSs and
vendors--all work as one. It was impossible.
*

After his stint at Sun, Mr. Naughton went on to work for Disney and, temporarily, for the FBI.

Java I--Copyright 2000-2007 Tom Hunter

The Genesis of Java

Naughton announced to CEO


Scott McNealy that he was quitting

Sun.
Pat was going to join NeXT,
because Sun was a mess.
McNealy asked Pat to write a
memo outlining his gripes.

The CEO asked Pat to suggest a


solution, As if you were God.
Java I--Copyright 2000-2007 Tom Hunter

The Genesis of Java

Formation of the Green Project


Jan 1991

The array of standards spurred the


formation of the Green Project. Its goal
was making Consumer Electronics devices
talk to each other.
Since VCRs, Laser Disc Players and
Stereos were all made with different CPUs,
they all needed special programming.
Java I--Copyright 2000-2007 Tom Hunter

The Genesis of Java


James Gosling, then age 36, was asked to find a
programming language for the project.
Gosling, who had left
IBM in 1984 to join Sun,
first chose C++. But he
soon gave up on C++,
which was incapable of doing
what he wanted. So, he started to
modify C++, (which is a direct
descendant of the C programming language).
Java I--Copyright 2000-2007 Tom Hunter

The Genesis of Java

Soon, Gosling was writing a new language,


which he named Oak after the tree outside
his window.
Oak to had to be:
Small to work on Consumer electronics,
Platform independent, to avoid hassles like the
ones Naughton encountered,
an Interpreted language,
Object Oriented,

Java I--Copyright 2000-2007 Tom Hunter

The Genesis of Java


Reliable--which made him remove aspects of C++:
i.) No Multiple Inheritance--he used interfaces
instead
ii.) No Operator Overloading
iii.) No Manual Memory allocation and dealloc
iv.) No Pointers--no pointer arithmetic*
v.) No assignment in conditionals (== vs = )
and add things C++ lacked:
i.) Implicit Garbage Collection--no memory leaks
ii.) Data Structures only in Objects
iii.) Built in Security.
*

Technically, Java still has pointers but they are called references and cannot be used to do
pointer arithmetic or any of the other shenanigans that make C programming such a joy.

Java I--Copyright 2000-2007 Tom Hunter

The Genesis of Java

Demo of *7, Programmed in Oak


3 Sept 1992

This was the prototype of the


first device to use the Oak
programming language.
The Star7 also featured the
debut of Duke, the Java
mascot. An early applet
showed Duke doing
cartwheels across the screen.
Java I--Copyright 2000-2007 Tom Hunter

The Genesis of Java

Oak becomes Java.


Jan 1995

By this time, the Internet had taken off.


Bill Joy, one of Suns founders, realized that
the needs of the Web [ reliability, platform
independence, security ] exactly matched the
characteristics of Oak, which had just been
renamed Java.
Java I--Copyright 2000-2007 Tom Hunter

The Genesis of Java

Java Catches Fire


23 Mar 1995

Although Java had not yet been


officially released, it was spreading like
wildfire among developers.
Then, something very lucky happened...

Java I--Copyright 2000-2007 Tom Hunter

Java I--Copyright 2000-2007 Tom Hunter

The Genesis of Java

Netscape Navigator 2.0


23 May 1995

Two months later, at the SunWorld


conference, Marc Andreessen stepped on
stage and announced that Java is real, and it
will be incorporated into Netscape Navigator
2.0.
At this moment, Suns entire Java team only
numbered 30 people.
Java I--Copyright 2000-2007 Tom Hunter

Javas
Major Advantage
over C & C++

Java I--Copyright 2000-2007 Tom Hunter

Javas Major Advantage over C & C++

Because pointers were a major source of


bugs in C and C++, Gosling omitted pointers
entirely from Java.
Actually, pointers are still an important part
of the language--all objects are referenced by
pointers--but the language handles them, not
the programmer.
Java I--Copyright 2000-2007 Tom Hunter

Javas Origins in C & C++

Thus, it has been said that...

Java is C without
the Guns and
Knives.
Java I--Copyright 2000-2007 Tom Hunter

Java Architecture
By now, Java itself has matured into its 7th
version, named Java 7.
Java is Object-Oriented*--that means
everything in the language behaves like an
object.
What exactly that means will be explained
in the coming lectures.
* Purists

will say the presence of primitive variables makes this only 99.9% true.

Java I--Copyright 2000-2007 Tom Hunter

Java Architecture

Javas Architecture comes from four


separate but intertwined technologies:

the Java Programming Language


the Java class file format
the Java API, or Application Programming Interface
the Java Virtual Machine

Java I--Copyright 2000-2007 Tom Hunter

Java Architecture

Source programs are written in the Java


Programming Language.
All procedural code falls within methods.
Programs are compiled into Java class files.

Classes run in the Java Virtual Machine.

Java I--Copyright 2000-2007 Tom Hunter

Java Architecture

When a Java program runs,


it is assisted by other classes
in the Java Application
Programming Interface, or
API.

Java I--Copyright 2000-2007 Tom Hunter

Java Architecture

Combined, the Java


Example Java API class files
Virtual Machine and
the
Object.class
String.class
Java API form a
Platform.
Compile-Time
Environment
Hello.class

Java
Compiler

Hello.java

Java
Virtual
Machine
Run-Time
Environment

The Java PlatformJava I--Copyright 2000-2007 Tom Hunter

Java Architecture

The Java Platform is unique, because it can


work without modification
on
any platform,
on any
operating system,
if that
platform has a
Java Virtual
Machine.

Java I--Copyright 2000-2007 Tom Hunter

Java Architecture

What is the

Java
Virtual
Machine

Comparison of a typical Procedural


Program with a Java Program:
In a typical C program, the source code is
compiled into a native machine language
module that consists of 1s and 0s.
Java I--Copyright 2000-2007 Tom Hunter

C Source Code

C object module
compiled into
machine language

The machine language is specifically tailored


to one OS, be it Wintel, Mac, UNIX or MVS.
Therefore, it is impossible for one object
module to be portable between platforms.
Java I--Copyright 2000-2007 Tom Hunter

Java Architecture

Java bytecode
In contrast to conventional programming
languages, a Java program is not compiled
into native machine language.
Instead, Java makes bytecode.
Bytecode is the result of a compile, but
the compile results in an intermediate form
that stops short of native machine-specific
code.

Java I--Copyright 2000-2007 Tom Hunter

Java Architecture

Instead of making a machine language


native code for each particular OS, Java
makes a single, universal bytecode module
that feeds into any Java Virtual Machine
(JVM).
Each OS has its own different
implementation of the
Java Virtual Machine.
Java I--Copyright 2000-2007 Tom Hunter

Java Architecture

The JVM sets up its own world within


your RAM.
The JVM creates an internal
software-only sub-computer within the OS.
The bytecode talks to the JVM, and the
JVM talks to the Operating System.
Java I--Copyright 2000-2007 Tom Hunter

Java Architecture

Thus, you get the Holy Grail of software reuse:

Write Once,
Run Anywhere.
Java I--Copyright 2000-2007 Tom Hunter

Java Source
The
bytecode
is met
half-way
by the
JVM.

You can easily see why Bill


Javaisnt
Bytecode
Gates
in love with Java!

JVM-Win

JVM-Mac

JVM-Unix

JVM-IBM

Wintel

Mac

UNIX

MVS

Java I--Copyright 2000-2007 Tom Hunter

Java Architecture

The Virtual Machine interprets the


bytecode one instruction at a time, and
translates it into native machine code.
You compile your program once into
bytecode, but it is interpreted anew every
time it runs.
JIT [Just In Time] compilers can cache
the compiled machine code.
Java I--Copyright 2000-2007 Tom Hunter

Security and the


Sandbox

Java I--Copyright 2000-2007 Tom Hunter

Security and the Sandbox

C and C++ are famous for speed.


One reason they are fast is because C
and C++ dont do things like checking the
bounds of arrays.
In C or C++, a program can walk off
the edge of an array and invade the memory
space beyond.
Hackers love that about C and C++.
Java I--Copyright 2000-2007 Tom Hunter

Security and the Sandbox

Another weakness of C/C++, that is a


favorite among Hackers, is the Buffer
Overflow.
In this attack, the Hacker floods too much
data into a buffer and whatever overflows it is
turned loose on the system.
Java solves these problems
Java I--Copyright 2000-2007 Tom Hunter

Security and the Sandbox

How Java Combats malicious code:


Java checks array boundaries
Java halts Buffer Overflows
Java has Garbage collection to get rid
of objects that are no longer used.
Javas verifier checks to make sure
the code is safe before it runs.
Gosling built security into Java, using a
concept known as the Sandbox.
Java I--Copyright 2000-2007 Tom Hunter

Security and the Sandbox

Remote Code

Local Code
All Code, both Local and Remote, Must Pass Security Policy

JDK 1.2

Security Model
SANDBOX

Vulnerable System Resources


(files, etc) Even Local Code is Not Trusted

Has Fine-Grain Access Control

Java I--Copyright 2000-2007 Tom Hunter

Security and the Sandbox

5 Steps To Writing A Java Program:


1.) Write it in a Text Editor
2.) Compiler creates bytecode
3.) The Class loader places the .class
file in memory.
4.) The Bytecode Verifier makes sure
the code adheres to Javas security
rules.
5.) The JVM Interpreter reads bytecode
and makes platform native code.
Java I--Copyright 2000-2007 Tom Hunter

Security and the Sandbox

You see, preventing problems is a major


design consideration in Java. Other languages
do this too but Java was built around it.
This idea led to the most import aspect of
Java: Object Orientation.
Object Orientation protects data and lets a
program do only what is explicitly permitted.
You could say Java is pessimistic.
Java I--Copyright 2000-2007 Tom Hunter

Objects in Java
In Java, Object Orientation is so
pervasive that its nearly impossible to
write a strictly procedural program in
the language.

Java I--Copyright 2000-2007 Tom Hunter

Objects in Java

Objects are reusable components.


In Java, everything must be run from a
class file. This class contains bytecode.
Java source code has the extension
Xxx.java

Java I--Copyright 2000-2007 Tom Hunter

Objects in Java

If I write a Java program called:


Hello.java

then, when compiled, this program will


be called:
Hello.class

Java I--Copyright 2000-2007 Tom Hunter

Objects in Java

A class object is compiled Java code that


contains its own data variables, called
members, and sections of procedural code
called methods.
If you have programmed in COBOL, a
method is like a paragraph you perform.
If you have programmed in C or C++, a
method is like a function your program calls.
Java I--Copyright 2000-2007 Tom Hunter

Objects in Java

The combination of the data variables


and the methods
that are used to read,
write
or modify
those variables

is called a class.

Java I--Copyright 2000-2007 Tom Hunter

Objects in Java

Java has a rich collection of Class Libraries.


These are also known as the Java API or
Application Programming Interface.
To program in Java, you must

i.) Learn the Language, and


ii.) Learn the Class Libraries.
Java I--Copyright 2000-2007 Tom Hunter

Objects in Java

These class libraries greatly simplify your


job as a Java programmer.
They help you to write complex programs
quickly.
To master Java, you must master these
class libraries.

Java I--Copyright 2000-2007 Tom Hunter

Compiling A Java Program


You have created a Java program called
Hello.java
To compile it, you run the JDK supplied
utility called:

javac
C:\javac Hello.java

If this was successful, a file called:


Hello.class will be produced.
Java I--Copyright 2000-2007 Tom Hunter

First Java Program


The two largest varieties of Java
programs:

Applications
Applets
Java I--Copyright 2000-2007 Tom Hunter

First Java Program

A Java Application is a free-standing


program that is capable of running
directly in the Java Virtual Machine.

A Java Applet is a mini-program that is


much more limited in its abilities. An
Applet can only run within the context of
an HTML browser.
Java I--Copyright 2000-2007 Tom Hunter

A Java Application
// HelloWorld.java Our first Java Application
public class HelloWorld
{
public static void main( String args[])
{
System.out.println( Hello World! );
}
}

The double slashes denote a C++-style comment.


Everything on the line after the double slashes is
ignored by the compiler.

Java I--Copyright 2000-2007 Tom Hunter

A Java Application
// HelloWorld.java Our first Java Application
public class HelloWorld
{
public static void main( String args[])
{
System.out.println( Hello World! );
}
}

This is the class name.


Every single bit of code in Java must sit in curly brackets.
Class names are capitalized.
Words within the name are also capitalized.
This Java program must be saved in a file with the exact
same name--matching the upper case--as you see in blue
above: HelloWorld.java
Java I--Copyright 2000-2007 Tom Hunter

A Java Application
// HelloWorld.java Our first Java Application
public class HelloWorld
{
public static void main( String args[])
{
System.out.println( Hello World! );
}
}

Now our Application is complete. We have added the


method main. All methods are lower case. main is a
special method--it actually runs the program.
In any application, you are always guaranteed
that method main will run.
Java I--Copyright 2000-2007 Tom Hunter

A Java Application
C:\>javac HelloWorld.java
C:\>

A successful compile of your java


program will return to a bare cursor, as
you see here.
Java I--Copyright 2000-2007 Tom Hunter

A Java Application
C:\>javac HelloWorld.java
C:\>java HelloWorld
Hello World!

To run your compiled Application,


you enter lowercase java HelloWorld
on the command line.
Notice, the .class extension is
omitted.
Java I--Copyright 2000-2007 Tom Hunter

In Class Activity
Now load the JDK. I recommend using th
most current one.

Get the documentation,


change the class path and

write your first Java program.

Java I--Copyright 2000-2007 Tom Hunter

You might also like