Intro to Java for ECS 160
Stoney Jackson
[email protected] [email protected] .edu wwwcsif.cs.ucdavis.edu/~jacksoni
What’s the first question you’ve got to ask about a language named Java?
Can you make coffee with it?
2
It was meant to!! A programming language for appliances!
3
Must Run on Any Architecture debug “WRITE ONCE, RUN ANYWHERE!” pretty portable Program in Java
Java Compiler
Java Virtual Machine Machine
Java Bytecode
Java Virtual Machine Machine
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: Web: Java Applets Applets
Clients download applets via Web browser Browser runs applet in a Java Virtual Machine (JVM) Applet
Client
Server
Interactive web, security, and client consistency Slow to download, inconsistent VMs (besides, flash won this war) 7
Java on the Web: Web: J2EE Thin clients (minimize download) side” Java all “server side”
JSPs Servlets
Client
Server EJB
THIS IS WHAT YOU’LL BE DOING!!
JDBC
8
The Java programming environment
Compared to C++:
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
no header files, macros, pointers and references, unions, operator overloading, templates, etc.
High performance through t hrough Just in time compilation 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: code: Intermediate Inte rmediate representation representation for Java programs Java compiler compiler : Transform Java programs into Java byte code co de Java interpreter interpreter : Read programs written in Java byte code and execute them Java virtual virtual machine: Runtime system that provides various services to running programs Java programming programming environment environment : Set of libraries that provide services such as GUI, data structures,etc. Java enabled enabled browsers 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: Arithmetic : +, -, *,/, %, = 8 + 3 * 2 /4 Use standard precedence and associativity rules
Predicates: ==, !=, >, <, >=, <= public class Demo { public static void main (String[] argv) { boolean b; b = (2 + 2 == 4); System.out.println(b);
}
} 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, displayRating(script, acting, directing);
} public static void displayRating(int s, int a, int d){ System.out.print(“The System.out.print(“The rating of this movie is”); System.out.println(Movie.mo System.out.println(Movie.movieRating( vieRating(s, s, a, d));
}
} 16
How are control structures specified? Typical flow of control cont rol 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: para meter: 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 Inherits Inherits Inherits C can:
instance variables static variables instance methods static methods
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 public class class Movie Movie exten extends ds Attrac Attraction tion { public int script, acting, directing; public Movie() {script = 5; acting = 5; directing = 5;} public Movie(int s, s, int a, int d) { script = s; acting = a; directing = d; } public int rating() {return script + acting + directing;} } public public class class Symphony Symphony extends extends Attracti Attraction on { public int playing, music, conducting; public Symphony() {playing {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 crea te instances.; public public abstract abstract class class Attrac Attraction tion { 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();
Following is not an error: public class Movie extends Attraction { … } public class Symphony extends Attraction Attraction { … } Attraction x; x = new Movie (); x = new Symphony(); 22
Packages Object extends Attraction
Auxiliaries
Demonstration
extends Movie
Symphony
• How do we organize above classes into a single unit? Put them the m 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?
Java programs typically typically organized in terms of packages and subpackages
Reduce name clashing Limit visibility of names
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; onto.java.entertainment; public abstract class Attraction { … }
package onto.java.entertainment; onto.java.entertainment; public class Movie extends class Attraction {…}
package onto.java.entertainment; onto.java.entertainment; import java.io.*; import java.util.*; public class Auxiliaries { … }
•Where to store packages? •How does Java find packages? •Export and Import •Access control 25
Exceptions public class A { public public void void foo() foo() throws throws MyEx MyExcept ception ion { if(aBadThingHappened()) { throw new MyException(); } } public void bar() { try { this.foo(); } catch (MyException e) { e.printStackTrace(); } } } public public clas class s MyExcep MyExceptio tion n extends extends Except Exception ion { public MyException() {} public MyException(String message) { super(String message); } }
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(); } finall y { ... // always executed before leaving the try/catch } } }
27
Resources
http://java.sun.com/
Java[tm] 2 Platform, Platform, Standard Edition v1.4.1 v1.4.1
java, javac, jar, jre, etc. etc . Any platform... FREE!
Online documentation and tutorials
http://www.eclipse.org/ Integrated development environment (IDE) for nothing in particular development tools (JDT) (JDT) (comes with Eclips) Java[tm] development
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
The class or instances of the class (an object of the class)
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 { prot protec ecte ted d int int x; } public public class class B extend extends s A { void foo(A a) { this.x; a.x; } // OK, B is a decendent of A } public public class class C extend extends s B { void foo(A a) { this.x; a.x; } // OK, C is a decendent of A through B } package edu; // Uh oh! public public class class D extend extends s 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 Multiple “threads” of execution within the same program, share the same memory space -> “lightweight”. Perform multiple multiple tasks ta sks 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 adva ntage of multiple processors. Threads in Java Java manages manages and schedules threads Java provides “synchronize” to help coordinate multiple threads
32
Creating a Thread in Java public public class class MyThre MyThread ad extend extends s Thread 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(); } } } > java ThreadTest Bob Frank 0 Bob 0 Frank 1 Bob 2 Bob 1 Frank 3 Bob 2 Frank 3 Frank 4 Frank ... 34
Creating a Thread in Java via Interface public public class class MyRunnab MyRunnable le implemen implements ts String name; public MyRunnable(String name) { this.name = name; } public void run() { for(int i; i < 10; i++) { System.out.println(i System.out.println(i + “ “ + try { sleep((long)(Math.random() sleep((long)(Math.random() } catch(InterruptedException catch(InterruptedException } } }
Runnable Runnable {
name()); * 1000)); e) {}
public class ThreadTest { public static void main(String[] args) { for(int i = 0; i < args.length; i++) { Thread t = new Thread(new MyRunnable(args[i]), args[i]); args[i]); t.start(); } } } 35
Producer Consumer Problem public class Producer extends Thread { private Share shared;
public class Consumer extends Thread { private Share shared;
public Producer(Share s) { shared = s; }
public Consumer(Share s) { shared = s; }
public void run() { for(int i = 0; i < 10; i++){ shared.put(i); } }
public void run() { int value; for(int i = 0; i < 10; i++) { value = shared.get(); } }
} } shared.put(0) shared.get() // 0 gotten shared.get() // 0 gotten again!! shared.put(0) shared.put(1) shared.get() // 0 never gotten!!
// what about simultaneous // access?! shared.put(0) shared.get() RACE CONDITIONS!
36
Synchronized public class Share { private int s; public public synchro synchroniz nized ed int get() get() { ... } public public sync synchron hronize ized d void put(int put(int s) s) { ... ... } }
Synchronized Synchronized provides mutual exclusion on an object For any object, only one thread may execute inside any of that object’s synchronized synchronized Share s1 = new Share(); t1 -> s1.get() // gets in methods Share s2 = new Share(); t2 -> s1.put(32) // blocks
Thread t1 = ...; Thread t2 = ...;
t1 -> s1.get() // gets in t2 -> s2.put(4) // gets in
37
Producer Consumer Coordination public class Share { private int s; private boolean empty = true; public synchronized int get() { while (empty == true) { try { wait() wait(); ; // nothi nothing ng to get, get, wait wait } catch (InterruptedException e) {} } empty = true; notifyAll notifyAll(); (); // wakeup waitin waiting g Consumers/P Consumers/Produc roducers ers return s; } public synchronized void put(int s) { while (empty == false) { try { wait wait() (); ; // no room room } catch (InterruptedException e) {} } this.s = s; empty = false; notifyAll notifyAll(); (); // wakeup waitin waiting g Consumers/P Consumers/Produc roducers ers } } 38