Programming - Introducing Methods - 1

farrightΛογισμικό & κατασκευή λογ/κού

15 Αυγ 2012 (πριν από 5 χρόνια και 3 μέρες)

548 εμφανίσεις

Introducing Methods

Corresponds with Chapter 5

What is a Method?

A method is a
collection of
statements
that are
grouped
together to
perform an
operation.

Method declaration:


Signature


Modifier(s)


e.g. public or private, static


Return type


e.g. void, int, boolean, etc. OR a class type. OR no
type (if a constructor)


Identifier


Formal Parameter List


Enclosed in parentheses


types and identifiers (like variable declaration)


Separated by commas


Method Body


requires return statement if return type is not void.

Method call


Specify the identifier


Place actual parameters (arguments) in parentheses


Actual data (literal, constant, variable, or expression)


Use return value (if not void)

Introducing Methods

(Example 5.1)

method

calling a method

Anatomy of Method Declaration and Call

method call

modifier

return type

identifier

formal parameters

method body

return statement

specify

identifier

Pass actual
parameters
(arguments)

use
retur
n
value

method declaraion

Processing Sequence of a Method Call

method call

method declaration

2) Pass by value:
a
num1

is a copy
of

i
,
num2

is a
copy of
j
.

3) Function body
executes.

4) Return
value sent
back to
calling
statement.

5) Return value
assigned into
k
.

1) invoke the method

Parameter Order and Type
Assocation

void nPrintln (String message, int n)

{


for (int i=0; i<n; i++)


System.out.println(message);

}

IMPORTANT: the order and data type of actual parameters
in a method call MUST match the order and data type of
formal parameters in the method signature. Otherwise you
will get a syntax error.

nPrintln(“Hello there”, 100);

nPrintln(100, “Hello there”);

OK

Not OK

Frame Stack


The Java Virtual Machine keeps manages the local
variables and parameters of method in a Frame Stack (also
referred to as Call Stack or Program Stack).


Frame

= a data structure that holds the values of all
the local variables and formal parameters of a method.


Stack

= a last
-
in, first
-
out data structure. Items are
pushed onto the top of the stack. Items are popped off
the top of the stack.


When a method is called, its frame (local variables and
parameters) are pushed onto the top of the stack.


When a method terminates, its frame is removed from
the stack.



the formal parameters and local variables of a
method exist ONLY AS LONG AS THE METHOD IS
EXECUTING.

Memory Changes During Processing

(Listing 5.1, p132)

Memory Changes During Processing

(Listing 5.1)

Frame Stack

args

i

5

k

j

main’s

frame

2

In main(), before calling max()

Memory Changes During Processing

(Listing 5.1)

Frame Stack

args

i

5

k

j

main’s

frame

2

In max(), just started

max’s

frame

num1

5

num2

2

result

Memory Changes During Processing

(Listing 5.1)

Frame Stack

args

i

5

k

j

main’s

frame

2

In max(), before it terminates

max’s

frame

num1

5

num2

2

result

5

Memory Changes During Processing

(Listing 5.1)

Frame Stack

args

i

5

k

5

j

main’s

frame

2

Back in main(), after max() returns

NOTE: the value returned
from max() was assigned
into the variable
k
.

Debugger


You can view the contents of the frame
stack in the debugger.


The Java JDK includes a program for
debugging applications (called
jdb.exe
, in
the bin subdirectory).


NetBeans provides a GUI interface to the
debugger.

NOTE: You will be learning how to use the debugger in future assignments!

Stopped at this statement (breakpoint)

main’s frame on
the frame stack

Local data in main method

Stopped at this statement (breakpoint)

max’s frame
pushed on
top of main’s
frame

Local data in max method

Stopped at this
statement
(breakpoint)

max’s frame was
popped off of the
frame stack

max’s return value
was assigned to
variable
k

Scope


A variable’s scope is its visibility.


Which statements can refer to the variable’s identifier.


Local variables and formal parameters have
method

scope. They can only be used inside the method for
which they are declared.


Variables declared inside blocks have block scope. They
can be used only inside the block for which they are
declared.


Variables declared in the parentheses of a control
structure can only be used within the control structure
for which they are declared.


You can declare multiple variables of the same name as
long as they are not in the same nesting structure.


You cannot declare variables of the same name within
the same nesting structure.


Variables
i, j,

and
k
, and parameter
args

are in
main
’s scope.


Note:
max

cannot refer to any of
main
’s variables or
parameters...otherwise you’ll get a
syntax error.

Variable
result,
and parameters
num1
and

num2

are in
max
’s scope.


main

cannot refer to these
identifiers.


Another Scope Example


The following example shows variables
with:


Method scope (available throughout an entire
method)


Block scope (available only within a block of
code)


Loop scope (available only within a loop)


Method scope for
method1

Note: the identifiers x and
y are not available to the
main method.

Method scope for
method2

i
is available
within this loop.
z

is available within
the block

i
is available
within this loop.
z

is available within
the block

Identical variable
names for different
variables. OK because
different blocks, not
one nested in the
other

Identical variable
names for different
variables. NOT OK
because the loop
block is nested inside
the method. This will
cause a syntax error.

y

Method Overloading


Overloading = declaring multiple methods
of the same name, but with different
formal parameter lists.


When you call an overloaded method, the
compiler knows which version you are
calling based on the types of actual
parameters you pass.

Method Overloading

(Listing 5.4)

Frame Stack

args

main’s

frame

max’s

Frame

(int)

num1

3

num2

4

Frame Stack

args

main’s

frame

Frame Stack

args

main’s

frame

max’s

Frame

(Double)

num1

3.0

num2

5.4

Frame Stack

args

main’s

frame

Frame Stack

args

main’s

frame

max’s

Frame

(Double,

3 params)

num1

3.0

num2

5.4

Frame Stack

args

main’s

frame

num3

10.14

Note: here the result returned
from a method is the actual
parameter of another method
call.

max’s

Frame

(Double,

3 params)

num1

3.0

num2

5.4

Frame Stack

args

main’s

frame

num3

10.14

max’s

Frame

(Double)

num1

3.0

num2

5.4

max’s

Frame

(Double,

3 params)

num1

3.0

num2

5.4

Frame Stack

args

main’s

frame

num3

10.14

5.4

max’s

Frame

(Double,

3 params)

num1

3.0

num2

5.4

Frame Stack

args

main’s

frame

num3

10.14

max’s

Frame

(Double)

num1

5.4

num2

10.14

max’s

Frame

(Double,

3 params)

num1

3.0

num2

5.4

Frame Stack

args

main’s

frame

num3

10.14

10.14

Frame Stack

args

main’s

frame