introduction to java cmsc 331 spring 1999. introduction present the syntax of java introduce the...

76
Introduction to JAVA CMSC 331 Spring 1999

Upload: suzanna-wade

Post on 24-Dec-2015

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Introduction to JAVA

CMSC 331

Spring 1999

Page 2: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Introduction

• Present the syntax of Java

• Introduce the Java API

• Demonstrate how to build – stand-alone Java programs– Java applets, which run within browsers e.g.

Netscape

• Example programs tested using Java on Windows 98 and/or SGI

Page 3: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Features of Java

• Object-oriented programming language– clean, simple syntax– similar to C, but without complexity of C++

• Comprehensive API (application program interface)– platform independence– useful classes and methods

Page 4: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Building Standalone JAVA Programs (on UNIX)

• Prepare the file foo.java using an editor

• Invoke the compiler: javac foo.java• This creates foo.class• Run the java interpreter: java foo

Page 5: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Java Virtual Machine

• The .class files generated by the compiler are not executable binaries– so Java combines compilation and interpretation

• Instead, they contain “byte-codes” to be executed by the Java Virtual Machine– other languages have done this, e.g. UCSD Pascal

• This approach provides platform independence, and greater security

Page 6: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

HelloWorld (standalone)public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); }}

• Note that String is built in

• println is a member function for the System.out class

Page 7: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Applets

• The JAVA virutal machine may be executed under the auspices of some other program, e.g. a Web browser.

• Bytecodes can be loaded off the Web, and then executed locally.

• There are classes in Java to support this

Page 8: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Building Applets

• Prepare the file foo.java, and compile it to create foo.class

• Invoke an Applet Viewer, or a Java-aware browser such as Netscape, and open an HTML file such as foo.html

• Browser invokes the Java Virtual Machine

Page 9: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

HelloWorld.java

import java.applet.*;

public class HelloWorld extends Applet { public void init() { System.out.println("Hello, world!"); }}

Page 10: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

hello.html

<title>Hello, World</title><h1>Hello, World</h1><applet code="HelloWorld.class" width=100 height=140></applet>

Page 11: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Data Types in Java

• Primitive data types similar to C– boolean true and false– char 16 bits UNICODE– byte, short, int, long integers; 8, 16, 32 and 64

bits respectively– float and double IEEE 754

Page 12: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Array Allocation

• Declared in two ways:– float Vector1[] = new float[500];– int Vector2[] = {10, 20, 30, 40};

• Not allocated on stack, but dynamically

• Are subject to garbage collection when no more references remain– so fewer memory leaks– Java doesn’t have pointers!

Page 13: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Array Operations

• Subscripts start at 0 as in C

• Subscript checking is done automatically

• Certain operations are defined on arrays of objects, as for other classes– e.g. Vector1.length == 500

Page 14: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Echo.javaC:\UMBC\331\java>type echo.java// This is the Echo example from the Sun tutorialclass echo { public static void main(String args[]) { for (int i=0; i < args.length; i++) { System.out.println( args[i] ); } }}

C:\UMBC\331\java>javac echo.java

C:\UMBC\331\java>java echo this is pretty sillythisisprettysilly

C:\UMBC\331\java>

Page 15: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

JAVA Classes

• The class is the fundamental concept in JAVA (and other OOPLs)

• A class describes some data object(s), and the operations (or methods) that can be applied to those objects

• Every object and method in Java belongs to a class

Page 16: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Syntax Notes

• No global variables– class variables and methods may be applied to

any instance of an object– methods may have local (private?) variables

• No pointers– but complex data objects are “referenced”

• Other parts of Java are borrowed from PL/I, Modula, and other languages

Page 17: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Example: FIFO

• To show how simple data structures are built without pointers, we’ll build a doubly-linked list– ListItem class has some user data– first refers to that ListItem object at the

front of the queue– last refers to the object at the end of the

queue, i.e. most recently added

Page 18: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

