University of British Columbia CPSC 111, Intro to Computation Jan-Apr 2006 Tamara Munzner 1 Advanced Class Design Lecture 19, Thu Mar 16 2006

Slides:



Advertisements
Similar presentations
Copyright 2010 by Pearson Education Building Java Programs Chapter 7 Lecture 7-2: Arrays as Parameters reading: , 3.3 self-checks: Ch. 7 #5, 8,
Advertisements

Chapter 4&5 Defining Classes Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
CS0007: Introduction to Computer Programming Introduction to Classes and Objects.
CSCI 1100/ , 6.2, 6.4 April 12, 15, 17.
University of British Columbia CPSC 111, Intro to Computation Jan-Apr 2006 Tamara Munzner 1 Interfaces, Polymorphism Lecture 20, Tue Mar
University of British Columbia CPSC 111, Intro to Computation 2009W2: Jan-Apr 2010 Tamara Munzner 1 Inheritance II Lecture 34, Mon Apr
Lecture 2: Object Oriented Programming I
University of British Columbia CPSC 111, Intro to Computation Jan-Apr 2006 Tamara Munzner 1 Inheritance II Lecture 23, Thu Mar
University of British Columbia CPSC 111, Intro to Computation Jan-Apr 2006 Tamara Munzner Mathematical Operations, Static Methods Lecture 9, Thu Feb 2.
University of British Columbia CPSC 111, Intro to Computation Jan-Apr 2006 Tamara Munzner 1 Interfaces, Polymorphism II Lecture 21, Thu Mar
University of British Columbia CPSC 111, Intro to Computation Jan-Apr 2006 Tamara Munzner 1 Interfaces, Inheritance Lecture 22, Tue Mar
University of British Columbia CPSC 111, Intro to Computation 2009W2: Jan-Apr 2010 Tamara Munzner 1 Parameter/Scope Review II, Inheritance Lecture 33,
George Blank University Lecturer. CS 602 Java and the Web Object Oriented Software Development Using Java Chapter 4.
University of British Columbia CPSC 111, Intro to Computation Jan-Apr 2006 Tamara Munzner Arrays II Lecture 15, Thu Mar
University of British Columbia CPSC 111, Intro to Computation 2009W2: Jan-Apr 2010 Tamara Munzner 1 Mathematical Operators, Static Methods Lecture 14,
University of British Columbia CPSC 111, Intro to Computation Jan-Apr 2006 Tamara Munzner 1 2D Arrays, Sorting Lecture 16, Tue Mar
University of British Columbia CPSC 111, Intro to Computation 2009W2: Jan-Apr 2010 Tamara Munzner 1 Static Methods, Conditionals Lecture 15, Mon Feb 8.
1 More on Arrays Passing arrays to or from methods Arrays of objects Command line arguments Variable length parameter lists Two dimensional arrays Reading.
Understanding class definitions Looking inside classes 3.0.
Writing methods and Java Statements. Java program import package; // comments and /* … */ and /** javadoc here */ public class Name { // instance variables.
University of British Columbia CPSC 111, Intro to Computation 2009W2: Jan-Apr 2010 Tamara Munzner 1 Loops III Lecture 20, Fri Mar
University of British Columbia CPSC 111, Intro to Computation 2009W2: Jan-Apr 2010 Tamara Munzner 1 Arrays II Lecture 22, Wed Mar
University of British Columbia CPSC 111, Intro to Computation Jan-Apr 2006 Tamara Munzner Loops II Lecture 13, Thu Feb
University of British Columbia CPSC 111, Intro to Computation 2009W2: Jan-Apr 2010 Tamara Munzner 1 More Class Design Lecture 30, Mon Mar
University of British Columbia CPSC 111, Intro to Computation 2009W2: Jan-Apr 2010 Tamara Munzner 1 Interfaces, Polymorphism Lecture 29, Fri Mar
University of British Columbia CPSC 111, Intro to Computation 2009W2: Jan-Apr 2010 Tamara Munzner 1 2D Arrays, Sorting Lecture 23, Fri Mar
University of British Columbia CPSC 111, Intro to Computation Jan-Apr 2006 Tamara Munzner 1 Arrays and Class Design Lecture 18, Tue Mar
University of British Columbia CPSC 111, Intro to Computation 2009W2: Jan-Apr 2010 Tamara Munzner 1 Arrays Lecture 21, Mon Mar
University of British Columbia CPSC 111, Intro to Computation 2009W2: Jan-Apr 2010 Tamara Munzner 1 More Class Design Lecture 12, Mon Feb
University of British Columbia CPSC 111, Intro to Computation 2009W2: Jan-Apr 2010 Tamara Munzner 1 More Class Design II Lecture 31, Wed Mar
University of British Columbia CPSC 111, Intro to Computation Jan-Apr 2006 Tamara Munzner Conditionals II Lecture 11, Thu Feb
University of British Columbia CPSC 111, Intro to Computation 2009W2: Jan-Apr 2010 Tamara Munzner 1 Yet More Array Practice Lecture 24, Mon Mar
University of British Columbia CPSC 111, Intro to Computation 2009W2: Jan-Apr 2010 Tamara Munzner 1 Interfaces, Polymorphism Lecture 28, Wed Mar
University of British Columbia CPSC 111, Intro to Computation 2009W2: Jan-Apr 2010 Tamara Munzner 1 More Class Design Lecture 13, Wed Feb
University of British Columbia CPSC 111, Intro to Computation 2009W2: Jan-Apr 2010 Tamara Munzner 1 More Class Design III, Parameter/Scope Review Lecture.
More Arrays Length, constants, and arrays of arrays By Greg Butler.
College Board A.P. Computer Science A Topics Program Design - Read and understand a problem's description, purpose, and goals; Apply data abstraction.
BPJ444: Business Programming Using Java Classes and Objects Tim McKenna
By Nicholas Policelli An Introduction to Java. Basic Program Structure public class ClassName { public static void main(String[] args) { program statements.
Java Quiz Bowl A fun review of the Java you should know from CMPT 201 If you don’t know the answers - this week is for you to study up!
JAVA: An Introduction to Problem Solving & Programming, 5 th Ed. By Walter Savitch and Frank Carrano. ISBN © 2009 Pearson Education, Inc., Upper.
Arrays Chapter 8. What if we need to store test scores for all students in our class. We could store each test score as a unique variable: int score1.
Review of ICS 102. Lecture Objectives To review the major topics covered in ICS 102 course Refresh the memory and get ready for the new adventure of ICS.
Questions? Suggestions?. References References Revisited What happens when we say: int x; double y; char c; ???
Topic 1 Object Oriented Programming. 1-2 Objectives To review the concepts and terminology of object-oriented programming To discuss some features of.
Copyright © 2012 Pearson Education, Inc. Chapter 4 Writing Classes Java Software Solutions Foundations of Program Design Seventh Edition John Lewis William.
RECITATION 4. Classes public class Student { } Data Members public class Student { private String name; public String id; }
Lecture 3 Classes, Structs, Enums Passing by reference and value Arrays.
BEGINNING PROGRAMMING.  Literally – giving instructions to a computer so that it does what you want  Practically – using a programming language (such.
Structure of programming languages OOP. Programming Paradigm A way of conceptualizing what it means to perform computation and how tasks to be carried.
Chapter 4&5 Defining Classes Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
1 Static Variable and Method Lecture 9 by Dr. Norazah Yusof.
1 Predefined Classes and Objects Chapter 3. 2 Objectives You will be able to:  Use predefined classes available in the Java System Library in your own.
1 Introduction to Computer Science for Majors II CPSC 233, Winter 2013 CPSC 233, winter 2013 Tutorial 7, Feb 6/7, 2013.
Java: Variables and Methods By Joshua Li Created for the allAboutJavaClasses wikispace.
Structured Programming Dr. Atif Alhejali Lecture 4 Modifiers Parameters passing 1Structured Programming.
Review – Primitive Data What is primitive data? What are 3 examples of primitive data types? How is a piece of primitive data different from an object?
Programming in Java Transitioning from Alice. Becomes not myFirstMethod but …. public static void main (String[] arg) { // code for testing classes goes.
University of British Columbia CPSC 111, Intro to Computation Jan-Apr 2006 Tamara Munzner Class Design II Lecture 7, Thu Jan
Re-Intro to Object Oriented Programming
Values vs. References Lecture 13.
Objects as a programming concept
Examples of Classes & Objects
Class Definitions and Writing Methods
An Introduction to Java – Part II
Classes & Objects: Examples
Recap Week 2 and 3.
© A+ Computer Science - OOP Pieces © A+ Computer Science -
Corresponds with Chapter 5
Presentation transcript:

University of British Columbia CPSC 111, Intro to Computation Jan-Apr 2006 Tamara Munzner 1 Advanced Class Design Lecture 19, Thu Mar based on slides by Kurt Eiselt

2 News n Midterm 2: Thu Mar 16, 6:30pm (TODAY!) n Woodward 2 n hour-long exam, reserve 6:30-8 time slot n for buffer in case of fire alarms etc n no labs/tutorials this week n but one TA will be in lab during normal lab hours to answer questions

3 Reading n This week: , n Next week:

4 Recap: Bunnies n Bunny.java n NamedBunny.java - int x - int y - int numCarrots +Bunny() +hop(int direction) +displayInfo() +Bunny(int x, int y, int numCarrots, String name)

5 Even More Bunnies Question 5: [16 marks] The world desperately needs better bunny management software, so please help by writing a BunnyHerd class. A BunnyHerd object holds an array of Bunny objects. Your BunnyHerd class definition should include the following four methods: constructor Expects two parameters, an integer representing the maximum number of bunnies in the herd, and a String for the name of the herd. addBunny(int xPos, int yPos, int carrots,String name) Expects four parameters, the X- and Y-coordinates of the bunny, the number of carrots, and the name. This method creates a new Bunny object and stores the reference to the object in the next available location in the BunnyHerd object. deleteBunny(String name) Expects one parameter, the name of the bunny. This method removes from the BunnyHerd object all references to bunnies with the given name by overwriting those references with the null pointer. This method does not change the pointer to the next available location in the BunnyHerd object. printHerd() This method uses the toString() method of the Bunny object to print information about every Bunny in the herd.

6 Even More Bunnies n BunnyHerd.java

7 Parameter Passing Consider the following program: public class ParamTest1 { public static void main (String[] args) { int number = 4; System.out.println("main: number is " + number); method1(number); System.out.println("main: number is now " + number); } public static void method1(int x) { System.out.println("method1: x is " + x); x = x * x; System.out.println("method1: x is now " + x); }

8 Parameter Passing Consider the following program: public class ParamTest1 { public static void main (String[] args) { int number = 4; System.out.println("main: number is " + number); method1(number); System.out.println("main: number is now " + number); } public static void method1(int x) { System.out.println("method1: x is " + x); x = x * x; System.out.println("method1: x is now " + x); } What's the flow of control?

9 Parameter Passing Consider the following program: public class ParamTest1 { public static void main (String[] args) { 1 int number = 4; System.out.println("main: number is " + number); method1(number); System.out.println("main: number is now " + number); } public static void method1(int x) { System.out.println("method1: x is " + x); x = x * x; System.out.println("method1: x is now " + x); } What's the flow of control?

10 Parameter Passing Consider the following program: public class ParamTest1 { public static void main (String[] args) { 1 int number = 4; 2 System.out.println("main: number is " + number); method1(number); System.out.println("main: number is now " + number); } public static void method1(int x) { System.out.println("method1: x is " + x); x = x * x; System.out.println("method1: x is now " + x); } What's the flow of control?

11 Parameter Passing Consider the following program: public class ParamTest1 { public static void main (String[] args) { 1 int number = 4; 2 System.out.println("main: number is " + number); 3 method1(number); System.out.println("main: number is now " + number); } public static void method1(int x) { System.out.println("method1: x is " + x); x = x * x; System.out.println("method1: x is now " + x); } What's the flow of control?

12 Parameter Passing Consider the following program: public class ParamTest1 { public static void main (String[] args) { 1 int number = 4; 2 System.out.println("main: number is " + number); 3 method1(number); System.out.println("main: number is now " + number); } public static void method1(int x) { 4 System.out.println("method1: x is " + x); x = x * x; System.out.println("method1: x is now " + x); } What's the flow of control?

13 Parameter Passing Consider the following program: public class ParamTest1 { public static void main (String[] args) { 1 int number = 4; 2 System.out.println("main: number is " + number); 3 method1(number); System.out.println("main: number is now " + number); } public static void method1(int x) { 4 System.out.println("method1: x is " + x); 5 x = x * x; System.out.println("method1: x is now " + x); } What's the flow of control?

14 Parameter Passing Consider the following program: public class ParamTest1 { public static void main (String[] args) { 1 int number = 4; 2 System.out.println("main: number is " + number); 3 method1(number); System.out.println("main: number is now " + number); } public static void method1(int x) { 4 System.out.println("method1: x is " + x); 5 x = x * x; 6 System.out.println("method1: x is now " + x); } What's the flow of control?

15 Parameter Passing Consider the following program: public class ParamTest1 { public static void main (String[] args) { 1 int number = 4; 2 System.out.println("main: number is " + number); 3 method1(number); 7 System.out.println("main: number is now " + number); } public static void method1(int x) { 4 System.out.println("method1: x is " + x); 5 x = x * x; 6 System.out.println("method1: x is now " + x); } What's the flow of control?

16 Parameter Passing Consider the following program: public class ParamTest1 { public static void main (String[] args) { 1 int number = 4; 2 System.out.println("main: number is " + number); 3 method1(number); 7 System.out.println("main: number is now " + number); } public static void method1(int x) { 4 System.out.println("method1: x is " + x); 5 x = x * x; 6 System.out.println("method1: x is now " + x); } What's printed?

17 Parameter Passing Consider the following program: public class ParamTest1 { public static void main (String[] args) { 1 int number = 4; 2 System.out.println("main: number is " + number); 3 method1(number); 7 System.out.println("main: number is now " + number); } public static void method1(int x) { 4 System.out.println("method1: x is " + x); 5 x = x * x; 6 System.out.println("method1: x is now " + x); } What's printed? main: number is 4

18 Parameter Passing Consider the following program: public class ParamTest1 { public static void main (String[] args) { 1 int number = 4; 2 System.out.println("main: number is " + number); 3 method1(number); 7 System.out.println("main: number is now " + number); } public static void method1(int x) { 4 System.out.println("method1: x is " + x); 5 x = x * x; 6 System.out.println("method1: x is now " + x); } What's printed? main: number is 4 method1: x is 4

19 Parameter Passing Consider the following program: public class ParamTest1 { public static void main (String[] args) { 1 int number = 4; 2 System.out.println("main: number is " + number); 3 method1(number); 7 System.out.println("main: number is now " + number); } public static void method1(int x) { 4 System.out.println("method1: x is " + x); 5 x = x * x; 6 System.out.println("method1: x is now " + x); } What's printed? main: number is 4 method1: x is 4 method1: x is now 16

20 Parameter Passing Consider the following program: public class ParamTest1 { public static void main (String[] args) { 1 int number = 4; 2 System.out.println("main: number is " + number); 3 method1(number); 7 System.out.println("main: number is now " + number); } public static void method1(int x) { 4 System.out.println("method1: x is " + x); 5 x = x * x; 6 System.out.println("method1: x is now " + x); } What's printed? main: number is 4 method1: x is 4 method1: x is now 16 ?????????????????????

21 Parameter Passing Consider the following program: public class ParamTest1 { public static void main (String[] args) { 1 int number = 4; 2 System.out.println("main: number is " + number); 3 method1(number); 7 System.out.println("main: number is now " + number); } public static void method1(int x) { 4 System.out.println("method1: x is " + x); 5 x = x * x; 6 System.out.println("method1: x is now " + x); } What's printed? main: number is 4 method1: x is 4 method1: x is now 16 main: number is now 4

22 Parameter Passing Consider the following program: public class ParamTest1 { public static void main (String[] args) { 1 int number = 4; 2 System.out.println("main: number is " + number); 3 method1(number); 7 System.out.println("main: number is now " + number); } public static void method1(int x) { 4 System.out.println("method1: x is " + x); 5 x = x * x; 6 System.out.println("method1: x is now " + x); } Why not 16? main: number is 4 method1: x is 4 method1: x is now 16 main: number is now 4

23 Parameter Passing Consider the following program: public class ParamTest1 { public static void main (String[] args) { 1 int number = 4; 2 System.out.println("main: number is " + number); 3 method1(number); 7 System.out.println("main: number is now " + number); } public static void method1(int x) { 4 System.out.println("method1: x is " + x); 5 x = x * x; 6 System.out.println("method1: x is now " + x); } Because when the value in the int variable number is passed to method1,

24 Parameter Passing Consider the following program: public class ParamTest1 { public static void main (String[] args) { 1 int number = 4; 2 System.out.println("main: number is " + number); 3 method1(number); 7 System.out.println("main: number is now " + number); } public static void method1(int x) { 4 System.out.println("method1: x is " + x); 5 x = x * x; 6 System.out.println("method1: x is now " + x); } Because when the value in the int variable number is passed to method1, what really happens is that a copy of the value (4) in number is assigned to the parameter x.

25 Parameter Passing Consider the following program: public class ParamTest1 { public static void main (String[] args) { 1 int number = 4; 2 System.out.println("main: number is " + number); 3 method1(number); 7 System.out.println("main: number is now " + number); } public static void method1(int x) { 4 System.out.println("method1: x is " + x); 5 x = x * x; 6 System.out.println("method1: x is now " + x); } Because when the value in the int variable number is passed to method1, what really happens is that a copy of the value (4) in number is assigned to the parameter x. It's the value in x that's being modified here -- a copy of the value in number. The original value in number is not affected.

26 Parameter Passing Will this program behave differently? Why or why not? public class ParamTest2 { public static void main (String[] args) { int number = 4; System.out.println("main: number is " + number); method1(number); System.out.println("main: number is now " + number); } public static void method1(int number) { System.out.println("method1: number is " + number); number = number * number; System.out.println("method1: number is now " + number); } What's printed?

27 Parameter Passing Will this program behave differently? Why or why not? public class ParamTest2 { public static void main (String[] args) { int number = 4; System.out.println("main: number is " + number); method1(number); System.out.println("main: number is now " + number); } public static void method1(int number) { System.out.println("method1: number is " + number); number = number * number; System.out.println("method1: number is now " + number); } What's printed? main: number is 4 method1: number is 4 method1: number is now 16 ?????????????????????????

28 Parameter Passing Will this program behave differently? Why or why not? public class ParamTest2 { public static void main (String[] args) { int number = 4; System.out.println("main: number is " + number); method1(number); System.out.println("main: number is now " + number); } public static void method1(int number) { System.out.println("method1: number is " + number); number = number * number; System.out.println("method1: number is now " + number); } What's printed? main: number is 4 method1: number is 4 method1: number is now 16 main: number is now 4

29 Parameter Passing Will this program behave differently? Why or why not? public class ParamTest2 { public static void main (String[] args) { int number = 4; System.out.println("main: number is " + number); method1(number); System.out.println("main: number is now " + number); } public static void method1(int number) { System.out.println("method1: number is " + number); number = number * number; System.out.println("method1: number is now " + number); } Remember that a parameter declared in a method header has local scope, just like a variable declared within that method. As far as Java is concerned, number inside of method1 is unrelated to number outside of method1. They are not the same variable.

30 Parameter Passing Now consider this program. public class Ptest { public static void main(String[] args) { int[] foo = new int[1]; foo[0] = 4; System.out.println("main: foo is now: " + foo[0]); method1(foo); System.out.println("main: foo is now: " + foo[0]); } public static void method1(int[] x) { System.out.println("method1: x is now: " + x[0]); x[0] = x[0] * x[0]; System.out.println("method1: x is now: " + x[0]); } What's printed?

31 Parameter Passing Now consider this program. public class Ptest { public static void main(String[] args) { int[] foo = new int[1]; foo[0] = 4; System.out.println("main: foo is now: " + foo[0]); method1(foo); System.out.println("main: foo is now: " + foo[0]); } public static void method1(int[] x) { System.out.println("method1: x is now: " + x[0]); x[0] = x[0] * x[0]; System.out.println("method1: x is now: " + x[0]); } What's printed? main: foo is now: 4

32 Parameter Passing Now consider this program. public class Ptest { public static void main(String[] args) { int[] foo = new int[1]; foo[0] = 4; System.out.println("main: foo is now: " + foo[0]); method1(foo); System.out.println("main: foo is now: " + foo[0]); } public static void method1(int[] x) { System.out.println("method1: x is now: " + x[0]); x[0] = x[0] * x[0]; System.out.println("method1: x is now: " + x[0]); } What's printed? main: foo is now: 4 method1: x is now: 4

33 Parameter Passing Now consider this program. public class Ptest { public static void main(String[] args) { int[] foo = new int[1]; foo[0] = 4; System.out.println("main: foo is now: " + foo[0]); method1(foo); System.out.println("main: foo is now: " + foo[0]); } public static void method1(int[] x) { System.out.println("method1: x is now: " + x[0]); x[0] = x[0] * x[0]; System.out.println("method1: x is now: " + x[0]); } What's printed? main: foo is now: 4 method1: x is now: 4 method1: x is now: 16

34 Parameter Passing Now consider this program. public class Ptest { public static void main(String[] args) { int[] foo = new int[1]; foo[0] = 4; System.out.println("main: foo is now: " + foo[0]); method1(foo); System.out.println("main: foo is now: " + foo[0]); } public static void method1(int[] x) { System.out.println("method1: x is now: " + x[0]); x[0] = x[0] * x[0]; System.out.println("method1: x is now: " + x[0]); } What's printed? main: foo is now: 4 method1: x is now: 4 method1: x is now: 16 ?????????????????????

35 Parameter Passing Now consider this program. public class Ptest { public static void main(String[] args) { int[] foo = new int[1]; foo[0] = 4; System.out.println("main: foo is now: " + foo[0]); method1(foo); System.out.println("main: foo is now: " + foo[0]); } public static void method1(int[] x) { System.out.println("method1: x is now: " + x[0]); x[0] = x[0] * x[0]; System.out.println("method1: x is now: " + x[0]); } What's printed? main: foo is now: 4 method1: x is now: 4 method1: x is now: 16 main: foo is now: 16

36 Parameter Passing Now consider this program. public class Ptest { public static void main(String[] args) { int[] foo = new int[1]; foo[0] = 4; System.out.println("main: foo is now: " + foo[0]); method1(foo); System.out.println("main: foo is now: " + foo[0]); } public static void method1(int[] x) { System.out.println("method1: x is now: " + x[0]); x[0] = x[0] * x[0]; System.out.println("method1: x is now: " + x[0]); } Why not 4? main: foo is now: 4 method1: x is now: 4 method1: x is now: 16 main: foo is now: 16

37 Parameter Passing Now consider this program. public class Ptest { public static void main(String[] args) { int[] foo = new int[1]; foo[0] = 4; System.out.println("main: foo is now: " + foo[0]); method1(foo); System.out.println("main: foo is now: " + foo[0]); } public static void method1(int[] x) { System.out.println("method1: x is now: " + x[0]); x[0] = x[0] * x[0]; System.out.println("method1: x is now: " + x[0]); } What's in foo? Is it the int[] array object?

38 Parameter Passing Now consider this program. public class Ptest { public static void main(String[] args) { int[] foo = new int[1]; foo[0] = 4; System.out.println("main: foo is now: " + foo[0]); method1(foo); System.out.println("main: foo is now: " + foo[0]); } public static void method1(int[] x) { System.out.println("method1: x is now: " + x[0]); x[0] = x[0] * x[0]; System.out.println("method1: x is now: " + x[0]); } What's in foo? Is it the int[] array object? No, it's the reference, or pointer, to the object.

39 Parameter Passing Now consider this program. public class Ptest { public static void main(String[] args) { int[] foo = new int[1]; foo[0] = 4; System.out.println("main: foo is now: " + foo[0]); method1(foo); System.out.println("main: foo is now: " + foo[0]); } public static void method1(int[] x) { System.out.println("method1: x is now: " + x[0]); x[0] = x[0] * x[0]; System.out.println("method1: x is now: " + x[0]); } What's in foo? Is it the int[] array object? No, it's the reference, or pointer, to the object. A copy of that reference is passed to method1 and assigned to x.

40 Parameter Passing Now consider this program. public class Ptest { public static void main(String[] args) { int[] foo = new int[1]; foo[0] = 4; System.out.println("main: foo is now: " + foo[0]); method1(foo); System.out.println("main: foo is now: " + foo[0]); } public static void method1(int[] x) { System.out.println("method1: x is now: " + x[0]); x[0] = x[0] * x[0]; System.out.println("method1: x is now: " + x[0]); } What's in foo? Is it the int[] array object? No, it's the reference, or pointer, to the object. A copy of that reference is passed to method1 and assigned to x. The reference in foo and the reference in x both point to the same object.

41 Parameter Passing Now consider this program. public class Ptest { public static void main(String[] args) { int[] foo = new int[1]; foo[0] = 4; System.out.println("main: foo is now: " + foo[0]); method1(foo); System.out.println("main: foo is now: " + foo[0]); } public static void method1(int[] x) { System.out.println("method1: x is now: " + x[0]); x[0] = x[0] * x[0]; System.out.println("method1: x is now: " + x[0]); } When the object pointed at by x is updated, it's the same as updating the object pointed at by foo. We changed the object that was pointed at by both x and foo.

42 Parameter Passing n Passing primitive types (int, double, boolean) as parameter in Java n "pass by value" n value in variable is copied n copy is passed to method n modifying copy of value inside called method has no effect on original value outside called method n modifying aka mutating

43 Parameter Passing n Passing object as parameter in Java n "pass by reference" n objects could be huge, so do not pass copies around n pass copy of the object reference n object reference aka pointer n modifying object pointed to by reference inside calling method does affect object pointed to by reference outside calling method n both references point to same object

44 Parameter Passing Pictures main method1 4 object as parameter: copy of pointer made x foo main method1 prim as parameter: copy of value x number 4 4

45 Midterm Q4 from 04W2 public void process( int[][] arrA, int[][] arrB ) { int row; int col; int[][] arrC = { { 1, 1, 1 }, { 1, 1, 1 } }; arrA = arrC; for( row = 0; row < arrB.length; row++ ) { for( col = 0; col < arrB[ row ].length; col++ ) { arrB[ row ][ col ] = row + col; } int[][] dataA = { { 0, 0 }, { 0, 0 } }; int[][] dataB = { { 0, 0 }, { 0, 0 } }; process( dataA, dataB ); dataBdataA

46 Midterm Q4 from 04W2 public void process( int[][] arrA, int[][] arrB ) { int row; int col; int[][] arrC = { { 1, 1, 1 }, { 1, 1, 1 } }; arrA = arrC; for( row = 0; row < arrB.length; row++ ) { for( col = 0; col < arrB[ row ].length; col++ ) { arrB[ row ][ col ] = row + col; } int[][] dataA = { { 0, 0 }, { 0, 0 } }; int[][] dataB = { { 0, 0 }, { 0, 0 } }; process( dataA, dataB ); dataBdataAarrAarrB

47 Midterm Q4 from 04W2 public void process( int[][] arrA, int[][] arrB ) { int row; int col; int[][] arrC = { { 1, 1, 1 }, { 1, 1, 1 } }; arrA = arrC; for( row = 0; row < arrB.length; row++ ) { for( col = 0; col < arrB[ row ].length; col++ ) { arrB[ row ][ col ] = row + col; } int[][] dataA = { { 0, 0 }, { 0, 0 } }; int[][] dataB = { { 0, 0 }, { 0, 0 } }; process( dataA, dataB ); dataBdataAarrAarrB arrC

48 Midterm Q4 from 04W2 public void process( int[][] arrA, int[][] arrB ) { int row; int col; int[][] arrC = { { 1, 1, 1 }, { 1, 1, 1 } }; arrA = arrC; for( row = 0; row < arrB.length; row++ ) { for( col = 0; col < arrB[ row ].length; col++ ) { arrB[ row ][ col ] = row + col; } int[][] dataA = { { 0, 0 }, { 0, 0 } }; int[][] dataB = { { 0, 0 }, { 0, 0 } }; process( dataA, dataB ); dataBdataAarrAarrB arrC

49 Review: Static Fields/Methods n Static fields belong to whole class n nonstatic fields belong to instantiated object n Static methods can only use static fields n nonstatic methods can use either nonstatic or static fields class: Giraffe getGiraffeCount() numGiraffes object: Giraffe1 sayHowTall() neckLength object: Giraffe2 sayHowTall() neckLength

50 Review: Variable Scope n Scope of a variable (or constant) is that part of a program in which value of that variable can be accessed

51 Variable Scope public class CokeMachine4 { private int numberOfCans; public CokeMachine4() { numberOfCans = 2; System.out.println("Adding another machine to your empire"); } public int getNumberOfCans() { return numberOfCans; } public void reloadMachine(int loadedCans) { numberOfCans = loadedCans; } n numberOfCans variable declared inside class but not inside particular method n scope is entire class: can be accessed from anywhere in class

52 Variable Scope public class CokeMachine4 { private int numberOfCans; public CokeMachine4() { numberOfCans = 2; System.out.println("Adding another machine to your empire"); } public double getVolumeOfCoke() { double totalLitres = numberOfCans * 0.355; return totalLitres; } public void reloadMachine(int loadedCans) { numberOfCans = loadedCans; } n totalLitres declared within a method n scope is method: can only be accessed from within method n variable is local data: has local scope

53 Variable Scope public class CokeMachine4 { private int numberOfCans; public CokeMachine4() { numberOfCans = 2; System.out.println("Adding another machine to your empire"); } public int getNumberOfCans() { return numberOfCans; } public void reloadMachine(int loadedCans) { numberOfCans = loadedCans; } n loadedCans is method parameter n scope is method: also local scope n just like variable declared within parameter n accessed only within that method

54 Variable Types n Static variables n declared within class n associated with class, not instance n Instance variables n declared within class n associated with instance n accessible throughout object, lifetime of object n Local variables n declared within method n accessible throughout method, lifetime of method n Parameters n declared in parameter list of method n acessible throughout method, lifetime of method

55 Variable Types class: Giraffe getGiraffeCount() int numGiraffes object: Giraffe1 sayHowTall() int neckLength yell(String message) int volume object: Giraffe2 int neckLength sayHowTall() yell(String message) int volume n Static? Instance? Local? Parameters?

56 Questions?