You are on page 1of 53

Java I--Copyright © 2000-2004 Tom Hunter

Java I--Copyright © 2000-2004 Tom Hunter


Chapter 1
Introduction to Computers,
the Internet and the Web

Java I--Copyright © 2000-2004 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 OS’s and
vendors--all work as one. It was impossible.
Java I--Copyright © 2000-2004 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
Java I--Copyright © 2000-2004 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-2004 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-2004 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-2004 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.

Java I--Copyright © 2000-2004 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-2004 Tom Hunter
The Genesis of Java
• Oak becomes Java.
Jan 1995

By this time, the Internet had taken off.


Bill Joy, one of Sun’s 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-2004 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-2004 Tom Hunter


Java I--Copyright © 2000-2004 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, Sun’s entire Java team only
numbered 30 people.
Java I--Copyright © 2000-2004 Tom Hunter
Java’s
Major Advantage
over C & C++

Java I--Copyright © 2000-2004 Tom Hunter


Java’s 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-2004 Tom Hunter


Java’s Origins in C & C++

Thus, it has been said that...

“Java is C without
the Guns and
Knives.”
Java I--Copyright © 2000-2004 Tom Hunter
Java Architecture
• By now, Java itself has matured into its 3rd
version, named Java 2. This course is based
on Java 2. The most current is Java 2 (1.5.1)
• Java is Object-Oriented--that means
everything in the language behaves like an
object.
• What exactly that means will be explained
in the coming weeks.
Java I--Copyright © 2000-2004 Tom Hunter
Java Architecture
Java’s 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-2004 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-2004 Tom Hunter


Java Architecture

• When a Java program runs,


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

Java I--Copyright © 2000-2004 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
Java
Virtual
Compiler Machine

Run-Time
Hello.java Environment
The Java PlatformJava I--Copyright © 2000-2004 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-2004 Tom Hunter


Java Architecture
Java
What is the 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 1’s and 0’s.
Java I--Copyright © 2000-2004 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-2004 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-2004 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-2004 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-2004 Tom Hunter


Java Architecture

• Thus, you get the Holy Grail of software reuse:

“Write Once,
Run Anywhere”.

Java I--Copyright © 2000-2004 Tom Hunter


Java Source

The You can easily see why Bill


bytecode Gates
Javaisn’t in love with Java!
Bytecode
is met
half-way
by the
JVM.

JVM-Win JVM-Mac JVM-Unix JVM-IBM


Wintel Mac UNIX MVS
Java I--Copyright © 2000-2004 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.

Java I--Copyright © 2000-2004 Tom Hunter


Security and the
“Sandbox”

Java I--Copyright © 2000-2004 Tom Hunter


Security and the “Sandbox”

C and C++ are famous for speed.

• One reason they are fast is because C


and C++ don’t 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-2004 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-2004 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.
Java’s compiler 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-2004 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-2004 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 Java’s security
rules.
5.) The JVM Interpreter reads bytecode
and makes platform native code.
Java I--Copyright © 2000-2004 Tom Hunter
Security and the “Sandbox”
• You see, preventing problems is a major
design consideration in Java.

• 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-2004 Tom Hunter
Objects in Java

• In Java, Object Orientation is so


pervasive that it’s nearly impossible to
write a strictly procedural program in
the language.

Java I--Copyright © 2000-2004 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-2004 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-2004 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-2004 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-2004 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-2004 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-2004 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-2004 Tom Hunter
First Java Program
• The two largest varieties of Java
programs:

Applications

Applets

Java I--Copyright © 2000-2004 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-2004 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
The ouris Application
double
This theslashes is complete.
denote
class name. We have
a “C++”-style added the
comment.
method
Every“main”.
Everything single bitAll
on the of methods
linecode
afterintheare
Java lower
double case.
mustslashes
sit main
in curly is a
is brackets.
special
Classmethod--it
ignored by
names are actually
the compiler. runs the program.
capitalized.
Words Inwithin the name are
any application, youalso
are capitalized.
always guaranteed
thatThis Java main
method program must
will run.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-2004 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-2004 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-2004 Tom Hunter
In Class Activity

Now load the JDK1.4.1,


the documentation,
change the class path and
write your first Java program.

Java I--Copyright © 2000-2004 Tom Hunter


Java I--Copyright © 2000-2004 Tom Hunter

You might also like