Java I--Copyright 2000-2007 Tom Hunter Chapter 1 Introduction to Computers, the Internet and the Web Java I--Copyright 2000-2007 Tom Hunter 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. The Genesis of Java * 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 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). The Genesis of Java Java I--Copyright 2000-2007 Tom Hunter 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, The Genesis of Java 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 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. The Genesis of Java 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 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. Javas Major Advantage over C & C++ Java I--Copyright 2000-2007 Tom Hunter Java is C without the Guns and Knives. Thus, it has been said that... Javas Origins in C & C++ Java I--Copyright 2000-2007 Tom Hunter 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. Java Architecture * 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 Hello.java Java Compiler Hello.class Compile-Time Environment Run-Time Environment Java Virtual Machine Object.class String.class Example Java API class files Combined, the Java Virtual Machine and the Java API form a Platform. The Java Platform Java I--Copyright 2000-2007 Tom Hunter 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 Architecture Java I--Copyright 2000-2007 Tom Hunter 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. What is the ? Java Architecture Java Virtual Machine Java I--Copyright 2000-2007 Tom Hunter C object module compiled into machine language C Source Code 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 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 bytecode Java Architecture Java I--Copyright 2000-2007 Tom Hunter 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 Architecture Java I--Copyright 2000-2007 Tom Hunter 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 Architecture Java I--Copyright 2000-2007 Tom Hunter Thus, you get the Holy Grail of software reuse:
Write Once, Run Anywhere. Java Architecture Java I--Copyright 2000-2007 Tom Hunter Java Source Java Bytecode Wintel Mac UNIX MVS JVM-Win JVM-Mac JVM-Unix JVM-IBM
You can easily see why Bill Gates isnt in love with Java!
The bytecode is met half-way by the JVM. Java I--Copyright 2000-2007 Tom Hunter 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 Architecture 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 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. Security and the Sandbox Java I--Copyright 2000-2007 Tom Hunter JDK 1.2 Security Model Vulnerable System Resources (files, etc) Even Local Code is Not Trusted SANDBOX
Security and the Sandbox Remote Code Has Fine-Grain Access Control All Code, both Local and Remote, Must Pass Security Policy Local Code 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 The two largest varieties of Java programs:
Applications
Applets First Java Program 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 The double slashes denote a C++-style comment. Everything on the line after the double slashes is ignored by the compiler. A Java Application // HelloWorld.java Our first Java Application
// HelloWorld.java Our first Java Application
public class HelloWorld {
} // HelloWorld.java Our first Java Application
public class HelloWorld { public static void main( String args[]) { System.out.println( Hello World! ); } } Java I--Copyright 2000-2007 Tom Hunter 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 A Java Application // HelloWorld.java Our first Java Application
// HelloWorld.java Our first Java Application
public class HelloWorld {
} // HelloWorld.java Our first Java Application
public class HelloWorld { public static void main( String args[]) { System.out.println( Hello World! ); } } Java I--Copyright 2000-2007 Tom Hunter 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. A Java Application // HelloWorld.java Our first Java Application
// HelloWorld.java Our first Java Application
public class HelloWorld {
} // HelloWorld.java Our first Java Application
public class HelloWorld { public static void main( String args[]) { System.out.println( Hello World! ); } } 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 C:\>javac HelloWorld.java
C:\>java HelloWorld Hello World!
A Java Application 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 Now load the JDK. I recommend using th most current one. Get the documentation, change the class path and write your first Java program. In Class Activity