Download Objects and References

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Catie Welsh
March 2, 2011

Program 3 due tonight by 11:59pm

Lab 5 due Friday by 1pm

Sample Midterm is posted on course website
◦ Solutions will be posted after class on Friday

Midterm is Monday, March 14th
2
3

Objects and references

More on Classes
4




Classes
Objects
Instance variables
Methods
◦ Return types
◦ Parameters and arguments

Information hiding and encapsulation
◦ public/private
◦ accessors/mutators
5

Behave differently from variables of a
primitive type
6

When declaring a variable, a certain amount
of memory is assigned based on the declared
primitive type
int age;
double length;
char letter;

What goes inmemor
this memory?
y
7

A data value is stored in the location assigned
to a variable of a primitive type
8

What goes in these variables?
Student jack;
String inputString;
memor
y
9

Contain the memory address of the object
named by the variable
◦ NOT the object itself




What is an address?
Object is stored in some other location in
memory
The address to this other location is called a
reference to the object
Class types are also called reference types
10
Assume we have a class named Book
Book jacksBook = new Book(“Java”);
Book apusBook = new Book(“Java”);
vs.
Book jacksBook = new Book(“Java”);
Book apusBook = jacksBook;
11
Memory
jacksBook 207
?
8
apusBook ?
?
105
207
6
8
?
1056
?
Java
?
253
?
2078
?
Java
?
137
509
Book jacksBook;
Book apusBook;
jacksBook = new Book(“Java”);
apusBook = new Book(“Java”);
jacksBook.setPage(137);
apusBook.setPage(253);
apusBook = jacksBook;
apusBook.setPage(509);
jacksBook is now on p. 509!
12

Variables of a class type contain memory
addresses
◦ NOT objects themselves
13


String is a class type
What happens when you have
String s1 = new String(“Hello”);
String s2 = new String(“Hello”);
boolean strEqual = (s1 == s2);


strEqual is false! Why?
s1 and s2 store different addresses!
14

What happens when you have
String s1 = new String(“Hello”);
String s2 = new String(“Hello”);
boolean strEqual = (s1.equals(s2));


strEqual is true! Why?
String’s .equals() method checks if all the
characters in the two Strings are the same
15
public class Book
{
private String name;
private int page;
public boolean equals(Book book)
{
return (this.name.equals(book.name) &&
this.page == book.page);
}
}
16

Every class has a default .equals() method if
it is not explicitly written
◦ Does not necessarily do what you want

You decide what it means for two objects of
a specific class type to be considered equal
◦ Perhaps books are equal if the names and page
numbers are equal
◦ Perhaps only if the names are equal
◦ Put this logic inside .equals() method
17
public void increaseNum(int num)
{
num++;
}
public void doStuff()
{
int x = 5;
increaseNum(x);
System.out.println(x);
}


Prints 5. Why?
num is local to increaseNum method; does not
change x
18
public void changeBook(Book book)
{
book = new Book(“Biology”);
}
public void doStuff()
{
Book jacksBook = new Book(“Java”);
changeBook(jacksBook);
System.out.println(jacksBook.getName());
}


Prints Java. Why?
book is local to changeBook, does not change jacksBook
19
public void changeBook(Book book)
{
book.setName(“Biology”);
}
public void doStuff()
{
Book jacksBook = new Book(“Java”);
changeBook(jacksBook);
System.out.println(jacksBook.getName());
}


Prints Biology. Why?
book contains the same address as jacksBook!
20

Write a bank account class for Harry Potter

It needs to have the ability to track
◦
◦
◦
◦
#
#
#
3
of galleons
of sickles
of knuts
transaction types
 Deposit
 Withdrawal
 Inquiry
21
Would you like to make a transaction? y/n
y
Would you like to make a deposit (d), withdrawal (w), or inquire (i)?
d
How many galleons, sickles, and knuts would you like to deposit?
Galleons: 5
Sickles: 6
Knuts: 4
Would you like to make a transaction? y/n
y
Would you like to make a deposit (d), withdrawal (w), or inquire (i)?
w
How many galleons, sickles, and knuts would you like to withdrawal?
Galleons: 4
Sickles: 0
Knuts: 0
Would you like to make a transaction? y/n
y
Would you like to make a deposit (d), withdrawal (w), or inquire (i)?
i
You now have:
1 galleons
6 sickles
4 knuts
22

What are instance variables?

Why private?

What are the instance variables for our bank
account program?
◦ What do we need to keep track of?
23
public class Account
{
private int galleons = 0;
private int sickles = 0;
private int knuts = 0;
24



getGalleons: int
getSickles: int
getKnuts: int



setGalleons(int)
setSickles(int)
setKnuts(int)
25
public static void main(String[] args)
{
Account potter = new Account();
.
.
.
potter.deposit(5, 7, 9);
public void deposit(int g, int s, int k)
{
galleons+=g;
sickles+=s;
knuts+=k;
}
26
public static void main(String[] args)
{
Account potter = new Account();
.
.
.
potter.withdrawal(5, 7, 9);
public void withdrawal(int g, int s, int k)
{
if((g > galleons) || (s > sickles) || (k >
knuts))
{
System.out.println("You do not
have enough money");
}
else
{
galleons -= g;
sickles -= s;
knuts -= k;
}
}
27
public static void main(String[] args)
{
Account potter = new Account();
.
.
.
potter.inquire();
public void inquire()
{
System.out.println("You now
have: " + galleons + " galleons
" + sickles + " sickles " + knuts
+ " knuts");
}
28

Midterm Review

Bring questions about the Sample Midterm
29