0% found this document useful (0 votes)
44 views60 pages

Review For Midterm 3: CS 101 Spring 2007

The document provides a review for a midterm exam covering topics in CS 101 including loops, methods, classes, arrays, and static fields and methods. It discusses the Circle class and its properties like radius and PI. It shows how to create Circle objects, access their properties using dot notation, and describes what happens in memory when multiple Circle objects are created. It also covers constructors, static vs instance variables, and the differences between static and non-static methods.

Uploaded by

sjdalkjsd112
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
44 views60 pages

Review For Midterm 3: CS 101 Spring 2007

The document provides a review for a midterm exam covering topics in CS 101 including loops, methods, classes, arrays, and static fields and methods. It discusses the Circle class and its properties like radius and PI. It shows how to create Circle objects, access their properties using dot notation, and describes what happens in memory when multiple Circle objects are created. It also covers constructors, static vs instance variables, and the differences between static and non-static methods.

Uploaded by

sjdalkjsd112
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 60

Review for Midterm 3

CS 101
Spring 2007

Topic Coverage

Loops

Chapter
Methods

Chapter
Classes

Chapter

Chapter
Arrays

Chapter

4
5
6, Designing and creating classes
9, Static fields and methods, wrapper classes
8

Classes
Circle class

Circle class properties

What properties does a circle have?

Radius

PI = 3.141592653589793234

Color (if plotting in a graphics program)

(x,y) location

These properties will become instance variables

We are only going to play with the first two (radius and
PI) in this example

Thus, we are ignoring the color and location

Our Circle class


Note the radius
field is not
initialized by us

public class Circle {


double radius;
double PI = 3.1415926536;
}

Circle
- radius = 0.0
- PI = 3.14159
-

Were ignoring the


public for now

Note the fields


are not static

Accessing our Circle object

Any variable or method in an object can be accessed by using a


period

The period means follow the reference

Example: System.in

Example: System.out.println
(c.radius);

Example: c.PI = 4;

This is bad PI should


have been declared final
(this will be done later)

Circle
- radius = 0.0
- PI = 3.14159
-
+

Whats the output?


public class Circle {
double radius;
double PI = 3.1415926536;
}
public class CircleTest {
public
static
void
int x;
Circle c = new Circle();
System.out.println (x);
}
}

main

(String[]

args)

Java will give a


variable not
initialized error

When a variable is declared as part of a method, Java does not initialize it


to a default value
7

Whats the output now?


public class Circle {
double radius;
double PI = 3.1415926536;
}
public class CircleTest {
public
static
void
main
int x;
Circle c = new Circle();
System.out.println (c.radius);
}
}

(String[]

args)

Java outputs 0.0!

When a variable is declared as part of a class, Java does initialize


it to a default value
8

Whats going on?

A (method) variable needs to be initialized before it is used

A instance variable is automatically initialized by Java

Usually called a local variable


All numbers are initialized to 0, booleans to false, etc.

This is a bit counter-intuitive

Circle class behaviors

What do we want to do with (and to) our Circle class?

Create circles

Modify circles (mutators)

Find out about our circles properties (accessors)

Find the area of the circle

Plot it on the screen (or printer)

A few others

These will be implemented as methods

10

Calling the Circle constructor

To create a Circle object:

c1

Circle c1 = new Circle();

This does four things:

Creates the c1 reference

Creates the Circle object

Makes the c1 reference point


to the Circle object

Calls the constructor with no


parameters (the default
constructor)

Circle
- radius = 0.0
- PI = 3.14159
-
+ Circle()
+ Circle (double r)
+

The constructor is always the first method called when creating (or
constructing) an object
11

Calling the Circle constructor

To create a Circle object:

c1

Circle c1 = new Circle(2.0);

This does four things:

Creates the c1 reference

Creates the Circle object

Makes the c1 reference point


to the Circle object

Calls the constructor with 1


double parameters (the specific
constructor)

Circle
- radius = 0.0
- PI = 3.14159
-
+ Circle()
+ Circle (double r)
+

The constructor is always the first method called when creating (or
constructing) an object
12

Constructors

Remember, the purpose of the constructor is to initialize the


instance variables

PI is already set, so only radius needs setting


public Circle() {
this (1.0);
}
public Circle (double r) {
radius = r;
}

Note there is no return


type for constructors

Note that the constructor


name is the EXACT same
as the class name

Note that there are two methods with the same name!

13

What happens in memory

Consider: Circle c = new Circle();


A double takes up 8 bytes in memory
Thus, a Circle object takes up 16 bytes of memory

As it contains two doubles


Circle

- radius = 1.0
- PI = 3.1415926536
-
+ Circle()
+ Circle (double r)
+

