Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 38

Intro to Java

for ECS 160

Stoney Jackson
jacksoni@cs.ucdavis.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 Java Java
in Java Compiler Bytecode

Java Virtual Machine Java Virtual 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: Java 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: J2EE
 Thin clients (minimize download)
 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++:
 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

 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, 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();

 Following is not an error:


public class Movie extends Attraction { … }
public class Symphony extends 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 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 { … }

•Where to store packages?


•How does Java find packages?
•Export and Import
•Access control

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();
}
}
}

public class MyException extends Exception {


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();
} 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

 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 {
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();
}
}
}

> 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 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) {}
}
}
}

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]);
t.start();
}
}
}

35
Producer Consumer Problem
public class Producer public class Consumer
extends Thread { extends Thread {
private Share shared; private Share shared;

public Producer(Share s) { public Consumer(Share s) {


shared = s; shared = s;
} }

public void run() { public void run() {


for(int i = 0; i < 10; i++){ int value;
shared.put(i); for(int i = 0; i < 10; i++) {
} value = shared.get();
} }
} }
}
shared.put(0)
shared.get() // 0 gotten // what about simultaneous
shared.get() // 0 gotten again!! // access?!
shared.put(0) shared.get()
shared.put(0)
shared.put(1) RACE CONDITIONS!
shared.get() // 0 never gotten!!

36
Synchronized
public class Share {
private int s;

public synchronized int get() { ... }


public synchronized void put(int s) { ... }
}

 Synchronized provides mutual exclusion on an object


 For any object, only one thread may execute inside any of
that object’s synchronized methods
Share s1 = new Share(); t1 -> s1.get() // gets in
Share s2 = new Share(); t2 -> s1.put(32) // blocks

Thread t1 = ...; t1 -> s1.get() // gets in


Thread t2 = ...; 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(); // nothing to get, wait
} catch (InterruptedException e) {}
}
empty = true;
notifyAll(); // wakeup waiting Consumers/Producers
return s;
}
public synchronized void put(int s) {
while (empty == false) {
try {
wait(); // no room
} catch (InterruptedException e) {}
}
this.s = s;
empty = false;
notifyAll(); // wakeup waiting Consumers/Producers
}
}

38

You might also like