Survey
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
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