Shorthand representation
c

Circle
- radius = 1.0
- PI = 3.14159

14

Consider the following code


public class CircleTest {
public
static
void
Circle c1 = new Circle();
Circle c2 = new Circle();
Circle c3 = new Circle();
Circle c4 = new Circle();
}
}

main

(String[]

args)

15

What happens in memory


There are 4 Circle objects in memory

Taking up a total of 4*16 = 64 bytes of memory

c1

Circle
- radius = 1.0
- PI = 3.14159

c2

Circle
- radius = 1.0
- PI = 3.14159

c3

Circle
- radius = 1.0
- PI = 3.14159

c4

Circle
- radius = 1.0
- PI = 3.14159
16

Consider the following code


public class CircleTest {
public
static
void
main
Circle c1 = new Circle();
//...
Circle c1000000 = new Circle();
}
}

(String[]

args)

This program creates 1 million Circle objects!

17

What happens in memory

There are 1 million Circle objects in memory

Taking up a total of 1,000,000*16 16 Mb of memory

c1

c2

Circle
- radius = 1.0
- PI = 3.14159

Circle
- radius = 1.0
- PI = 3.14159

c1000000

Circle
- radius = 1.0
- PI = 3.14159

Note that the final PI field is repeated 1 million times18

The use of staticforfields

If a variable is static, then there is only ONE of that variable


for ALL the objects

That variable is shared by all the objects


