Java Lecture 3 - PowerPoint PPT Presentation

About This Presentation
Title:

Java Lecture 3

Description:

cm.numCans--; // Steal a Coke. System.out.println('Cash = ' cm.cash); Where's my ... { System.out.println('Sorry, no Cokes'); public static void main(String a ... – PowerPoint PPT presentation

Number of Views:51
Avg rating:3.0/5.0
Slides: 63
Provided by: BillL161
Category:
Tags: coke | java | lecture

less

Transcript and Presenter's Notes

Title: Java Lecture 3


1
Java Lecture 3
  • CS 1311
  • Structure

13X11
2
Types of Java Programs
  • Applications
  • Stand alone
  • Requires JVM (java.exe, etc.) on your machine
  • Applets
  • JVM built in to web browser runs program
  • Can be downloaded from network or files can be on
    your machine
  • Susceptible to browser problems!
  • Servlets
  • Like an applet but code runs on server when a
    particular web page is browsed

3
A View of Memory
4
Recall
  • class CokeMachine
  • int numCans 3
  • void vend()
  • if(numCans gt 0)
  • System.out.println("Have a Coke!")
  • numCans numCans - 1
  • else
  • System.out.println("Sorry!")
  • void load(int n)
  • numCans numCans 1
  • System.out.println("Ready to vend!")

5
Two Views
  • External
  • CokeMachine cc
  • cc new CokeMachine()
  • cc.vend()
  • cc.load(5)
  • class CokeMachine
  • int numCans 3
  • void vend()
  • if(numCans gt 0)
  • System.out.println
  • ("Have a Coke!")
  • numCans numCans - 1
  • else
  • System.out.println
  • ("Sorry!")
  • void load(int n)
  • numCans numCans 1
  • System.out.println

6
Could write...
  • class Driver
  • public static void main(String args)
  • CokeMachine cc
  • cc new CokeMachine()
  • cc.vend()
  • cc.vend()
  • cc.vend()
  • cc.vend()
  • cc.load(5)
  • // main
  • // Simulation

javac .java java Driver
7
What happened?
java Driver

Heap

Stack
Driver main
Class Pool
8
What happened?
Java searches for (and finds) static main method

Heap

Stack
Driver main
Class Pool
9
What happened?
Java searches for (and finds) static main method

Heap

Stack
main
Driver main
Class Pool
10
What happened?
CokeMachine cc

Heap

Stack
main
CokeMachine numCans vend() load()
Driver main
Class Pool
11
What happened?
CokeMachine cc

Heap

Stack
main cc (CokeMachine)
CokeMachine numCans vend() load()
Driver main
Class Pool
12
What happened?

cc new CokeMachine()
Obj CokeMachine numCans vend() load()
Heap
3

Stack
main cc (CokeMachine)
CokeMachine numCans vend() load()
Driver main
Class Pool
13
What happened?

cc.vend()
Obj CokeMachine numCans vend() load()
Heap
2

Stack
main cc (CokeMachine)
CokeMachine numCans vend() load()
Driver main
Class Pool
Have a Coke!
14
What happened?

cc.vend()
Obj CokeMachine numCans vend() load()
Heap
1

Stack
main cc (CokeMachine)
CokeMachine numCans vend() load()
Driver main
Class Pool
Have a Coke! Have a Coke!
15
What happened?

cc.vend()
Obj CokeMachine numCans vend() load()
Heap
0

Stack
main cc (CokeMachine)
CokeMachine numCans vend() load()
Driver main
Class Pool
Have a Coke! Have a Coke! Have a Coke!
16
What happened?

cc.vend()
Obj CokeMachine numCans vend() load()
Heap
0

Stack
main cc (CokeMachine)
CokeMachine numCans vend() load()
Driver main
Class Pool
Have a Coke! Have a Coke! Sorry!
17
As a convenience...
  • We don't really need the driver class
  • We can put a static main in the CokeMachine
  • But the operation is essentially the same!
  • In fact, you should always put a static main in
    every class you write
  • Use it to test the class for correct operation
  • Will Java get confused?

18
No Way, Jose!
class D main()
class E main()
class F main()
Why?
19
Because!
class D main()
class E main()
class F main()
javac .java java F
20
Questions?
21
Fields
  • Sometimes called attributes
  • In our CokeMachine numCans
  • Can be
  • Primitives
  • References
  • Access
  • cc.numCans 42 // Direct access
  • cc.vend() // Via modifier
  • Is direct access a "GoodThing" or a "BadThing"

22
Controlling Access
  • Access to fields (and methods) can be controlled
  • public -- Anyone can access
  • private -- Access is only from within class
  • Recall
  • public static void main(String args)

23
Example
  • class CokeMachine
  • int numCans 3
  • double cash 0.0
  • static final double PRICE 0.65
  • void vend()
  • if(numCans gt 0)
  • numCans--
  • cash PRICE
  • System.out.println("Have a coke!")
  • else
  • System.out.println("Sorry, no Cokes")