public class ListItem { // In file ListItem.java public Object x; // N.B. a heterogeneous queue public ListItem previous; public ListItem next; // Constructor operation takes initial value public ListItem(String val) { // this refers to “current” object this.x = val; this.previous = this.next = null; } public boolean equals(ListItem c) { // two ListItems are equal if their string values // are equal and they point to the same objects return ( x.equals(c.x) && (previous == c.previous) && (next == c.next) ); } public void printItem() { System.out.println(x); }}

Page 19: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

import java.applet.*; // overview of fifo.java

public class fifo extends Applet { private int count = 0; public ListItem first = null; // first is the next item to be removed public ListItem last = null; // last is the item most recently added

// Called to initialize and test the applet. More detail on next page. public void init() { System.out.println("isEmpty returns "+isEmpty()); putQueue("node 1"); ... getQueue().printItem(); ... } // See if the queue is empty public boolean isEmpty() { ... } // Add an item to the queue public void putQueue(String value) { ... } // Get the first item off the front of the queue public ListItem getQueue() { ... }}

Page 20: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

// Called to initialize and test the applet. public void init() {

System.out.println("isEmpty returns "+isEmpty());putQueue("node 1");System.out.println("First node is "); first.printItem();System.out.println("Last node is "); last.printItem();

putQueue("node 2");System.out.println("First node is "); first.printItem();System.out.println("Last node is "); last.printItem();

getQueue().printItem();System.out.println("First node is "); first.printItem();System.out.println("Last node is "); last.printItem();

getQueue().printItem();System.out.println("isEmpty returns "+isEmpty());

}

Page 21: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

// See if the queue is empty public boolean isEmpty() { return (count == 0); }

// Add an item to the queue public void putQueue(String value) { ListItem newItem = new ListItem(value);

if ( isEmpty() ) { // Special case of empty queue first = last = newItem; } else { // next is the next item in the queue // previous is the item (if any) that was in the // queue right ahead of this (current) item last.next = newItem; newItem.previous = last; last = newItem; } count++; }

Page 22: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

// Get the first item off the front of the queue public ListItem getQueue() { ListItem firstItem = first;

// Make sure the queue isn't empty if (isEmpty() ) { System.out.println("Called getQueue on an empty queue"); } else { this.first = firstItem.next; // Did we just remove the only item in the queue? if (first == null) { last = null; } else { first.previous = null; } count--; } return firstItem; }

Page 23: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Programming by Contract

• Note that the integer variable count, and first and last (both of type ListItem, are redundant in that– first and last are null iff count == 0– first == last , but both not null iff count == 1– otherwise first != last iff count > 1

• Java has no assert macro, but we can test and throw an exception.

Page 24: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

// See if the queue is empty // Check consistency of count, first and last // Note that exceptions are first-class objects

class CorruptFifoException extends Exception; ... public boolean isEmpty() { if (count == 0) { if (first == null && last == null) {

return (true); } else {

throw new CorruptFifoException(“first and last should be null”); } } else { // count != 0 ... } }

Page 25: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Java vs. C++

• Lots of similarity to C++– expressions (, operator okay only in loops)– control structures same, except breaks and

continues may have labels, e.g. to escape from switch statements

– Java has single inheritance– Java doesn’t do templates

Page 26: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Single Inheritance, but

• A class may extend only one class, but it may implement many others

• A subclass inherits the variables and methods of its superclass(es), but may override them

• Overrides the methods defined in the class(es) it implements, as in upcoming thread example

Page 27: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Packages

• Classes may be grouped into packages

• Six packages come with Java

• Packages add functionality without extending the language per se

• The import statement lets you use a method without its package name, e.g. import java.applet.* provides Applet class

Page 28: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Classes and Interfaces

• The methods of an abstract class are implemented elsewhere

• A final class cannot be extended

• Instances of a synchronizable class can be arguments of a synchronize block– Which means that access to “critical sections”

is restricted

Page 29: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Visibility of Methods

• Methods in a public class can be used outside. The file foo.java must contain exactly one public class: public class foo

• Methods in a private class can be used only within a file

• Default: class is accessible within current class package

Page 30: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Applets vs. Stand-alone

• Applets have many restrictions, which can be relaxed!– no system calls– limited network access after local file system is

touched– many others

Page 31: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Exceptions

• Exceptions are objects in their own right

• They can be generated, caught and handled under program control

• Examples: IOException, ArithmeticException, etc.

Page 32: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

try/catch/finally

• Associates a set of statements with one or more exceptions and some handling code

try { Thread.sleep(200); } catch(InterruptedException e){ System.out.println(e); } finally { System.out.println(“Wakeup”);}

Page 33: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

A Tour of the Java API

• An API User’s Guide, in HTML, is bundled with Java

• Much of the “learning curve” is in the API

• Let’s look at some packages

Page 34: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

The Java API• java.applet

– Applet class

• java.awt– Windows, buttons,

mouse, etc.

• java.awt.image– image processing

• java.awt.peer– GUI toolkit

• java.io– System.out.print

• java.lang– length method for

arrays; exceptions

• java.net– sockets

• java.util– System.getProperty

Page 35: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

The package java.lang• The class Object

– The root class in Java– Example methods: clone(), equals(), toString()

– Subclasses may override these methods

• The class Class– Example methods: getName(), getSuperClass()

Page 36: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Observing an object’s class

void printClassName (Object obj) { System.out.println("The class of " + obj + " is " + obj.getClass().getName());}

Page 37: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Strings in Java

• Many methods defined in class java.lang:– Several constructors– concat(), equals(), indexOf(), length()– Strings are immutable (why?)– strings are concatenated with +

Page 38: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

StringBuffers in Java

• Several methods defined in class java.lang:– Constructors can specify length or initial value– append(), insertf(), length(), toString()

Page 39: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Java.lang.system

• Printstreams– System.out.err(“Error message”);

• Inputstreams– System.in.read(inputCharacter)– System.in.read(inputBuffer, 0, maxChars)

Page 40: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

The Cloneable Interface

• A class implements the cloneable interface by overriding the Object method clone()

• For example, we could add a clone() method to the FIFO class, if we wanted to be able to make copies of queues.

Page 41: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

The class java.util

• Interface to host OS

• Some basic functions and data structures– BitSet, Dictionary (the superclass of

Hashtable), Stack, Vector– Random number generation

Page 42: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

System Properties

• System properties are like UNIX environment variables, but platform independent

• The API class java.util has methods for accessing the system properties

Page 43: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

// determine environment variablesimport java.util.*;class envSnoop { public static void main ( String args[] ) { Properties p; String s; p = System.getProperties(); p.list(System.out); s = System.getProperty("user.name"); System.out.println("user.name="+s); s = System.getProperty("user.home"); System.out.println("user.home="+s); }}

Page 44: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

C:\UMBC\331\java>java envSnoop

-- listing properties --

java.specification.name=Java Platform API Specification

awt.toolkit=sun.awt.windows.WToolkit

java.version=1.2

java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment

user.timezone=America/New_York

java.specification.version=1.2

java.vm.vendor=Sun Microsystems Inc.

user.home=C:\WINDOWS

java.vm.specification.version=1.0

os.arch=x86

java.awt.fonts=

java.vendor.url=http://java.sun.com/

user.region=US

file.encoding.pkg=sun.io

java.home=C:\JDK1.2\JRE

java.class.path=C:\Program Files\PhotoDeluxe 2.0\Adob...

line.separator=

java.ext.dirs=C:\JDK1.2\JRE\lib\ext

java.io.tmpdir=C:\WINDOWS\TEMP\

os.name=Windows 95

java.vendor=Sun Microsystems Inc.

java.awt.printerjob=sun.awt.windows.WPrinterJob

java.library.path=C:\JDK1.2\BIN;.;C:\WINDOWS\SYSTEM;C:\...

java.vm.specification.vendor=Sun Microsystems Inc.

sun.io.unicode.encoding=UnicodeLittle

file.encoding=Cp1252

java.specification.vendor=Sun Microsystems Inc.

user.language=en

user.name=nicholas

java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport...

java.vm.name=Classic VM

java.class.version=46.0

java.vm.specification.name=Java Virtual Machine Specification

sun.boot.library.path=C:\JDK1.2\JRE\bin

os.version=4.10

java.vm.version=1.2

java.vm.info=build JDK-1.2-V, native threads, symcjit

java.compiler=symcjit

path.separator=;

file.separator=\

user.dir=C:\UMBC\331\java

sun.boot.class.path=C:\JDK1.2\JRE\lib\rt.jar;C:\JDK1.2\JR...

user.name=nicholas

user.home=C:\WINDOWS

C:\UMBC\331\java>

Page 45: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Java GUI

• The awt class allows you to create– frames– buttons– menus and menubars– checkboxes– text areas– scrolling lists

Page 46: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

GUI Examples

• “Hello World”, revisited

• The Scribble example

• Both examples adapted from Flanagan’s “Java in a Nutshell”, first edition

Page 47: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

import java.applet.*;import java.awt.*;

public class SecondApplet extends Applet { static final String message = "Hello World"; private Font font;

// One-time initialization for the applet public void init() { font = new Font("Helvetica", Font.BOLD, 48); }

// Draw the applet whenever necessary. // Do some fancy graphics. public void paint(Graphics g) { // The pink oval g.setColor(Color.pink); g.fillOval(10, 10, 330, 100);

Page 48: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

// The red outline. java doesn't support wide lines, so we// try to simulate a 4-pixel wide line by drawing four ovals g.setColor(Color.red); g.drawOval(10,10, 330, 100); g.drawOval(9, 9, 332, 102); g.drawOval(8, 8, 334, 104); g.drawOval(7, 7, 336, 106);

// The text g.setColor(Color.black); g.setFont(font); g.drawString(message, 40, 75); }}

Page 49: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Scribble

• Graphics objects can be added to applets, e.g. buttons and menus

• Events, such as mouse clicks, are handled

Page 50: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

import java.applet.*;import java.awt.*;

public class Scribble extends Applet { private int last_x = 0; private int last_y = 0; private Color current_color = Color.black; private Button clear_button; private Choice color_choices; // Called to initialize the applet. public void init() {

// Set the background colorthis.setBackground(Color.white);

// Create a button and add it to the applet.// Also, set the button's colorsclear_button = new Button("Clear");clear_button.setForeground(Color.black);clear_button.setBackground(Color.lightGray);this.add(clear_button);

Page 51: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

// Create a menu of colors and add it to the applet.// Also set the menu's colors and add a label.color_choices = new Choice();color_choices.addItem("black");color_choices.addItem("red");color_choices.addItem("yellow");color_choices.setForeground(Color.black);color_choices.setBackground(Color.lightGray);this.add(new Label("Color:"));this.add(color_choices);

}

Page 52: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

// Called when the user clicks the mouse to start a scribble public boolean mouseDown(Event e, int x, int y) { last_x = x; last_y = y; return true; }

// Called when the user scribbles with the mouse button down public boolean mouseDrag(Event e, int x, int y) { Graphics g = this.getGraphics(); g.setColor(current_color); g.drawLine(last_x, last_y, x, y); last_x = x; last_y = y; return true; }

Page 53: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

// Called when the user clicks the button or chooses a color public boolean action(Event event, Object arg) { // If the Clear button was clicked, handle it if (event.target == clear_button) { Graphics g = this.getGraphics(); Rectangle r = this.bounds(); g.setColor(this.getBackground()); g.fillRect(r.x, r.y, r.width, r.height); return true;

} // Otherwise if a color was chosen, handle that

if (event.target == color_choices) { if (arg.equals("black")) current_color=Color.black; else if (arg.equals("red")) current_color=Color.red; else if (arg.equals("yellow")) current_color=Color.yellow; return true;}

// Otherwise let the superclass handle the event else return super.action(event, arg); }}

Page 54: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Java.net

• Defines several useful objects:– URLs– Internet Addresses– Sockets– Datagrams

• packets

• sockets

Page 55: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Manipulating URLs

• A Web server can provide lots of information about a file being sent back in response to an HTTP request.

• A URL can be read– into a string, using the getContent()– or opened as a DataInputStream, and read using

readLine()

Page 56: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

import java.net.*;import java.io.*;import java.util.*;

public class GetURLInfo {

// Create a URL from the specified address, open a connection // to it, and then display information about the URL. public static void main(String[] args) throws MalformedURLException, IOException { URL url = new URL(args[0]); URLConnection connection = url.openConnection(); printinfo(connection); }

Page 57: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

public static void printinfo(URLConnection u) throws IOException { // Display the URL address, and information about it. System.out.println(u.getURL().toExternalForm() + ":"); System.out.println(" Content Type: " + u.getContentType()); System.out.println(" Content Length: " + u.getContentLength()); System.out.println(" Last Modified: " + new Date(u.getLastModified())); System.out.println(" Expiration: " + u.getExpiration()); System.out.println(" Content Encoding: " + u.getContentEncoding()); // Read and print out the first five lines of the URL. System.out.println("First five lines:"); DataInputStream in = new DataInputStream(u.getInputStream()); for(int i = 0; i < 5; i++) { String line = in.readLine(); if (line == null) break; System.out.println(" " + line); } }}

Page 58: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

UDP Examples

• UDP - Unreliable datagram packet

• Examples from Flanagan– Send a UDP packet– Receive a UDP packet

Page 59: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

// This example is from the book _Java in a Nutshell_ by // David Flanagan.// Written by David Flanagan. // Copyright (c) 1996 O'Reilly & Associates.// You may study, use, modify, and distribute this example for // any purpose. This example is provided WITHOUT WARRANTY // either expressed or implied.

import java.io.*;import java.net.*;

// This class sends the specified text as a datagram to// port 6010 of the specified host.public class UDPSend { static final int port = 6010; public static void main(String args[]) throws Exception { if (args.length != 2) { System.out.println( "Usage: java UDPSend <hostname> <message>"); System.exit(0); }

Page 60: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

// Get the internet address of the specified host InetAddress address = InetAddress.getByName(args[0]); // Convert the message to an array of bytes int msglen = args[1].length(); byte[] message = new byte[msglen]; args[1].getBytes(0, msglen, message, 0);

// Initilize the packet with data and address DatagramPacket packet = new DatagramPacket(message, msglen, address, port); // Create a socket, and send the packet through it. DatagramSocket socket = new DatagramSocket(); socket.send(packet); }}

Page 61: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

import java.io.*;import java.net.*;

// This program waits to receive datagrams sent to port 6010. // When it receives one, it displays the sending host and port, // and prints the contents of the datagram as a string.public class UDPReceive { static final int port = 6010; public static void main(String args[]) throws Exception { byte[] buffer = new byte[1024]; String s; // Create a packet with an empty buffer to receive data DatagramPacket packet = new DatagramPacket(buffer, buffer.length); // Create a socket to listen on the port. DatagramSocket socket = new DatagramSocket(port);

Page 62: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

for(;;) { // Wait to receive a datagram socket.receive(packet); // Convert the contents to a string s = new String(buffer, 0, 0, packet.getLength()); // And display them System.out.println("UDPReceive: received from " + packet.getAddress().getHostName() + ":" + packet.getPort() + ": " + s); } // close for } // close main} // close class UDPReceive

Page 63: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Using Threads

• Thread objects are the basis for multi-threaded programming.

• Multi-threaded programming allows a single program to conduct concurrently running threads that perform different tasks.

• Defined in java.lang.Thread

Page 64: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

The Runnable Interface

• A class that implements this interface can provide the “body” of a thread

• The run() method needs to be specified

Page 65: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Using a Single Thread

• The simpleThread class implements the Runnable interface– Implements run() method for Runnable

interface– Implements init(), start() and stop(), extending Applet class

– Can’t just extend Thread class, since Thread.stop() is final and can’t be overriden (why?)

Page 66: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

// Simple Thread Example, based on "Neon Sign"

public class OneThread extends java.applet.Applet implements Runnable { Thread kicker;

public void init() { kicker = null; } public void start() { if(kicker == null) { // If no thread is started yet kicker=new Thread(this); // then create one kicker.start(); // and start it } }

public void stop() { kicker.stop(); kicker = null; }

Page 67: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

public void run() { long sleepTime; System.out.println("Hello!"); sleepTime = 5000;

while(true) { // Loop forever // The sleep method below might be interrupted // and cause an exception, so catch it. try { // Wait for some period of time Thread.sleep( sleepTime ); sleepTime = (sleepTime == 3000 ? 4000 : 3000 ); } catch (Exception e){ return; } System.out.println("Hello again after "+sleepTime+ " milliseconds"); } }}

Page 68: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Neon Sign Example

• Start a thread

• Load two GIF images

• Repeat forever – Display first image– Sleep a random period of time– Display the other image

Page 69: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

// Blinking Neon Light by Mattias Flodin

import java.awt.*;

public class BlinkItem extends java.applet.Applet implements Runnable { Image imPic[]; // Array that holds the two images int iPicIndex=0; // Keeps track of which image is displayed Thread kicker;

public void init() { // *Always* resize, in case the HTML author forgot to // include WIDTH and HEIGHT tags resize(512,243); }

public void Paint(Graphics g) { update(g); }

// Using the update method will get rid of some flickering public void update(Graphics g) { // Display an error message if something // unexpected has happened to the images if(imPic[iPicIndex]==null) g.drawString("Error when loading picture", 0, 172);

// Draw the current image g.drawImage(imPic[iPicIndex],0,0, this); }

Page 70: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

public void start() { if(kicker == null) { // If no thread is started yet kicker=new Thread(this); // then create one kicker.start(); // and start it } } public void stop() { kicker=null; } public void run() { imPic=new Image[2]; // Dimension the image array // Load the two images in our 'animation' imPic[0]=getImage(getCodeBase(), "images/Homepage1.gif"); imPic[1]=getImage(getCodeBase(), "images/Homepage2.gif");

for(;;) { // Loop forever repaint(); // Redraw the window iPicIndex=iPicIndex==0 ? 1 : 0; // Switch image // The sleep method below might be interrupted // and cause an InterruptedException, so we'll // have to catch it. try { // Wait for a random amount of time Thread.sleep( (int) (Math.random()*500)); } catch (InterruptedException e){} } }}

Page 71: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Multiple Threads

• An applet that creates a pool of simple threads

• Each thread has an ID number, and may handle different tasks

• Note separation of applet and thread classes

Page 72: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

public class ThreadExample extends java.applet.Applet {

public void init() { simpleThread[] threadPool = new simpleThread[2]; threadPool[0] = new simpleThread(1); threadPool[1] = new simpleThread(2); }}

Multiple Threaded Example

Page 73: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

public class simpleThread implements Runnable {

Thread thisThread; int thisThreadID; public simpleThread (int i) { thisThreadID = i; this.start(); } public void start() { if(thisThread == null) { // If thread isn’t started thisThread = new Thread(this); // create one thisThread.start(); // and start it } }

public void stop() { thisThread.stop(); thisThread = null; }

Page 74: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

public void run() { long sleepTime; System.out.println("Hello from simpleThread "+ thisThreadID); while(true) { // The sleep method below might be interrupted // and cause an exception, so catch it. try { // Wait for a random amount of time sleepTime = (long) ( Math.random()*4 ); Thread.sleep( sleepTime*1000 ); } catch (Exception e) { return; } System.out.println("Hello again from simpleThread "+ thisThreadID+" after "+sleepTime+" seconds"); } } }

Page 75: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Other Ideas

• Patterns as an addition to the StringBuffer class (ala Perl)

• One could easily write a better browser– intelligent pre-fetching of URLs– other ideas?

Page 76: Introduction to JAVA CMSC 331 Spring 1999. Introduction Present the syntax of Java Introduce the Java API Demonstrate how to build –stand-alone Java programs

Where to get more information

• There are now many decent Java books, e.g. Dietel and Dietel, and the second edition of Flanagan

• Many other web resources