16
(1+1=2 doubles)
Total memory
Totalusage:
memory
8 Mb
usage:
+ 8 40
bytes
bytes
(1,000,000+1=1,000,001
(4+1=5
doubles)
c1

Circle
- radius = 1.0

c2

c3

Circle
- radius = 1.0

PI

Circle

- radius = 1.0

3.14159265
36

c1000000
c4

Circle
- radius = 1.0

19

More on static fields

What does the following print

Note that PI is not final


Circle c1 = new Circle();
Circle c2 = new Circle();
Circle c3 = new Circle();
Circle c4 = new Circle();
c1.PI = 4.3;
System.out.println (c2.PI);

Note you can refer


to static fields by
object.variable

It prints 4.3

20

Even more on static fields

There is only one copy of a static field no matter how


many objects are declared in memory

Even if there are zero objects declared!

The one field is common to all the objects

Static variables are called class variables

As there is one such variable for all the objects of the


class

Whereas non-static variables are called instance


variables

Thus, you can refer to a static field by using the class


name:

Circle.PI
21

Even even more on static fields

This program also prints 4.3:


Circle c1 = new Circle();
Circle c2 = new Circle();
Circle c3 = new Circle();
Circle c4 = new Circle();
Circle.PI = 4.3;
System.out.println (c2.PI);

22

Even even even more on static fields

Weve seen static fields

System.in

System.out

Math.PI

Integer.MAX_VALUE

used with their class names:


(type: InputStream)
(type: OutputStream)
(type: double)
(type: int)

23

What if we want the value of Pi?

Assume that PI is private, and that we need an getPi()


method to get its value
Remember that is only 1 Pi field for all the Circle objects
declared

Even if there are none declared!


Consider a Circle object c:

c.getRadius() directly accesses a specific object

c.setRadius() directly modifies a specific object

c.getPi() does not access a specific object

c.setPi() (if there were such a method) does not


modify a specific object
Methods that do not access or modify a specific object are
called class methods
24

More on class methods

A class method does not care about any specific object

Such as getPi()
It is declared as static:
static double getPi () {
return PI;
}
Thus, they are often called static methods
Because Java knows that class methods dont care about
any specific object, it only allows them to access static
variables (aka class variables)
Consider Math.sin()

It doesnt care about the state of any object

It only cares about the parameter passed in


25

static and non-static rules

Member/instance (i.e. non-static) fields and methods can


ONLY be accessed by the object name

Class (i.e. static) fields and methods can be accessed by


Either the class name or the object name

Non-static methods can refer to BOTH class (i.e. static)


variables and member/instance (i.e. non-static) variables

Class (i.e. static) methods can ONLY access class (i.e. static)
variables
26

Loops
Chapter 4

27

Chapter 4: Iteration
while loop syntax

While statements:
while ( expression ) action
Action is executed repeatedly while expression is
true
Once expression is false, program execution
moves on to next statement
Action can be a single statement or a block
If expression is initially false, action is never
executed

28

int valuesProcessed = 0;
double valueSum = 0;
// set up the input

Reading in values

Scanner stdin = new Scanner (System.in);


// prompt user for values

System.out.println("Enter positive numbers 1 per line.\n"


+ "Indicate end of the list with a negative number.");
// get first value

double value = stdin.nextDouble();


// process values one-by-one

while (value >= 0) {


valueSum += value;
++valuesProcessed;
value = stdin.nextDouble();
}
// display result

if (valuesProcessed > 0) {
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
} else {
System.out.println("No list to average");
}
29

Converting text to strictly lowercase


public static void main(String[] args) {
Scanner stdin = new Scanner (System.in);
System.out.println("Enter input to be converted:");
String converted = "";
String currentLine = stdin.nextLine();
while (currentLine != null) {
String currentConversion =
currentLine.toLowerCase();
converted += (currentConversion + "\n");
currentLine = stdin.nextLine();
}
System.out.println("\nConversion is:\n" + converted);
}

30

Chapter 4: Iteration
for loop syntax

For statements:
for ( forinit; forexpression; forupdate ) action
forinit is executed once only (before the loop
starts the first time)
Action is executed repeatedly while
forexpression is true
After action is executed at the end of each loop,
forupdate is executed
Once forexpression is false, program execution
moves on to next statement
Action can be a single statement or a block
If expression is initially false, action is never
31
executed

Execution Trace
for ( int i = 0; i < 3; ++i ) {

0
3
2
1

System.out.println("i is " + i);

}
System.out.println("all done");

i is 0
i is 1
i is 2
all done

Variable i has gone


out of scope it
is local to the loop

32

for vs. while

An example when a for loop can be directly translated into a while


loop:
int count;
for ( count = 0; count < 10; count++ ) {
System.out.println (count);
}

Translates to:
int count;
count = 0;
while (count < 10) {
System.out.println (count);
count++;
}

33

for vs. while

An example when a for loop CANNOT be directly translated into a


while loop:
only difference
for ( int count = 0; count < 10; count++ ) {
System.out.println (count);
}
count is NOT defined here
Would (mostly) translate as:
int count = 0;
while (count < 10) {
System.out.println (count);
count++;
}
count IS defined here

34

Chapter 4: Iteration
Common pitfalls

Infinite loop: a loop whose test expression never


evaluates to false
Be sure that your for loop starts and ends where
you want it to
For example, in an array of size n, it needs to
start at 0 and end at n-1
Otherwise, its called an off-by-one error
Be sure your loop variable initialization is correct

35

Chapter 4: Iteration commands

break
Immediately stops the execution of the current
loop

continue
Immediately starts execution of the next loop
The for update is executed, then the condition is
tested

36

Chapter 4: Iteration
File access

Java provides the File class for file I/O

Constructor takes in the file name as a String


A stream is a name for a input or output method

System.out: output stream

System.err: error output stream

System.in: input stream

File: file input or output stream


We are only concerned with the System.out printing methods
in this course

37

Chapter 4: Iteration
Scanner methods

The Scanner class can be initialized with an File object

Scanner filein = new Scanner (new File (filename));


The Scanner class has a bunch of methods useful in loops:

hasNextInt(): tells whether there is a next int

hasNextDouble(): same idea, but with doubles


To retrieve a value from the Scanner:

nextInt()

nextDouble()

38

Classes
Chapter 6

39

Variable scope rules


public class Scope {
int a;
static int b;

a & b are visible anywhere within the class


formal parameters are only visible
in the method in which they are
public void foo (int c) {
declared
int
d
=
0;
d
is
visible
in the method after it is declared
local
variables System.out.println (c*d);
e is not visible here!
int e = 0;

}
public void bar() {e is visible in the method after it is declared
}
int f;
}

what is visible here?


where is f visible?

40

Chapter 6: Methods and classes


Instance methods vs. class methods

Instance (member) methods modify the state of


the object
That
state can include instance (member)
variables as well as class variables
Class methods do not modify the state of the
object
Examples: Math.sin(), Math.cos(), etc.
Can only access class variables
They are declared with the keyword static

41

Chapter 6: Methods and classes


Instance variables vs. class variables

Instance (member) variables are one per object


Can only be accessed by instance (member)
methods
Class variables are one for the entire class
The single class variable is common to all the
objects of a class
Can be accessed by both instance (member)
methods and class methods

42

Chapter 6: Methods and classes


Parameters

The values passed into the method call are called actual
parameters

foo (7);
// 7 is the actual parameter
The parameter names within the method are called formal
parameters

void foo (int x ) {


// x is the formal parameter
Java copies the values of the actual parameters to the
formal parameters

That copy is kept in a spot of memory called the


activation record

Any modifications in the method are modifications to


the copy

Note that if a object is passed in, the objects reference


is what is copied, not the object itself

Thus, the object can be modified, just not the


43
reference

Chapter 6: Methods and classes


Instance variables

Instance variables are normally declared private


Modifications is through mutator methods
Access is through accessor methods
Classes should use their own mutator/ accessor
methods to change/access the fields of the class
For mutators, it allows checking to be done
when they are changed
For accessors, it becomes more important when
dealing with inheritance

44

Chapter 6: Methods and classes


Blocks and scoping

A statement block is a number of statements within


braces
A nested block is one block within another
Note that the braces that enclose a class do not
constitute a block!
A local variable is a variable defined within a block
You can define as many local variables in each
block as you want

However, there cant be variables of the same name


declared within the same block
Example:
void
public
foo
(int
x)
{
double x = 0;
45

Chapter 6: Methods and classes


Overloading

Method overloading is when there are multiple methods of


the same name with different parameter lists

Java will figure out which one you mean to call by which
methods parameter list best matches the actual
parameters you supply

46

Chapter 6: Methods and classes


Constructors and this

Keyword this references the object being operated


within
Is not valid within a class method, as you are
not within an object!
this, within the Circle class, getRadius() and
this.getRadius() do the exact same thing
A constructor can invoke another constructor
Needs to be at the beginning of the method
If you dont provide any constructors, Java creates
a default constructor for you
This default constructor invokes the default
constructor of the super class
47

Chapter 6: Methods and classes


Specific methods and instances

All classes inherit certain methods, and should


override them
toString()
clone()
equals()
clone()s return type must be Object
instanceof returns true if the object is an instance
of the class
Example:
String
s
=
foo;
if ( s instanceof Object ) {

48

Chapter 6: Methods and classes


equals()

equals() should have the following properties:


Reflexivity: x.equals(x) should be true
Symmetry: if x.equals(y) then y.equals(x)
Transitivity: if x.equals(y) and y.equals(z) then
x.equals(z)
Consistency: x.equals(y) should always return
the same value (provided x and y dont change)
Physicality: x.equals(null) should return false
You dont have to remember the property names,
though
49

Arrays
Chapter 8

50

Chapter 8: Arrays and collections


Array basics

An array is an object
Thus, it is actually a reference to a series of
values somewhere in memory
The individual parts of an array are called elements
Elements can be a primitive type or an object
All elements in the array must have the same type
An array is an object, with fields and methods
The length is a field in the array object
clone() is a method in the array object

51

Chapter 8: Arrays and collections


Array declarations

There are two parts to creating an array

Array declaration

int[] array;

This declared an uninitialized array reference!

Array initialization

array = new int[10];

This creates an array of 10 ints each with value 0

Java gives default values to the elements: null, 0, or


false
Can be combined

int[] array = new int[10];


If declaring an array can declare specific elements:

int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Note that the int here could have been String, etc.

If an object type, then the array holds references to those


objects
52

More about how Java represents


Arrays

Consider
int[] a;
int[] b = null;
int[] c = new int[5];
int[] d = { 1, 2, 3, 4, 5 };
a = c;
d = c;
a

null

53

Chapter 8: Arrays and collections


Array access

Retrieving a particular element from an array is called


subscripting or indexing
Value passed in square brackets

Can be any non-negative int expression


Java checks to see if you go past the end of an array

IndexOutOfBounds exception is generated

54

Chapter 8: Arrays and collections


Array size

Arrays can not be resized

Use a Vector if you need to resize your collection


Array length is via the length field

Its public final, so it cant be changed


Arrays are indexed from 0

So there are elements 0 to array.length-1

55

Chapter 8: Arrays and collections


Array miscellaneous

The clone() method creates a shallow copy


The references are copied
The objects themselves are not duplicated
When passed as a parameter, the reference to the
array is what is passed
An array is an object, thus acts like other
objects with respect to parameter passing
Javas main method takes in an array:
public static void main (String[] args)
This array is the command line parameters, if
any
The Collections class provides a number of useful
methods for arrays and other collections (such as
Vectors)
56

Chapter 8: Arrays and collections


Sorting and such

A sort puts the elements of an array in a particular


order
Selection sort is one method discussed
Algorithm:

Select the smallest element, put it first


Then select the second smallest element, and put it
second
Etc

If there are n elements in the array, it requires


n2 comparisons
There are more efficient array sorting methods out
there

57

Multidimensional array visualization

Segment
int c[][] = {{1, 2}, {3, 4}, {5, 6}, {7, 8, 9}};

Produces
c[0]

c[1]

c[2]

c[3]

c[3][0] c[3][1] c[3][2]

c[2][0] c[2][1]

c[0][0] c[0][1]

ragged array

c[1][0] c[1][1]

58

Multidimensional array visualization

A multi-dimensional array declaration (either one):


int[][] m = new int[3][4];

How we visualize it:


0

or

0
59

Chapter 8: Arrays and collections


Not on the exam

Collection interface

60

You might also like