Intro to Java

abdomendebonairΑσφάλεια

2 Νοε 2013 (πριν από 4 χρόνια και 7 μέρες)

87 εμφανίσεις

Intro to Java





What’s the first question you’ve got to
ask about a language named Java?

2


Can you make coffee with it?

3


It was meant to!!

A programming language for appliances!

4


Java Virtual Machine








Must Run on Any Architecture

Program

in Java

Java

Compiler

Java

Bytecode

Java Virtual Machine








“WRITE ONCE, RUN ANYWHERE!”

debug

pretty portable

5


Doesn’t Make Coffee Yet


6


So What’s Java Good For?

Web applications!

Java Applet

Server

Java Applet

7


Java on the Web: Java Applets


Clients download applets via Web browser


Browser runs applet in a Java Virtual Machine
(JVM)








Interactive web, security, and client consistency


Slow to download, inconsistent VMs
(besides,
flash won this war)

Applet

Client

Server

8


Java on the Web: J2EE


Thin clients (minimize download)


Java all “server side”








THIS IS WHAT YOU’LL BE DOING!!

Client

Server

JSPs

Servlets

EJB

JDBC

9


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

10


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

11


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

12


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?

13


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


14


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;



}


}

}

15


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

}

}



16


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

}

}

17


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;


}}}

18


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



19


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

}

}


20


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


21


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

}


22


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

23


Packages

Object

Attraction

Auxiliaries

Demonstration

Movie

Symphony

extends

extends



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

24


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

25


Packages


cont’d.

package onto.java.entertainment;

public class Movie extends class Attraction {…}

package onto.java.entertainment;

import java.io.*;

import java.util.*;

public class Auxiliaries { … }

package onto.java.entertainment;

public abstract class Attraction { … }


Where to store packages?


How does Java find packages?


Export and Import


Access control

26


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


}

}

27


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


}


}

}

28


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!

29


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)

30


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 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

}

package edu.ucdavis.cs
;

public class B {

void foo(A a) {
a.x
; } // Not OK, different package

}

package org.omg
;

public class B {

void foo(A a) {
a.x
; } // Not OK, different package

}

31


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

}

32


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

33


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


}


}

}

34


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

...


35


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


}


}

}

36


Producer Consumer Problem

public class Producer

extends Thread {


private Share shared;



public Producer(Share s) {


shared = s;


}



public void run() {


for(int i = 0; i < 10; i++){


shared.put(i);


}


}

}


shared.put(0)

shared.get() // 0 gotten

shared.get() // 0 gotten again!!


shared.put(0)

shared.put(1)

shared.get() // 0 never gotten!!



public class Consumer

extends Thread {


private Share shared;



public Consumer(Share s) {


shared = s;


}



public void run() {


int value;


for(int i = 0; i < 10; i++) {


value = shared.get();


}


}

}


// what about simultaneous

// access?!

shared.put(0) shared.get()


RACE CONDITIONS!

37


public class Share {


private int s;



public
synchronized

int get() { ... }


public
synchronized

void put(int s) { ... }

}

Synchronized


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

Share s2 = new Share();


Thread t1 = ...;

Thread t2 = ...;

t1
-
> s1.get() // gets in

t2
-
> s1.put(32) // blocks


t1
-
> s1.get() // gets in

t2
-
> s2.put(4) // gets in

38


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


}

}


Producer Consumer Coordination