24
Let's Test It!
  • class Tester
  • public static void main(String args)
  • CokeMachine cm // Make reference
  • cm new CokeMachine() // Make a machine
  • cm.numCans-- // Steal a Coke
  • System.out.println("Cash " cm.cash)

25
Let's add some protection
  • class CokeMachine
  • private int numCans 3
  • private double cash 0.0
  • private static final double PRICE 0.65
  • public void vend()
  • if(numCans gt 0)
  • numCans--
  • cash PRICE
  • System.out.println("Have a coke!")
  • else
  • System.out.println("Sorry, no Cokes")

26
Warning about Testing
  • class CokeMachine
  • private int numCans 3
  • private double cash 0.0
  • private static final double PRICE 0.65
  • public void vend()
  • if(numCans gt 0)
  • numCans--
  • cash PRICE
  • System.out.println("Have a coke!")
  • else
  • System.out.println("Sorry, no Cokes")
  • class Tester
  • public static void main(String a)
  • CokeMachine cm new CokeMachine()
  • class CokeMachine
  • private int numCans 3
  • private double cash 0.0
  • private static final double PRICE 0.65
  • public void vend()
  • if(numCans gt 0)
  • numCans--
  • cash PRICE
  • System.out.println("Have a coke!")
  • else
  • System.out.println("Sorry, no Cokes")
  • public static void main(String a)
  • CokeMachine cm new CokeMachine()
  • cm.numCans--

27
Demo
28
Details
  • Methods
  • Module defined in a class which effectively
    becomes a message that an object of that class
    can understand
  • cc.vend()
  • Send a "vend()" message to the object referenced
    by cc
  • Almost all code executed in Java will be executed
    in methods

29
Anatomy of a method
  • ltaccessgt ltstaticgt ltreturn typegt ltnamegt(ltparameter
    listgt) ltmethod bodygt
  • Examples
  • public static void main(String args)
  • System.out.println("Hello World!")
  • void vend() / code goes here /
  • private int addEmUp(int a, int b, int c)
  • return a b c

30
Parts is parts
  • ltaccessgt
  • public
  • private
  • There are others we won't discuss
  • ltstaticgt
  • static
  • nothing which implies dynamic or instance

31
Parts is parts
  • ltreturn typegt
  • Methods may optionally return a value
  • May be any valid type
  • Class name
  • Primitive
  • void indicates no return value
  • If you promise to return something Java will
    expect you to keep your promise
  • If you promise to not return anything Java will
    break your kneecaps with a Louisville Slugger if
    you don't keep your promise

32
A Promise is a Promise
  • public int max(int a, int b)
  • if(a gt b)
  • return a
  • if(a lt b)
  • return b

33
A Promise is a Promise
  • public int max(int a, int b)
  • if(a gt b)
  • return a
  • if(b lt a)
  • return b

Classname.javaltlinenogt Return required at end
of int max(int, int). public int max(int a,
int b)
34
Method Name...
  • ltnamegt
  • Method name follows normal identifier rules
  • Style note Start method names with a lower case
    letter but capitalize multiword names
  • enqueue
  • vend
  • vendACoke
  • load
  • loadCokes

35
Parameter List
  • ltparameter listgt
  • Declare each parameter individually
  • i.e. int a, float f, CokeMachine cm
  • Java only supports pass by value (in) parameters.
  • public void swap(int a, int b)
  • / This method is worthless! /
  • int t a
  • a b
  • b t

36
Parameter List
  • public static void testMachine(int n, CokeMachine
    cm)
  • for(int i0 i lt n i)
  • cm.vend()
  • n 0 // Just to be mean
  • cm null // and nasty!
  • What is the effect on the outside world?
  • Could this be considered (just maybe) a side
    effect?

37
Pass by Value
class Demo / Code for testMachine
here/ public static void Main(String args)
int i 3 CokeMachine cm cm new
CokeMachine() testMachine(i, cm)
Object CokeMachine numCans 3
main
38
Pass by Value
class Demo / Code for testMachine
here/ public static void Main(String args)
int i 3 CokeMachine cm cm new
CokeMachine() testMachine(i, cm)
n cm
testMachine
Object CokeMachine numCans 3

3
main
39
Pass by Value
public static void testMachine (int
n, CokeMachine cm) for(int i0 i lt n i)
cm.vend() n 0 // Just to be
mean cm null // and nasty!
class Demo / Code for testMachine
here/ public static void Main(String args)
int i 3 CokeMachine cm cm new
CokeMachine() exerciseMachine(i, cm)
n cm
testMachine
Object CokeMachine numCans 3

3
main
40
Pass by Value
public static void testMachine (int
n, CokeMachine cm) for(int i0 i lt n i)
cm.vend() n 0 // Just to be
mean cm null // and nasty!
class Demo / Code for testMachine
here/ public static void Main(String args)
int i 3 CokeMachine cm cm new
CokeMachine() exerciseMachine(i, cm)
n cm
testMachine
Object CokeMachine numCans 0

