Title: Using Objects
1Using Objects
- Chapter 3
- Fall 2006
- CS 101
- Aaron Bloomfield
2Getting classy
- Purpose of this chapter
- Gain experience creating and manipulating objects
from the standard Java types - Why
- Prepares you for defining your own classes and
creating and manipulating the objects of those
classes
3Values versus objects
- Numbers
- Have values but they do not have behaviors
- In particular, each has only ONE value (or
attribute) - Objects
- Have attributes and behaviors
- An object can have multiple values (or attributes)
4Using objects
- First, we create an object
- Scanner stdin new Scanner (System.in)
- Most object creation lines look like this
- Then we use the object
- stdin.nextInt()
- stdin.nextDouble()
- Note that we could have called the object foo,
bar, or anything - stdin is just what we chose to call it
5Using Rectangle objects
- Lets create some Rectangle objects
- Rectangle creation
- Rectangle r new Rectangle (10, 20)
- Objects have attributes (or properties)
- System.out.println (r.width)
- System.out.println (r.height)
- Objects have behaviors (or methods)
- r.grow (10, 20)
- r.isEmpty()
- r.setLocation (5,4)
6Using String objects
- Lets create some String objects
- String creation
- String s new String (Hello world)
- Objects have attributes (or properties)
- But we cant access them
- Objects have behaviors (or methods)
- s.substring(0,6)
- s.indexOf (world)
- s.toLowerCase()
7The lowdown on objects
- Objects are things that have properties
(attributes) and behaviors (methods) - We first create one or more objects
- We then manipulate their properties and call
their methods
8So why bother with objects?
- Lets say you want to do a lot of String
manipulation - Once you create a String object, all the
manipulation methods are contained therein - Sun already wrote the methods for us
- So we can use String objects instead of writing
our own code to get the substring, indexOf, etc.
9More on Strings
- Strings are used very often
- As a shortcut, you can use
- String s Hello world
- instead of
- String s new String (Hello world)
- Its just a shortcut that Java allows
- The two lines are almost the same
- There is a minor difference between the two
- Which well get to later
10Visualizing objects
- Class (type) name
- Attributes (properties)
- Methods (behaviors)
11How well do we understand using objects?
12For Valentines Day
13Bittersweets Dejected sayings
- I MISS MY EX
- PEAKED AT 17
- MAIL ORDER
- TABLE FOR 1
- I CRY ON Q
- U C MY BLOG?
- REJECT PILE
- PILLOW HUGGIN
- ASYLUM BOUND
- DIGNITY FREE
- PROG FAN
- STATIC CLING
- WE HAD PLANS
- XANADU 2NITE
- SETTLE 4LESS
- NOT AGAIN
14Bittersweets Dysfunctional sayings
- RUMORS TRUE
- PRENUP OKAY?
- HE CAN LISTEN
- GAME ON TV
- CALL A 900
- P.S. I LUV ME
- DO MY DISHES
- UWATCH CMT
- PAROLE IS UP!
- BE MY YOKO
- UMEGRIEF
- I WANT HALF
- RETURN 2 PIT
- NOT MY MOMMY
- BE MY PRISON
- C THAT DOOR?
15Review
- Variables of primitive types
- int, double, char, boolean, etc.
- Can assign a value to it
- Can read a value from it
- Cant do much else!
- Objects
- String, Rectangle, etc.
- Have many parts
- Rectangle has width, length, etc.
- Like a complex type
- Have methods
- String has length(), substring(), etc.
16String methods
- length() returns the Strings length (duh!)
- String s hello world
- String t goodbye
- System.out.println (s.length())
- System.out.println (t.length())
- Prints 11 and 7
- Note that calling s.length() is different than
calling t.length()! - Both return the length
- But of different Strings
17More String methods
- Consider
- String weddingDate "August 21, 1976"
- String month weddingDate.substring(0, 6)
- System.out.println("Month is " month ".")
- What is the output?
- Month is August.
18More String methods
- Consider
- String fruit "banana"
- String searchString "an"
- int n1 fruit.indexOf(searchString, 0)
- int n2 fruit.indexOf(searchString, n1 1)
- int n3 fruit.indexOf(searchString, n2 1)
- System.out.println("First search " n1)
- System.out.println("Second search " n2)
- System.out.println("Third search " n3)
- What is the output?
- First search 1
- Second search 3
- Third search -1
19End of lecture on 6 September 2006
20String program examples
21Program WordLength.java
- public class WordLength
-
- public static void main(String args)
- Scanner stdin new Scanner(System.in)
-
- System.out.print("Enter a word ")
- String word stdin.next()
-
- int wordLength word.length()
-
- System.out.println("Word " word " has
length " - wordLength ".")
-
22Program demo
23More String methods
- trim()
- Returns the String without leading and trailing
whitespace - Whitespace is a space, tab, or return
24Date translation
- Goal to translate the date from American format
to standard format
25DateTranslation.java
- // Convert user-specified date from American to
standard format -
- import java.util.
-
- class DateTranslation
-
- // main() application entry point
- static public void main(String args)
- // produce a legend (Step 1)
- // prompt the user for a date in American
format (Step 2) - // acquire the input entered by the user (Step
3) - // echo the input back (Step 4)
- // get month entered by the user (Step 5)
- // get day entered by the user (Step 6)
- // get year entered by the user (Step 7)
- // create standard format version of input
(Step 8) - // display the translation (Step 9)
-
-
26Program demo
27Todays demotivators
28Classes vs. Objects
29Variables vs. Types
- The type is the recipe or template for how to
create a variable - Examples int, double, char, boolean, etc.
- There are only 8 primitive types
- There are only a few things you can do with a
type - Declare a variable
- int x
- Use it as a cast
- x (int) 3.5
- There is only one of each type
- The variable is the actual instance of a type in
memory - Its a spot in memory where you store a value
- You choose the name width, x, thatThemThereValue,
etc. - You can have as may variables as you want but
only one type! - Like the difference between a recipe and a bunch
of cookies
30How well do we understand variables versus types?
31Classes vs. Objects
- A class is a user-defined thing
- Examples String, Scanner, Rectangle, etc.
- Well start defining our own classes later this
semester - Classes are more complex than the primitive types
- A class is analogous to a type
- Its just more complex and user-defined
- There can be only one class of each name
- An object is an instance of a class
- There is only one String class, but you can have
100 String objects - A object is analogous to a variable
- It just is a reference instead
- A class is a template used for creating objects
32More on classes vs. objects
33How well do we understand classes versus objects?
34Lots of piercings
- This may be a bit disturbing
35References
36Java and variables
- Consider
- int x 7
- double d
- char c x
- The variable name is the actual spot in memory
where the value is stored - Note that d does not have a value
37What is a reference
- A reference is a memory address
- References are like pointers in C/C
- But they are not the exact same thing!
- C has references also (in addition to pointers)
- You may hear me call them pointers instead of
references - All objects in Java are declared as references
38References 1
- Consider
- int j 5
- String s Hello world
- Java translates that last line into
- String s new String (Hello world)
- (Not really, but close enough for now)
Note that there is no new here
39References 2
- Whats happening in memory
- int j 5
- String s Hello world
- Primitive types are never references only objects
- int j 5
- String s Hello world
String s
Takes up 32 bits (4 bytes) of memory
Takes up 32 bits (4 bytes) of memory
At memory location 0x0d4fe1a8
Takes up ?12 bytes of memory
40Representation
- Statements
- int peasPerPod 8
- String message "Don't look behind the door!
41Representation
String s I love CS 101 int l
s.length() char c s.charAt (3) String t
s.subString(1,2) int t s.indexOf (t, 0)
A period means follow the reference
42Shorthand represntation
- ConsiderString s Hello world
- Takes up a lot of space on my slides
- So well use a shorthand representation
43Examples
- Consider
- String a "excellence
- String b a
- What is the representation?
44End of lecture on 11 September 2006
45References 3
- Consider
- String s1 first string
- String s2 second string
- s2 s1
- System.out.println (s2)
- String s1 first string
- String s2 second string
- s2 s1
- System.out.println (s2)
What happens to this?
46Javas garbage collection
- If an object in memory does not have a reference
pointing to it, Java will automagically delete
the object - This is really cool!
- In C/C, you had to do this by yourself
47An optical illusion
48The null reference
49Uninitialized versus null
- Consider
- String dayOfWeek
- Scanner inStream
- What is the representation?
50Uninitialized versus null
- Consider
- String fontName null
- Scanner fileStream null
- What is the representation?
OR
51The null reference
- Sometimes you want a reference to point to
nothing - Use the null reference
- String s null
- The null reference is equivalent to a memory
address of zero (0x00000000) - No user program can exist there
52The null reference
- Consider
- String s Hello world
- System.out.println (s.length())
- What happens?
- Java prints out 11
53The null reference
- Consider
- String s null
- System.out.println (s.length())
- This is called accessing (or following) a null
pointer/reference - What happens?
- Java java.lang.NullPointerException
- C/C Segmentation fault (core dumped)
- Windows
54What happens in Windows
55So what is a null reference good for?
- Lets say you had a method that returned a String
when passed some parameters - Normally it returns a valid String
- But what if it cant? How to deal with that?
- Return a null reference
56References and memory
- Most modern computers are 32-bit computers
- This means that a reference takes up 32 bits
- 232 4 Gb
- This means that a 32-bit machine cannot access
more than 4 Gb of memory! - Well, without doing some tricks, at least
- Most machines come with 1 Gb memory these days
- Will come with 4 Gb in a year or so
- 64-bit machines will have a maximum of 16
exabytes of memory - Giga, Tera, Peta, Exa
- Thats 16 billion Gb!
57The 2004 Ig Nobel Prizes
- Medicine
- Physics
- Public Health
- Chemistry
- Engineering
- Literature
- Psychology
- Economics
- Peace
- Biology
"The Effect of Country Music on Suicide. For
explaining the dynamics of hula-hooping Investigat
ing the scientific validity of the Five-Second
Rule The Coca-Cola Company of Great Britain For
the patent of the combover The American Nudist
Research Library Its easy to overlook things
even a man in a gorilla suit. The Vatican, for
outsourcing prayers to India The invention of
karaoke, thereby providing an entirely new way
for people to learn to tolerate each other For
showing that herrings apparently communicate by
farting
58Using object examples
59Assignment
- Consider
- String word1 "luminous"
- String word2 "graceful"
- word1 word2
- Initial representation
Garbage collection time!
60Using objects
- Consider
- Scanner stdin new Scanner(System.in)
- System.out.print("Enter your account name ")
- String response stdin.next()
- Suppose the user interaction is
- Enter your account name artiste
61String representation
- Consider
- String alphabet "abcdefghijklmnopqrstuvwxyz"
- Standard shorthand representation
- Truer representation
62String representation
- Consider
- String alphabet "abcdefghijklmnopqrstuvwxyz"
- char c1 alphabet.charAt(9)
- char c2 alphabet.charAt(15)
- char c3 alphabet.charAt(2)
- What are the values of c1, c2, and c3? Why?
63More String methods
- Consider
- int v1 -12
- double v2 3.14
- char v3 'a'
- String s1 String.valueOf(v1)
- String s2 String.valueOf(v2)
- String s3 String.valueOf(v3)
- int v1 -12
- double v2 3.14
- char v3 'a'
- String s1 String.valueOf(v1)
- String s2 String.valueOf(v2)
- String s3 String.valueOf(v3)
64Final variables
- Consider
- final String POEM_TITLE Appearance of Brown"
- final String WARNING Weather ball is black"
- What is the representation?
65Final variables
- Consider
- final String LANGUAGE "Java"
66Todays demotivators
67Rectangle
68Rectangle
- Consider
- final Rectangle BLOCK new Rectangle(6, 9, 4,
2) - BLOCK.setLocation(1, 4)
- BLOCK.resize(8, 3)
- final Rectangle BLOCK new Rectangle(6, 9, 4,
2) - BLOCK.setLocation(1, 4)
- BLOCK.resize(8, 3)
69String method usage
- Consider
- String s "Halloween"
- String t "Groundhog Day"
- String u "May Day"
- String v s.substring(0,6)
- int x t.indexOf ("Day", 0)
- int y u.indexOf ("Day")
- s t
- u null
- String s "Halloween"
- String t "Groundhog Day"
- String u "May Day"
- String v s.substring(0,6)
- int x t.indexOf ("Day", 0)
- int y u.indexOf ("Day")
- s t
- u null
70String method usage
- Consider
- String s "Halloween"
- String t "Groundhog Day"
- final String u "May Day"
- String v s.substring(0,6)
- int x t.indexOf ("Day", 0)
- int y u.indexOf ("Day")
- s t
- u null
Java error cannot assign a value to final
variable u
71Rectangle method usage
- Consider
- Rectangle r new Rectangle()
- final Rectangle s new
- Rectangle (3, 4, 1, 2)
- r.setWidth(5)
- r.setHeight(6)
- s.setWidth (7)
- r new Rectangle (10,11,8,9)
- s new Rectangle (12,13,14,15)
- Rectangle r new Rectangle()
- final Rectangle s new
- Rectangle (3, 4, 1, 2)
- r.setWidth(5)
- r.setHeight(6)
- s.setWidth (7)
- r new Rectangle (10,11,8,9)
- s new Rectangle (12,13,14,15)
72Scanner review
- To initialize a Scanner object
- Scanner stdin new Scanner (System.in)
- Scanner stdin Scanner.create (System.in)
- This one will not work!
- To read an int from the keyboard
- stdin.nextInt()
- To read a double from the keyboard
- stdin.nextDouble()
- To read a String from the keyboard
- stdin.next()
73Scanner usage examples
- Consider
- Scanner stdin new Scanner (System.in)
- int x stdin.nextInt()
- double d stdin.nextDouble()
- String s stdin.next()
- Scanner stdin new Scanner (System.in)
- int x stdin.nextInt()
- double d stdin.nextDouble()
- String s stdin.next()
74Beware!!!
75End of lecture on 13 September 2006
76Overloading
77Overloading
- Consider the operator
- It can mean integer addition 35 8
- It can mean floating-point addition 3.05.0
8.0 - It can mean string concatenation foo bar
foobar - The operator has multiple things it can do
- a.k.a. the operator is overloaded
78More on overloading
- Weve seen a number of methods
- In the String class substring(), charAt(),
indexOf(), etc. - In the Rectangle class setLocation(),
translate() - Consider the substring() method in the String
class - One version s.substring(3)
- This will return a string from the 4th character
on - Another version s.substring (3,6)
- This version will return a string from the
character at index 3 up to (but not including!)
the character at index 6 - There are multiple versions of the same method
- Differentiated by their parameter list
- The substring method can take one OR two
parameters - This is called overloading
79More on more on overloading
- Consider the valueOf() method in the String class
- String.valueOf (3)
- The parameter is an int
- String.valueOf (3.5)
- The parameter is a double
- String.valueOf (3)
- The parameter is a char
- There are multiple versions of this method
- Differentiated by their parameter list
- Thus, the valueOf() method is overloaded
80More on methods
81Accessors
- Some methods allow us to find out information
about an object - In the Rectangle class getWidth(), getHeight()
- These methods are called accessors
- They allow us to access attributes of the object
- An accessor is a method that allows us to find
out attributes of object - Usually start with get in the method name
- I wont use this terminology much, but the book
uses it
82Mutators
- Some methods allow us to set information about
the object - In the Rectangle class setLocation(),
setBounds() - These methods are called mutators
- They allow us to change (or mutate) the
attributes of an object - A mutator is a method that allows us to set
attributes of object - Usually start with set in the method name
- I wont use this terminology much, but the book
uses it
83Constructors
- A constructor is a special method called ONLY
when you are creating (or constructing) and
object - The name of the constructor is ALWAYS the exact
same name as the class - Scanner stdin new Scanner (System.in)
- String foo new String (hello world)
- There can be overloaded constructors
- Rectangle r new Rectangle()
- Rectangle s new Rectangle (1, 2, 3, 4)
84Calling the Circle constructor
- To create a Circle object
- Circle c1 new Circle()
- This does four things
- Creates the c1 reference
- Creates the Circle object
- Makes the c1 reference point to the Circle
object - Calls the constructor with noparameters (the
default constructor) - The constructor is always the first method called
when creating (or constructing) an object
85Calling the Circle constructor
- To create a Circle object
- Circle c1 new Circle(2.0)
- This does four things
- Creates the c1 reference
- Creates the Circle object
- Makes the c1 reference point to the Circle
object - Calls the constructor with 1double parameters
(the specificconstructor) - The constructor is always the first method called
when creating (or constructing) an object
86Constructor varieties
- The default constructor usually sets the
attributes of an object to default values - But thats not why its called default (well get
to that later) - The default constructor ALWAYS takes in zero
parameters - Thus, there can be only one
- A specific constructor sets the attributes of the
object to the passed values - Well get to why its called a specific
constructor later - The specific constructor takes in one or more
parameters - There can be more than one (via overloading)
87Method types review
- With the exception of constructors, these names
are purely for human categorization - Accessor allows one to access parts of the
object - Mutator allows one to change (mutate) a part of
an object - Constructor used to create a object
- Default constructor takes in no parameters
- Specific constructor takes in one or more
parameters - Facilitator
- Any method that is not one of the above
88Todays demotivators
89Java documentation
90Java documentation
91Java packages
- Group similar classes together
- Packages we will use
- java.lang automatically imported by Java
- Contains the clases needed by the Java language
- java.util contains Scanner, Vector, etc.
- Contains various utility classes
- java.text we will use it later in the semester
- Contains classes used to manipulate text
- Any package (other than java.lang) must be
imported to use the classes within it
92Not going over remaining slides in this set
93Example last semesters HW J2
94Last semesters HW J2
- Found online at http//www.cs.virginia.edu/asb/te
aching/cs101-fall05/hws/hwj2/index.html - The HW listed 10 steps to be performed
- Used the StringBuffer class
- Which can be found at http//java.sun.com/j2se/1.5
.0/docs/api/java/lang/StringBuffer.html - Strings are immutable
- Meaning that once you create a String, you can
never change it - There are no mutator methods
- You can change what the String reference points
to, but not the String itself
95Preliminaries
- import java.util.
- public class StringBufferManipulator
- public static void main (String args)
- // Preliminaries
- System.out.println ("StringBuffer
manipulator\n") - Scanner stdin new Scanner (System.in)
- // Code for steps 1 to 10 will go here
-
96Step 1
- The user needs to enter two strings one long
string (say, 10 or so characters at a minimum)
and a shorter string that is contained within the
longer string. - This input should be obtained via the nextLine()
method, as using the next() method will not read
in a string that contains spaces. - // Step 1
- System.out.println ("Enter a long string")
- String longString stdin.nextLine()
- System.out.print ("\nEnter a shorter string
within ) - System.out.println (the long string")
- String shortString stdin.nextLine()
- System.out.println ()
97Step 2
- Create a StringBuffer object from the longer
string -- this is the StringBuffer that you will
manipulate for the rest of the homework. There
are two ways to do this create a default
constructred StringBuffer, and append() the long
string to that, or use the StringBuffer with the
appropriate specific constructor. - // Step 2
- StringBuffer buffer new StringBuffer(longString
)
98Step 3
- Include, as a comment in your program, the code
for creating the StringBuffer in the other way
from step 2. - // Step 3
- // StringBuffer buffer new StringBuffer()
- // buffer.append(longString()
99Step 4
- Find the position of the small string within the
StringBuffer, and save that position. - // Step 4
- int pos buffer.indexOf(shortString)
100These images are not animated
101Step 5
- Delete the small string from the StringBuffer,
and print out the result. - // Step 5
- int shortLength shortString.length()
- buffer.delete (pos, posshortLength)
- System.out.println (buffer)
102Step 6
- Insert "CS101" into the position of the
StringBuffer where the small string was
originally found (from step 3), and print out the
result - // Step 6
- buffer.insert (pos, "CS101")
- System.out.println (buffer)
103Step 7
- Remove the last word from the string. You can
assume that everything from the last space (found
via lastIndexOf()) to the end of the String is
the last word. Print out the result. - // Step 7
- pos buffer.lastIndexOf(" ")
- int bufferLength buffer.length()
- buffer.delete(pos, bufferLength)
- System.out.println (buffer)
104Step 8
- Append " rocks" to the end of the StringBuffer,
and print out the result. Note that there is a
space before the work 'rocks'. - // Step 8
- buffer.append (" rocks")
- System.out.println (buffer)
105Step 9
- Delete the character at position n/2, where n is
the length of the StringBuffer. Print out the
result. - // Step 9
- int n buffer.length()
- buffer.deleteCharAt (n/2)
- System.out.println (buffer)
106Step 10
- Reverse the StringBuffer, and print out the
result. - // Step 10
- buffer.reverse()
- System.out.println (buffer)
107Program demo
- StringBufferManipulator.java