Java I--Copyright © 2000 Tom Hunter
Java I--Copyright © 2000 Tom Hunter
Chapter 6
Methods: Part II
Java I--Copyright © 2000 Tom Hunter
• Found in java.lang.Math
• Automatically imported.
• sqrt() is a “static” method.
Mat...
Java I--Copyright © 2000 Tom Hunter
• Work from the Inside Out
• First Math.sqrt() is performed.
Math Class Methods
System...
Java I--Copyright © 2000 Tom Hunter
• You can never make an instance of the Math
object—because it was declared final.
• F...
Java I--Copyright © 2000 Tom Hunter
• You can’t create a Math instance.
Math m;
Math Class Methods
Java I--Copyright © 2000 Tom Hunter
• All the methods in the Math class are declared
static--which means they belong to th...
Java I--Copyright © 2000 Tom Hunter
• Review all the ways to call a method:
A Method Name All by itself, such as
d = squar...
Java I--Copyright © 2000 Tom Hunter
• Review all the ways to call a method:
A Reference to an object we have instantiated
...
Java I--Copyright © 2000 Tom Hunter
• Review all the ways to call a method:
A class name followed by a method:
Integer.par...
Java I--Copyright © 2000 Tom Hunter
More About Methods
• Recall the all variables declared inside a method are
local varia...
Java I--Copyright © 2000 Tom Hunter
More About Methods
public double sum( double x, double y)
{
double sum = 0;
sum = x + ...
Java I--Copyright © 2000 Tom Hunter
Methods: Duration of Identifiers
• The duration of an identifier is the lifetime of th...
Java I--Copyright © 2000 Tom Hunter
Methods: Scope Rules
• The scope for an identifier is the portion of the program
in wh...
Java I--Copyright © 2000 Tom Hunter
Method Overloading
• Method overloading allows a method name to be re-used.
• To overl...
Java I--Copyright © 2000 Tom Hunter
Event
Delegation
Model
Java I--Copyright © 2000 Tom Hunter
Event Delegation Model
• Unlike many other languages--such as
Visual Basic--when the J...
Java I--Copyright © 2000 Tom Hunter
Event Delegation Model
• Consider this analogy to the event model:
> Fred decides he w...
Java I--Copyright © 2000 Tom Hunter
Event Delegation Model
• The same thing with specifics attached:
> A Button decides it...
Java I--Copyright © 2000 Tom Hunter
Event Delegation Model
• Fully described in Java Terms
> A Button adds an ActionListen...
Java I--Copyright © 2000 Tom Hunter
Event Delegation Model
Event Sources
transmit
ActionEvent
objects
to Event Listener(s).
Java I--Copyright © 2000 Tom Hunter
Event Delegation Model: Summarized
• An event source is an object that can register li...
Java I--Copyright © 2000 Tom Hunter
Event Delegation Model
• When you ask the listener object to pay attention to your
eve...
Java I--Copyright © 2000 Tom Hunter
Event Delegation Model
• Now, the panel object is notified whenever an
“action event” ...
Java I--Copyright © 2000 Tom Hunter
Event Delegation Model
• Code like this requires that the class the panel comes
from t...
Java I--Copyright © 2000 Tom Hunter
Event Delegation Model
• To implement the ActionListener interface, the listener
class...
Java I--Copyright © 2000 Tom Hunter
Event Delegation Model
• Whenever the user clicks the button, the JButton
object creat...
Java I--Copyright © 2000 Tom Hunter
Event Delegation Model: Which Button Was Clicked?
• A closer look at the object that i...
Java I--Copyright © 2000 Tom Hunter
Event Delegation Model: Which Button Was Clicked?
• Responding to a button:
We start w...
Java I--Copyright © 2000 Tom Hunter
Every event handler requires 3 bits of code:
1. Code that says the class implements a ...
Java I--Copyright © 2000 Tom Hunter
Event Delegation Model: Another Example
• In code, this is how you react to an event:
...
Java I--Copyright © 2000 Tom Hunter
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Craps e...
Java I--Copyright © 2000 Tom Hunter
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Craps e...
Java I--Copyright © 2000 Tom Hunter
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Craps e...
Java I--Copyright © 2000 Tom Hunter
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Craps e...
Java I--Copyright © 2000 Tom Hunter
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Craps e...
Java I--Copyright © 2000 Tom Hunter
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Craps e...
Java I--Copyright © 2000 Tom Hunter
// Setup graphical user interface components
public void init()
{
Container c = getCon...
Java I--Copyright © 2000 Tom Hunter
// Setup graphical user interface components
public void init()
{
Container c = getCon...
Java I--Copyright © 2000 Tom Hunter
// Setup graphical user interface components
public void init()
{
Container c = getCon...
Java I--Copyright © 2000 Tom Hunter
// Setup graphical user interface components
public void init()
{
Container c = getCon...
Java I--Copyright © 2000 Tom Hunter
// Setup graphical user interface components
public void init()
{
Container c = getCon...
Java I--Copyright © 2000 Tom Hunter
// Setup graphical user interface components
public void init()
{
Container c = getCon...
Java I--Copyright © 2000 Tom Hunter
// call method play when button is pressed.
public void actionPerformed( ActionEvent e...
Java I--Copyright © 2000 Tom Hunter
// process one roll of the dice.
public void play()
{
if( firstRoll )
{
sumOfDice = ro...
Java I--Copyright © 2000 Tom Hunter
Interfaces
• When we said our program:
implements ActionListener
it was implementing a...
Java I--Copyright © 2000 Tom Hunter
Layout Managers
• Recall that you use the getContentPane() method
as a starting point ...
Java I--Copyright © 2000 Tom Hunter
Layout Managers
• Flow Layout is the most basic. It places the objects one
after anoth...
Java I--Copyright © 2000 Tom Hunter
Layout Managers
• This is the same Applet as on the previous slide. It has
only be res...
Java I--Copyright © 2000 Tom Hunter
Recursion
• For any programming problem, there are usually two
alternative ways to sol...
Java I--Copyright © 2000 Tom Hunter
Recursion
• If we choose to call a method recursively, it means we
are calling it nume...
Java I--Copyright © 2000 Tom Hunter
Recursion Example: The Fibonacci Series
• This is a Fibonacci series:
0, 1, 1, 2, 3, 5...
Java I--Copyright © 2000 Tom Hunter
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Fibonac...
Java I--Copyright © 2000 Tom Hunter
public void actionPerformed( ActionEvent e )
{
long number,
fibonacciValue;
number = L...
Java I--Copyright © 2000 Tom Hunter
public long fibonacci( long n )
{
if( n == 0 || n == 1 ) // base case
{
return n;
}
el...
Java I--Copyright © 2000 Tom Hunter
JApplet’s Methods
• Earlier I said that JApplet has three methods:
init()
start()
pain...
Java I--Copyright © 2000 Tom Hunter
JApplet’s Methods
• In addition to these are several others:
init()
start()
paint()
st...
Java I--Copyright © 2000 Tom Hunter
JApplet’s Methods
init()
• This method is called when the Applet is first created, to
...
Java I--Copyright © 2000 Tom Hunter
JApplet’s Methods
start()
• This method is called every time the applet moves into
sit...
Java I--Copyright © 2000 Tom Hunter
JApplet’s Methods
paint()
• This method does not even come from JApplet or
Applet. It ...
Java I--Copyright © 2000 Tom Hunter
JApplet’s Methods
paint()
• If your applet ever gets covered up, then when it returns
...
Java I--Copyright © 2000 Tom Hunter
JApplet’s Methods
paint()
• When update() calls paint(), update() sends
paint() a hand...
Java I--Copyright © 2000 Tom Hunter
JApplet’s Methods
stop()
• This method is called whenever the applet is hidden from
vi...
Java I--Copyright © 2000 Tom Hunter
JApplet’s Methods
destroy()
• This method is called when the applet is being unloaded
...
Upcoming SlideShare
Loading in...5
×

Methods part-2

106

Published on

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
106
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • White Space Characters
  • White Space Characters
  • White Space Characters
  • White Space Characters
  • White Space Characters
  • White Space Characters
  • White Space Characters
  • White Space Characters
  • Methods part-2

    1. 1. Java I--Copyright © 2000 Tom Hunter
    2. 2. Java I--Copyright © 2000 Tom Hunter Chapter 6 Methods: Part II
    3. 3. Java I--Copyright © 2000 Tom Hunter • Found in java.lang.Math • Automatically imported. • sqrt() is a “static” method. Math Class Methods Math.sqrt( 900.0 ) 30.0 = Math.sqrt( 900.0 ) Type double
    4. 4. Java I--Copyright © 2000 Tom Hunter • Work from the Inside Out • First Math.sqrt() is performed. Math Class Methods System.out.println( Math.sqrt( 900.0 ) ); System.out.println( 30.0 ); • The return value of Math.sqrt is the argument for the println method.
    5. 5. Java I--Copyright © 2000 Tom Hunter • You can never make an instance of the Math object—because it was declared final. • For the sake of Contrast: Container c; c.add( “Calling A Method” ); Math Class Methods Making an instance of the Container class. This instance is called “c”. “c” is the “reference” to this object. Now, this instance will call its method add()
    6. 6. Java I--Copyright © 2000 Tom Hunter • You can’t create a Math instance. Math m; Math Class Methods
    7. 7. Java I--Copyright © 2000 Tom Hunter • All the methods in the Math class are declared static--which means they belong to the class. Math Class Methods • When we declare a method static, it means we don’t need to instantiate the class to call the method.
    8. 8. Java I--Copyright © 2000 Tom Hunter • Review all the ways to call a method: A Method Name All by itself, such as d = square( x ); • We don’t refer to the object where this method originates. Math Class Methods
    9. 9. Java I--Copyright © 2000 Tom Hunter • Review all the ways to call a method: A Reference to an object we have instantiated followed by the dot . operator and the method name: MyClass w w.myMethod() Math Class Methods
    10. 10. Java I--Copyright © 2000 Tom Hunter • Review all the ways to call a method: A class name followed by a method: Integer.parseInt() This is only used for static methods that belong to the class. Math Class Methods
    11. 11. Java I--Copyright © 2000 Tom Hunter More About Methods • Recall the all variables declared inside a method are local variables. • Local variables must be initialized. • They live only while the method is being executed. • Local variables vanish after the method is done.
    12. 12. Java I--Copyright © 2000 Tom Hunter More About Methods public double sum( double x, double y) { double sum = 0; sum = x + y; return sum; } • In this example, all three variables are local. The variables x and y declared as parameters in the method signature, and the variable sum declared in the body of the method.
    13. 13. Java I--Copyright © 2000 Tom Hunter Methods: Duration of Identifiers • The duration of an identifier is the lifetime of the identifier. • Identifiers declared locally in a method are called local variable. (They are also known as automatic variable). • Automatic (local) variables exist only while the block they are declared in executes. • Static variables exist from the time the class that defines them is loaded into memory until the program terminates.
    14. 14. Java I--Copyright © 2000 Tom Hunter Methods: Scope Rules • The scope for an identifier is the portion of the program in which the identifier can be referenced. • The scopes for an identifier are: • class • block • method
    15. 15. Java I--Copyright © 2000 Tom Hunter Method Overloading • Method overloading allows a method name to be re-used. • To overload a method--or to create another version of a method that already exists--the argument lists for the methods must differ in: • number of arguments • type of arguments • order of arguments • The return type of the method is NOT considered.
    16. 16. Java I--Copyright © 2000 Tom Hunter Event Delegation Model
    17. 17. Java I--Copyright © 2000 Tom Hunter Event Delegation Model • Unlike many other languages--such as Visual Basic--when the Java programmer wishes to program responses to an event--such as the enter key being pressed, the event must be entirely programmed.
    18. 18. Java I--Copyright © 2000 Tom Hunter Event Delegation Model • Consider this analogy to the event model: > Fred decides he wants a bodyguard. > Somebody punches Fred--that’s a problem. > Vinnie--the bodyguard--notices Fred was punched. > Vinnie reacts to the problem.
    19. 19. Java I--Copyright © 2000 Tom Hunter Event Delegation Model • The same thing with specifics attached: > A Button decides it wants an ActionListener. > A Button is pressed--an event happens: > The ActionListener notices the Button was pressed. > The Listener reacts to the event.
    20. 20. Java I--Copyright © 2000 Tom Hunter Event Delegation Model • Fully described in Java Terms > A Button adds an ActionListener. > A Button is pressed--an event happens: > The method actionPerformed is executed, receiving an ActionEvent object. > The Listener reacts to the event.
    21. 21. Java I--Copyright © 2000 Tom Hunter Event Delegation Model Event Sources transmit ActionEvent objects to Event Listener(s).
    22. 22. Java I--Copyright © 2000 Tom Hunter Event Delegation Model: Summarized • An event source is an object that can register listener* objects and send those listeners event objects. • In practice, the event source can send out event objects to all registered listeners when that event occurs. • The listener object(s) will then use the details in the event object to decide how to react to the event. * A “Listener Object” [an instance of a class] implements a special interface called a “listener interface.”
    23. 23. Java I--Copyright © 2000 Tom Hunter Event Delegation Model • When you ask the listener object to pay attention to your event source, that is called registering the listener object with the source object. • You do that with the following lines of code: eventSourceObject.addEventListener( eventListenerObject );
    24. 24. Java I--Copyright © 2000 Tom Hunter Event Delegation Model • Now, the panel object is notified whenever an “action event” occurs in the button. • When you click on a button, the panel object hears about it. MyPanel panel = new MyPanel(); JButton button = new JButton( “Clear” ); button.addActionListener( panel );
    25. 25. Java I--Copyright © 2000 Tom Hunter Event Delegation Model • Code like this requires that the class the panel comes from to implement the appropriate interface. • In this case, class MyPanel must implement the ActionListener interface. MyPanel panel = new MyPanel(); JButton button = new JButton( “Clear” ); button.addActionListener( panel );
    26. 26. Java I--Copyright © 2000 Tom Hunter Event Delegation Model • To implement the ActionListener interface, the listener class must have a method called actionPerformed(actionPerformed( ActionEventActionEvent ee )) that receives an ActionEvent object as a parameter. MyPanel panel = new MyPanel(); JButton button = new JButton( “Clear” ); button.addActionListener( panel );
    27. 27. Java I--Copyright © 2000 Tom Hunter Event Delegation Model • Whenever the user clicks the button, the JButton object creates an ActionEvent object and calls panel.actionPerformed, passing that event object. public class MyPanel extends JPanel implement ActionListener { public void actionPerformed( ActionEvent e ) { // appropriate code to react to event // goes here. } }
    28. 28. Java I--Copyright © 2000 Tom Hunter Event Delegation Model: Which Button Was Clicked? • A closer look at the object that is passed, the ActionEvent object: • The method getSource() will tell us which object created and sent the ActionEvent object.
    29. 29. Java I--Copyright © 2000 Tom Hunter Event Delegation Model: Which Button Was Clicked? • Responding to a button: We start with a panel and some buttons on it. • A listener object ( namely, the panel itself ) registers itself with the buttons so that it can listen to them. public void actionPerformed( ActionEvent e ) { if ( e.getSource() == button ) ... }
    30. 30. Java I--Copyright © 2000 Tom Hunter Every event handler requires 3 bits of code: 1. Code that says the class implements a listener interface: public class MyClass implements ActionListener 2.Code that registers a listener on one or more components. someComponent.addActionListener( MyClass ); 3.Code that implements the methods in the listener interface. public void actionPerformed(ActionEvent e) { ...//code that reacts to the action... }
    31. 31. Java I--Copyright © 2000 Tom Hunter Event Delegation Model: Another Example • In code, this is how you react to an event: JButton roll = new JButton( “Roll Dice” ); roll.addActionListener( this ); // call method play when button is pressed. Public void actionPerformed( ActionEvent e ) { do something } • When the JButton roll is clicked, the method actionPerformed receives an ActionEvent object that tells it the details of the event.
    32. 32. Java I--Copyright © 2000 Tom Hunter import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Craps extends JApplet implements ActionListener { final int WON = 0, LOST = 1, CONTINUE = 2; boolean firstRoll = true; int sumOfDice = 0; int myPoint = 0; int gameStatus = CONTINUE; // GUI components. JLabel die1Label, die2Label, sumLabel, pointLabel; JTextField firstDie, secondDie, sum, point; JButton roll;
    33. 33. Java I--Copyright © 2000 Tom Hunter import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Craps extends JApplet implements ActionListener { final int WON = 0, LOST = 1, CONTINUE = 2; boolean firstRoll = true; int sumOfDice = 0; int myPoint = 0; int gameStatus = CONTINUE; // GUI components. JLabel die1Label, die2Label, sumLabel, pointLabel; JTextField firstDie, secondDie, sum, point; JButton roll; First, to respond to events, we must import the event class API: java.awt.event.*;
    34. 34. Java I--Copyright © 2000 Tom Hunter import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Craps extends JApplet implements ActionListener { final int WON = 0, LOST = 1, CONTINUE = 2; boolean firstRoll = true; int sumOfDice = 0; int myPoint = 0; int gameStatus = CONTINUE; // GUI components. JLabel die1Label, die2Label, sumLabel, pointLabel; JTextField firstDie, secondDie, sum, point; JButton roll;
    35. 35. Java I--Copyright © 2000 Tom Hunter import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Craps extends JApplet implements ActionListener { final int WON = 0, LOST = 1, CONTINUE = 2; boolean firstRoll = true; int sumOfDice = 0; int myPoint = 0; int gameStatus = CONTINUE; // GUI components. JLabel die1Label, die2Label, sumLabel, pointLabel; JTextField firstDie, secondDie, sum, point; JButton roll; This is the first time we have seen a class that “implements” another class. This is called an interface. You see, although we are directly inheriting from the class JApplet, we are getting some functions through the interface from the class ActionListener. We will learn more about interfaces later.
    36. 36. Java I--Copyright © 2000 Tom Hunter import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Craps extends JApplet implements ActionListener { final int WON = 0, LOST = 1, CONTINUE = 2; boolean firstRoll = true; int sumOfDice = 0; int myPoint = 0; int gameStatus = CONTINUE; // GUI components. JLabel die1Label, die2Label, sumLabel, pointLabel; JTextField firstDie, secondDie, sum, point; JButton roll;
    37. 37. Java I--Copyright © 2000 Tom Hunter import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Craps extends JApplet implements ActionListener { final int WON = 0, LOST = 1, CONTINUE = 2; boolean firstRoll = true; int sumOfDice = 0; int myPoint = 0; int gameStatus = CONTINUE; // GUI components. JLabel die1Label, die2Label, sumLabel, pointLabel; JTextField firstDie, secondDie, sum, point; JButton roll; Here are 3 different kinds of GUI “components.” Remember, a component is something we place on the content pane.
    38. 38. Java I--Copyright © 2000 Tom Hunter // Setup graphical user interface components public void init() { Container c = getContentPane(); c.setLayout(new FlowLayout() ); die1Label = new JLabel( "Die 1" ); c.add( die1Label ); firstDie = new JTextField( 10 ); firstDie.setEditable( true ); c.add( firstDie ); roll = new JButton( "Roll Dice" ); roll.addActionListener( this ); c.add( roll ); } // end of method init()
    39. 39. Java I--Copyright © 2000 Tom Hunter // Setup graphical user interface components public void init() { Container c = getContentPane(); c.setLayout(new FlowLayout() ); die1Label = new JLabel( "Die 1" ); c.add( die1Label ); firstDie = new JTextField( 10 ); firstDie.setEditable( true ); c.add( firstDie ); roll = new JButton( "Roll Dice" ); roll.addActionListener( this ); c.add( roll ); } // end of method init() c is a Container object that came from the Content Pane. Here, we are setting the Layout, or how the objects get stacked on the page. There are many different choices for layouts. We will discuss them later.
    40. 40. Java I--Copyright © 2000 Tom Hunter // Setup graphical user interface components public void init() { Container c = getContentPane(); c.setLayout(new FlowLayout() ); die1Label = new JLabel( "Die 1" ); c.add( die1Label ); firstDie = new JTextField( 10 ); firstDie.setEditable( true ); c.add( firstDie ); roll = new JButton( "Roll Dice" ); roll.addActionListener( this ); c.add( roll ); } // end of method init()
    41. 41. Java I--Copyright © 2000 Tom Hunter // Setup graphical user interface components public void init() { Container c = getContentPane(); c.setLayout(new FlowLayout() ); die1Label = new JLabel( "Die 1" ); c.add( die1Label ); firstDie = new JTextField( 10 ); firstDie.setEditable( true ); c.add( firstDie ); roll = new JButton( "Roll Dice" ); roll.addActionListener( this ); c.add( roll ); } // end of method init() Earlier, we declared these JLabels and now we’re defining them. Then, we see how the Container c is using its method “add” to add the JLabels object die1Label to its content pane.
    42. 42. Java I--Copyright © 2000 Tom Hunter // Setup graphical user interface components public void init() { Container c = getContentPane(); c.setLayout(new FlowLayout() ); die1Label = new JLabel( "Die 1" ); c.add( die1Label ); firstDie = new JTextField( 10 ); firstDie.setEditable( true ); c.add( firstDie ); roll = new JButton( "Roll Dice" ); roll.addActionListener( this ); c.add( roll ); } // end of method init()
    43. 43. Java I--Copyright © 2000 Tom Hunter // Setup graphical user interface components public void init() { Container c = getContentPane(); c.setLayout(new FlowLayout() ); die1Label = new JLabel( "Die 1" ); c.add( die1Label ); firstDie = new JTextField( 10 ); firstDie.setEditable( true ); c.add( firstDie ); roll = new JButton( "Roll Dice" ); roll.addActionListener( this ); c.add( roll ); } // end of method init() Below, you see how we have defined a new JButton called “roll”. Then, we register an Action Listener on the button roll. We want our same JApplet--the one we are inside of now--to listen to for the events. To say that, we use the “this” reference below. It means “this” JApplet will listen for events that happen to the JButton “roll”. This is called “registering an Action Listener”.
    44. 44. Java I--Copyright © 2000 Tom Hunter // call method play when button is pressed. public void actionPerformed( ActionEvent e ) { play(); } • So, when an event happens to our button-- because of the ActionListener--the following method is performed. It receives an ActionEvent object. • In our example, this method just calls another method, play()
    45. 45. Java I--Copyright © 2000 Tom Hunter // process one roll of the dice. public void play() { if( firstRoll ) { sumOfDice = rollDice(); switch( sumOfDice ) { case 7: case 11: gameStatus = WON; point.setText( "" ); break; case 2: case 3: case 12: gameStatus = LOST; point.setText( "" ); break; } // end of switch } //end of true if block else { sumOfDice = rollDice(); if( sumOfDice == myPoint ) gameStatus = WON; else This method decides what to do when the event happens.
    46. 46. Java I--Copyright © 2000 Tom Hunter Interfaces • When we said our program: implements ActionListener it was implementing a thing called an interface. If you want to implement the interface ActionListener, it means that you must define a method called: public void actionPerformed( ActionEvent e ) in your class. (More about Interfaces later…)
    47. 47. Java I--Copyright © 2000 Tom Hunter Layout Managers • Recall that you use the getContentPane() method as a starting point when you want to place components on a GUI. • After that, how are your GUI components organized on the window? • The Layout Manager controls how this happens. A Layout Manager determines the position and size of every GUI component attached to a Container.
    48. 48. Java I--Copyright © 2000 Tom Hunter Layout Managers • Flow Layout is the most basic. It places the objects one after another, top to bottom, left to right, on the Container.
    49. 49. Java I--Copyright © 2000 Tom Hunter Layout Managers • This is the same Applet as on the previous slide. It has only be resized to a different shape.
    50. 50. Java I--Copyright © 2000 Tom Hunter Recursion • For any programming problem, there are usually two alternative ways to solve it: --iteration and --recursion • Iteration means repeating the same thing a certain number of times until the solution is achieved. • Recursion means having a method call itself. Or rather, it’s better to think that it calls another copy of itself.
    51. 51. Java I--Copyright © 2000 Tom Hunter Recursion • If we choose to call a method recursively, it means we are calling it numerous times until we arrive at the solution. • Ironically, a recursive method can only actually solve the simplest “base” case. • The other, more complex cases wait until the simplest base case is solved and then it works from the inside out until all the cases are solved.
    52. 52. Java I--Copyright © 2000 Tom Hunter Recursion Example: The Fibonacci Series • This is a Fibonacci series: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55... • It makes the next number in the sequence by adding together the previous two numbers.
    53. 53. Java I--Copyright © 2000 Tom Hunter import java.awt.*; import java.awt.event.*; import javax.swing.*; public class FibonacciTest extends JApplet implements ActionListener { JLabel numLabel, resultLabel; JTextField num, result; public void init() { Container c = getContentPane(); c.setLayout( new FlowLayout() ); numLabel = new JLabel( "Enter and Integer and press Enter" ); c.add( numLabel ); num = new JTextField( 10 ); // creates a new JTextField with 10 columns num.addActionListener( this ); // makes "this" Applet listen for events. c.add( num ); resultLabel = new JLabel( "Fibonacci value is " ); c.add( resultLabel ); result = new JTextField( 15 ); result.setEditable( false ); c.add( result ); } // end of method init()
    54. 54. Java I--Copyright © 2000 Tom Hunter public void actionPerformed( ActionEvent e ) { long number, fibonacciValue; number = Long.parseLong( num.getText() ); showStatus( "Calculating..." ); // status area of Applet fibonacciValue = fibonacci( number ); showStatus( "Done" ); result.setText( Long.toString( fibonacciValue ) ); } // end of method actionPerformed() // Recursive definition of method Fibonacci public long fibonacci( long n ) { if( n == 0 || n == 1 ) // base case { return n; } else { return fibonacci( n - 1 ) + fibonacci( n - 2 ); } } // end of method fibonacci() } // end of class FibonacciTest
    55. 55. Java I--Copyright © 2000 Tom Hunter public long fibonacci( long n ) { if( n == 0 || n == 1 ) // base case { return n; } else { return fibonacci( n - 1 ) + fibonacci( n - 2 ); } } • This method is called repeatedly until it reaches the base case, then the previous copies of the method--that had been waiting for the else to finish--complete their execution from the inside out.
    56. 56. Java I--Copyright © 2000 Tom Hunter JApplet’s Methods • Earlier I said that JApplet has three methods: init() start() paint() • These are always guaranteed to be performed. • If you override these methods--exactly override their signatures--they will execute automatically. • If you do not exactly copy their signatures, then your override will not automatically be executed.
    57. 57. Java I--Copyright © 2000 Tom Hunter JApplet’s Methods • In addition to these are several others: init() start() paint() stop() destroy() • As they are inherited, these members are guaranteed to be called--but still none of them contain any code. • They are all empty, and only contain code when you override them and add some.
    58. 58. Java I--Copyright © 2000 Tom Hunter JApplet’s Methods init() • This method is called when the Applet is first created, to perform first-time initialization of the applet.
    59. 59. Java I--Copyright © 2000 Tom Hunter JApplet’s Methods start() • This method is called every time the applet moves into site on the web browser to permit the applet to start up its normal operations ( especially those that are shut off by stop() ) • This is called automatically after init().
    60. 60. Java I--Copyright © 2000 Tom Hunter JApplet’s Methods paint() • This method does not even come from JApplet or Applet. It is inherited down the hierarchy from the base class Component, up three levels of the inheritance tree. • This method is called automatically after init() and start() have been called. • If you ever resize an applet, first method update() is called and update calls paint()
    61. 61. Java I--Copyright © 2000 Tom Hunter JApplet’s Methods paint() • If your applet ever gets covered up, then when it returns to the top it needs to restore itself. Method start() is automatically called and then method update() (which comes from class Component) and finally paint(). • So, to recap, anytime you resize your applet, you are firing method update(), which in turn fires method paint().
    62. 62. Java I--Copyright © 2000 Tom Hunter JApplet’s Methods paint() • When update() calls paint(), update() sends paint() a handle to a Graphics object that represents the surface on which you can paint.
    63. 63. Java I--Copyright © 2000 Tom Hunter JApplet’s Methods stop() • This method is called whenever the applet is hidden from view by going behind another window or being minimized. This allows the web browser to quit wasting CPU cycles on anything the applet is doing. • Right before the method destroy() is called, this stop() is first called to halt the applet’s processing.
    64. 64. Java I--Copyright © 2000 Tom Hunter JApplet’s Methods destroy() • This method is called when the applet is being unloaded from the web page. • This method permits the final release of memory resources when the applet is no longer being used.
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×