3
main
41
Pass by Value
public static void testMachine (int
n, CokeMachine cm) for(int i0 i lt n i)
cm.vend() n 0 // Just to be
mean cm null // and nasty!
class Demo / Code for testMachine
here/ public static void Main(String args)
int i 3 CokeMachine cm cm new
CokeMachine() exerciseMachine(i, cm)
n cm
testMachine
Object CokeMachine numCans 0

0
main
42
Pass by Value
public static void testMachine (int
n, CokeMachine cm) for(int i0 i lt n i)
cm.vend() n 0 // Just to be
mean cm null // and nasty!
class Demo / Code for testMachine
here/ public static void Main(String args)
int i 3 CokeMachine cm cm new
CokeMachine() exerciseMachine(i, cm)
n cm
testMachine
Object CokeMachine numCans 0

0
main
43
Pass by Value
class Demo / Code for testMachine
here/ public static void Main(String args)
int i 3 CokeMachine cm cm new
CokeMachine() exerciseMachine(i, cm)
Object CokeMachine numCans 0
main
44
Questions?
45
Sidebar on Methods
  • Factorial (Yes, again)
  • class FactDemo
  • public static void main(String args)
  • int n 10
  • int i
  • int answer 1
  • for(i 1 i lt n i)
  • answer i
  • // for
  • System.out.println(n "! " answer)
  • // main
  • // factDemo

46
Sidebar on Methods
  • Make it a method
  • public static void fact(int n)
  • int i
  • int answer 1
  • for(i 1 i lt n i)
  • answer i
  • // for
  • System.out.println(n "! " answer)
  • // fact

47
Sidebar on Methods
  • Make it smaller and more efficient?
  • public static void fact(int n)
  • int i, ans
  • for(i 1, ans 1 i lt n ans i)
  • System.out.println(n "! " ans)
  • // fact

48
Sidebar on Methods
  • Make it more readable?
  • public static void fact(int n)
  • int i
  • int ans 1
  • for(i 1 i lt n i)
  • ans i
  • System.out.println(n "! " ans)
  • // fact

49
Sidebar on Methods
  • Make it more useful?
  • public static int fact(int n)
  • int i
  • int ans 1
  • for(i 1 i lt n i)
  • ans i
  • return ans
  • // fact

50
Sidebar on Methods
  • Make it more useful?
  • class FactDemo
  • public static int fact(int n)
  • int i
  • int ans 1
  • for(i 1 i lt n i)
  • ans i
  • return ans
  • // fact
  • public static void main(String args)
  • System.out.println("10! " fact(10))

51
Sidebar on Methods
  • Do it recursively!
  • class FactDemo
  • public static int fact(int n)
  • if(n 0)
  • return 1
  • else
  • return n fact(n - 1)
  • // fact
  • public static void main(String args)
  • System.out.println("10! " fact(10))

52
Sidebar on Methods
  • Do it recursively!
  • class FactDemo
  • public static int fact(int n)
  • if(n 0)
  • return 1
  • else
  • return n fact(n - 1)
  • // fact
  • public static void main(String args)
  • for(int i 1 i lt 18 i)
  • System.out.println(i "! " fact(i))

53
ShakyResults
  • 1! 1
  • 2! 2
  • 3! 6
  • 4! 24
  • 5! 120
  • 6! 720
  • 7! 5040
  • 8! 40320
  • 9! 362880
  • 10! 3628800
  • 11! 39916800
  • 12! 479001600
  • 13! 1932053504
  • 14! 1278945280
  • 15! 2004310016
  • 16! 2004189184
  • 17! -288522240

54
Primitive Data Type Ranges
Type
Size
Min
Default
Max
boolean
false
1
false
true
char
'\u0000' (null)
16
byte
(byte) 0
8
-128
127
short
(short) 0
16
-32,768
32,767
int
0
32
-2,147,483,648
2,147,483,647
long
0L
64
-9,223,372,036,854,775,808
9,223,372,036,854,775,807
float
0.0F
32
Approx 3.4E38 with 7 significant digits
double
0.0D
64
Approx 1.7E308 with 15 significant digits
void
Not truly min and max.
55
Notice!
  • Notice how Java gave you a helpful warning
    message to help keep you spacecraft from plunging
    into the Sun
  • NOT.

56
Sidebar on Methods
  • Fix the problem (forever?)!
  • class FactDemo
  • public static long fact(long n)
  • if(n 0)
  • return 1
  • else
  • return n fact(n - 1)
  • // fact
  • public static void main(String args)
  • for(int i 1 i lt 18 i)
  • System.out.println(i "! " fact(i))

57
Pop Quiz
  • class Widget
  • int a, b
  • public int sum()
  • return a b
  • public static void main(String a)
  • a 5
  • b 10
  • System.out.println(sum())

Okay?
58
Pop Quiz
  • class Widget
  • int a, b
  • public int sum()
  • return a b
  • public static void main(String a)
  • Widget w
  • w new Widget()
  • w.a 5
  • w.b 10
  • System.out.println(w.sum())

59
Questions?
60
Final Thought
  • Just what is a class?

class
declarations
initialization modules
methods
61
Questions?
62
(No Transcript)
Write a Comment
User Comments (0)
About PowerShow.com