Download ppt - UMBC

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
The JAVA
API
UMBC CMSC 331 Java
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
UMBC CMSC 331 Java
2
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
See http://docs.oracle.com/javase/8/docs/api/
for the current APIs
UMBC CMSC 331 Java
3
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()
UMBC CMSC 331 Java
4
Observing an object’s class
void printClassName (Object obj) {
System.out.println("The class of " + obj +
" is " + obj.getClass().getName());
}
UMBC CMSC 331 Java
5
Strings in Java
• Strings are nt a primitive data type, but represented
as objects.
• Many methods defined in class java.lang:
– Several constructors
– Lots of methods: concat(), equals(), indexOf(), length()
– strings are concatenated with +
• Strings are constants (immutable)
– You can concatenate two strings to produce a new,
longer string, using the + operator, but you cannot add,
delete, insert into, or delete from any particular string.
UMBC CMSC 331 Java
6
StringBuffers in Java
• Several methods defined in class java.lang:
– Constructors can specify length or initial value
– append(), insertf(), length(), toString()
UMBC CMSC 331 Java
7
Java.lang.system
• Printstreams
– System.out.err(“Error message”);
• Inputstreams
– System.in.read(inputCharacter)
– System.in.read(inputBuffer, 0, maxChars)
UMBC CMSC 331 Java
8
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.
UMBC CMSC 331 Java
9
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
UMBC CMSC 331 Java
10
System Properties
• System properties are like UNIX environment
variables, but platform independent
• The API class java.util has methods for
accessing the system properties
UMBC CMSC 331 Java
11
// determine environment variables
import 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);
}
}
Java GUI
• The awt class allows you to create
– frames
– buttons
– menus and menubars
– checkboxes
– text areas
– scrolling lists
UMBC CMSC 331 Java
13
Java.net
• Defines several useful objects:
– URLs
– Internet Addresses
– Sockets
– Datagrams
• packets
• sockets
UMBC CMSC 331 Java
14
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()
UMBC CMSC 331 Java
15
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);
}
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);
}
}
}
UDP Examples
• UDP - Unreliable datagram packet
• Examples from Flanagan
– Send a UDP packet
– Receive a UDP packet
UMBC CMSC 331 Java
18
//
//
//
//
//
//
//
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);
}
// 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);
}
}
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);
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
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
UMBC CMSC 331 Java
23
The Runnable Interface
• A class that implements this interface can provide
the “body” of a thread
• The run() method needs to be specified
UMBC CMSC 331 Java
24
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?)
UMBC CMSC 331 Java
25
// 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; }
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");
}
}
}
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
UMBC CMSC 331 Java
28
// 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);
}
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){}
}
}
}
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
UMBC CMSC 331 Java
31
Multiple Threaded Example
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);
}
}
UMBC CMSC 331 Java
32
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; }
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");
}
}
}
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?
UMBC CMSC 331 Java
35
Where to get more information
• There are now many decent Java books
• Many other web resources
UMBC CMSC 331 Java
36