Java
Java
Java
Stoney Jackson
jacksoni@cs.ucdavis.edu
wwwcsif.cs.ucdavis.edu/~jacksoni
2
It was meant to!!
A programming language for appliances!
3
Must Run on Any Architecture
debug
“WRITE ONCE, RUN ANYWHERE!”
pretty portable
Program Java Java
in Java Compiler Bytecode
4
Doesn’t Make Coffee Yet
5
So What’s Java Good For?
Web applications!
Java Applet
Java Applet
Server
6
Java on the Web: Java Applets
Clients download applets via Web browser
Browser runs applet in a Java Virtual Machine (JVM)
Applet
Client
Server
7
Java on the Web: J2EE
Thin clients (minimize download)
Java all “server side”
JSPs
Servlets
Client
Server
EJB
8
The Java programming environment
Compared to C++:
no header files, macros, pointers and references, unions, operator
overloading, templates, etc.
Object-orientation: Classes + Inheritance
Distributed: RMI, Servlet, Distributed object programming.
Robust: Strong typing + no pointer + garbage collection
Secure: Type-safety + access control
Architecture neutral: architecture neutral representation
Portable
Interpreted
High performance through Just in time compilation + runtime
modification of code
Multi-threaded
9
Java Features
Well defined primitive data types: int, float, double, char, etc.
int 4 bytes [–2,147,648, 2,147,483,647]
Control statements similar to C++: if-then-else, switch, while, for
Interfaces
Exceptions
Concurrency
Packages
Name spaces
Reflection
Applet model
10
The Java programming environment
Java programming language specification
Syntax of Java programs
Defines different constructs and their semantics
Java byte code: Intermediate representation for Java programs
Java compiler: Transform Java programs into Java byte code
Java interpreter: Read programs written in Java byte code and execute
them
Java virtual machine: Runtime system that provides various services
to running programs
Java programming environment: Set of libraries that provide services
such as GUI, data structures,etc.
Java enabled browsers: Browsers that include a JVM + ability to load
programs from remote hosts
11
Java: A tiny intro
How are Java programs written?
How are variables declared?
How are expressions specified?
How are control structures defined?
How to define simple methods?
What are classes and objects?
What about exceptions?
12
How are Java programs written?
Define a class HelloWorld and store it into a file:
HelloWorld.java:
public class HelloWorld {
public static void main (String[] args) {
System.out.println(“Hello, World”);
}
}
Compile HelloWorld.java
javac HelloWorld.java
Output: HelloWorld.class
Run
java HelloWorld
Output: Hello, World
13
How are variables declared?
Fibonacci:
class Fibonacci {
public static void main(String[] arg) {
int lo = 1;
int hi = 1;
System.out.println(lo);
while (hi < 50) {
System.out.println(hi);
hi = lo + hi;
lo = hi – lo;
}
}
}
14
How to define expressions?
Arithmetic: +, -, *,/, %, =
8 + 3 * 2 /4
Use standard precedence and associativity rules
}
}
15
How are simple methods defined?
Every method is defined inside a Java class definition
public class Movie {
public static int movieRating(int s, int a, int d) {
return s+a+d;
}
}
public class Demo {
public static void main (String argv[]) {
int script = 6, acting = 9, directing = 8;
displayRating(script, acting, directing);
}
public static void displayRating(int s, int a, int d){
System.out.print(“The rating of this movie is”);
System.out.println(Movie.movieRating(s, a, d));
}
}
16
How are control structures specified?
Typical flow of control statements: if-then-else, while, switch, do-while,
and blocks
class ImprovedFibo {
static final int MAX_INDEX = 10;
public static void main (String[] args) {
int lo = 1;
int hi = 1;
String mark = null;
for (int i = 2; i < MAX_INDEX; i++) {
if ((i % 2) == 0)
mark = " *";
else mark = "";
System.out.println(i+ ": " + hi + mark);
hi = lo + hi;
lo = hi - lo;
}}}
17
What are classes and objects?
Classes: templates for constructing instances
Fields
Instance variables
Static variables
Methods
Instance
Static
class Point {
public double x, y;
}
Point lowerleft = new Point();
Point upperRight = new Point();
Point middlePoint = new Point();
lowerLeft.x = 0.0; lowerLeft.y = 0.0;
upperRight.x = 1280.0; upperRight.y = 1024.0
middlePoint.x = 640.0; middlePoint.y = 512.0
18
How are instance methods defined?
Instance methods take an implicit parameter: instance on
which method is invoked
public class Movie {
public int script, acting, directing;
public int rating() {
return script + acting + directing;
}
}
public class Demo {
public static void main (String argv[]) {
Movie m = new Movie();
m.script = 6; m.acting = 9; m.directing = 8;
System.out.print(“The rating of this movie is”);
System.out.println(m.rating());
}
}
19
How to extend classes?
Inheritance: mechanism for extending behavior of classes;
leads to construction of hierarchy of classes [Note: no
multiple inheritance]
What happens when class C extends class D:
Inherits instance variables
Inherits static variables
Inherits instance methods
Inherits static methods
C can:
Add new instance variables
Add new methods (static and dynamic)
Modify methods (only implementation)
Cannot delete anything
20
How to extend classes?
public class Attraction {
public int minutes;
public Attraction() {minutes = 75;}
public int getMinutes() {return minutes;}
public void setMinutes(int d) {minutes = d;}
}
public class Movie extends Attraction {
public int script, acting, directing;
public Movie() {script = 5; acting = 5; directing = 5;}
public Movie(int s, int a, int d) {
script = s; acting = a; directing = d;
}
public int rating() {return script + acting + directing;}
}
public class Symphony extends Attraction {
public int playing, music, conducting;
public Symphony() {playing = music = conducting = 5;}
public Symphony(int p, int m, int c) {
playing = p; music = m; conducting = c;
}
public int rating() {return playing + music + conducting;}
}
21
What are abstract classes?
Abstract class: Merely a place holder for class definitions;
cannot be used to create instances.;
public abstract class Attraction {
public int minutes;
public Attraction() {minutes = 75;}
public int getMinutes() {return minutes;}
public void setMinutes(int d) {minutes = d;}
public abstract void m();
}
Following is an error:
Attraction x;
x = new Attraction();
22
Packages
Object
extends
Movie Symphony
• How do we organize above classes into a single unit? Put them in file?
However, only one public class per file (whose name is same as file’s)
• Solution: Place several files (compilation units) into a package
23
Packages – cont’d.
units of organizing related Classes, Interfaces, Sub
packages
Why?
Reduce name clashing
Limit visibility of names
Java programs typically organized in terms of packages
and subpackages
Each package may then be divided into several packages,
subpackages, and classes
Each class can then be stored in a separate file
Each source file starts with something like:
package mypackage;
Code in source file is now part of mypackage
24
Packages – cont’d.
package onto.java.entertainment;
public abstract class Attraction { … }
package onto.java.entertainment;
public class Movie extends class Attraction {…}
package onto.java.entertainment;
import java.io.*;
import java.util.*;
public class Auxiliaries { … }
25
Exceptions
public class A {
public void foo() throws MyException {
if(aBadThingHappened()) {
throw new MyException();
}
}
public void bar() {
try {
this.foo();
} catch (MyException e) {
e.printStackTrace();
}
}
}
26
Finally
public class A {
public void foo() throws MyException {
throw new MyException();
}
}
public void bar() {
try {
this.foo();
} catch (MyException e) {
e.printStackTrace();
} catch (YourException e) {
e.printStackTrace();
} finally {
... // always executed before leaving the try/catch
}
}
}
27
Resources
http://java.sun.com/
Java[tm] 2 Platform, Standard Edition v1.4.1
java, javac, jar, jre, etc.
Any platform... FREE!
Online documentation and tutorials
http://www.eclipse.org/
Integrated development environment (IDE) for nothing in particular
Java[tm] development tools (JDT) (comes with Eclips)
Project management
Editor
Incremental compiler
CVS support
C/C++ extension in progress
AspectJ support
Windows, Linux, and Mac.... FREE!
28
Qualifiers
public – any class* may access
(no qualifier) “package protected” – only the class* and
classes* in the same package may access
protected – only the class* and decendent classes* may
access
private – only the class* may access
29
Package Protected
package edu.ucdavis;
public class A {
int x;
}
package edu.ucdavis;
public class B {
void foo(A a) { a.x; } // OK, same package
}
package org.omg;
public class B {
void foo(A a) { a.x; } // Not OK, different package
}
package edu.ucdavis.cs;
public class B {
void foo(A a) { a.x; } // Not OK, different package
}
package edu.ucdavis.cs;
public class B {
void foo(A a) { a.x; } // Not OK, different package
}
package edu;
public class B {
void foo(A a) { a.x; } // Not OK, different package
}
30
Protected
public class A {
protected int x;
}
public class B extends A {
void foo(A a) { this.x; a.x; } // OK, B is a decendent of A
}
public class C extends B {
void foo(A a) { this.x; a.x; } // OK, C is a decendent of A through B
}
package edu; // Uh oh!
public class D extends C {
void foo(A a) { this.x; a.x; } // OK, D is a decendent of A
}
public class E {
void foo(A a) { this.x; a.x; } // NOT OK, E is NOT a decendent of A
}
31
Threads
Multiple “threads” of execution within the same program,
share the same memory space -> “lightweight”.
Perform multiple tasks at the same time.
Work on the same task in parallel.
Heavily used in user interfaces.
Web browsers: load web pages while the user can still scroll, go
back, open a new window, etc.
Web servers: serve multiple requests in parallel.
Can take advantage of multiple processors.
Threads in Java
Java manages and schedules threads
Java provides “synchronize” to help coordinate multiple threads
32
Creating a Thread in Java
public class MyThread extends Thread {
public MyThread(String threadName) {
super(threadName);
}
public void run() {
for(int i = 0; i < 10; i++) {
System.out.println(i + “ “ + getName());
try {
sleep((long)(Math.random() * 1000));
} catch(InterruptedException e) {}
}
}
}
33
Creating a Thread in Java
public class ThreadTest {
public static void main(String[] args) {
for(int i = 0; i < args.length; i++) {
MyThread t = new MyThread(args[i]);
t.start();
}
}
}
34
Creating a Thread in Java via Interface
public class MyRunnable implements Runnable {
String name;
public MyRunnable(String name) {
this.name = name;
}
public void run() {
for(int i; i < 10; i++) {
System.out.println(i + “ “ + name());
try {
sleep((long)(Math.random() * 1000));
} catch(InterruptedException e) {}
}
}
}
35
Producer Consumer Problem
public class Producer public class Consumer
extends Thread { extends Thread {
private Share shared; private Share shared;
36
Synchronized
public class Share {
private int s;
37
Producer Consumer Coordination
public class Share {
private int s;
private boolean empty = true;
38