Download Class basics

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
Using Objects
CS 101-E
Aaron Bloomfield
Announcements



Midterm 1 is a week from this Wednesday
TESTS ARE IN CHM 402!!!!!!!!
Schedule:
This week: chapter 3
 Next Monday: review for midterm



Homework done via CodeLab


Bring in questions!!!!
Use code VIRGIN-7592-1043
There is a lab due this week
Warn your grandparents!

Historically, this class has been lethal to
grandparents of students in the class


More often grandmothers
This happens most around test time

Although occasionally around the times a big
assignment is due
What is a reference

References are like pointers in C/C++
But they are not the exact same thing!
 C++ has references also (in addition to pointers)


A reference is a memory address
References 1

Consider:
int j = 5;
String s = “Hello world”;

Note that there is
no “new” here
Java translates that last line into:
String s = new String (“Hello world”);
References 2

What’s happening in memory
Takes up 32 bits
(4 bytes) of memory
String s
int j
Takes up 32 bits
(4 bytes) of memory
5
Takes up 12
bytes of memory

Hello world
Primitive types are never references; only objects
References 3

Consider our Circle class
Circle c = new Circle();
Declares a reference Creates a new Circle object in memory;
to a Circle object
Returns a reference to it
Circle c
0x0d4fe1a8
At memory location
0x0d4fe1a8
radius = 1.0
Pi = 3.1415926536
References 4

Consider:
Circle c1 = new Circle();
Circle c2 = new Circle();
c1.radius = 5;
c2 = c1;
c2.radius = 7;
System.out.println (c1.radius);
What happens
to this?
Circle c1
radius = 5.0
7.0
1.0
radius = 1.0
Circle c2
Pi = 3.1415926536
Pi = 3.1415926536
Java’s 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
References and memory

Most modern computers are 32-bit computers



This means that a 32-bit machine cannot access more
than 4 Gb of memory!




This means that a reference takes up 32 bits
232 = 4 Gb
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 16 exabytes of memory


Giga, Tera, Peta, Exa
That’s 16 billion Gb!
The null reference

Sometimes you want a reference to point to
nothing

Use the null reference:
Circle c = null;

The null reference is equivalent to a memory
address of zero (0x00000000)

No user program can exist there
The null reference

Consider:
Circle c = null;
c.radius = 0.0;

What happens?
What happens in Windows…
The null reference

Consider:
Circle c = null;
c.radius = 0.0;

This is called accessing (or following) a null
pointer/reference

What happens?
Java: java.lang.NullPointerException
 C/C++: Segmentation fault (core dumped)

So what is a null reference good
for?

Let’s say you had a method that returned a Circle
when passed some parameters

Normally it returns a valid Circle

But what if it can’t? How to deal with that?

Return a null reference
A bit of humor…
Variable initialization

Recall that Java will NOT initialize a variable in a
method
But it does initialize a field of a class

Consider:

String s;



If s is a variable in a method, it is not initialized
If s is a field in a class, it is initialized to null
Save yourself the hassle, and always initialize your
variables and fields
Getting classy

Your current job


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
Values versus objects

Numbers


Objects


Have values but they do not have behaviors
Have attributes (fields) and behaviors (methods)
System.in

References an InputStream



Attribute: keyboard
Behaviors: reading
System.out

References an OutputStream


Attribute: monitor
Behaviors: printing
Other Java object types

String

Rectangle

Color

JFrame
Consider

Statements
int peasPerPod = 8;
String message = "Don't
the door!“

look
How do we represent these
according to the notions of Java?
behind
definitions
A bit of humor…
Representation
peasPerPod
The value of primit ive int
variable peasPerPod is 8
8
message
String
The value of St ring
variable message
is a reference t o a
St ring object
represent ing t he
charact er st ring
"Don't look behind
t he door!"
- text = "Don't look behind the door!"
- length = 27
- ...
+
+
+
+
+
length() : int
charAt(int i) : char
subString(int m, int n) String
indexOf(String s, int m) : int
...
Shorthand representation
peasPerPod
message
8
"Don't look behind the door!"
Examples

Consider
String a = "excellence“;
String b = a;

What is the representation?
a
b
"excellence"
Uninitialized versus null

Consider (in a method):
String dayOfWeek;
Scanner inStream;

What is the representation?
dayOfWeek
-
inStream
-
Uninitialized versus null

Consider (in a class):
String dayOfWeek;
Scanner inStream;

What is the representation?
dayOfWeek
null
inStream
null
Uninitialized versus null

Consider
String fontName = null;
Scanner fileStream = null;

What is the representation?
fontName
null
fileStream
null
Assignment

Consider
String word1 = "luminous";
String word2 = "graceful";
word1 = word2;

Initial representation
word1
"luminous"
word2
"graceful"
Using objects

Consider
Scanner stdin = new Scanner(System.in);
System.out.print("Enter your account name: ");
String response = stdin.nextLine();

Suppose the user interaction is
Enter your account name: artiste
stdin
reponse
Scanner
"artiste"
A bit of humor…
String representation

Consider


String alphabet = "abcdefghijklmnopqrstuvwxyz";
Standard shorthand representation
alphabet

"abcdefghijklmnopqrstuvwxyz"
Truer representation
alphabet
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
y
z
String 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?
c1
'j'
c2
'p'
c3
'c'
Program 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.nextLine();
int wordLength = word.length();
System.out.println("Word " + word + " has length "
+ wordLength + ".");
}
}
More 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.
More String methods

Consider
String
String
int n1
int n2
int n3
fruit = "banana";
searchString = "an";
= fruit.indexOf(searchString, 0);
= fruit.indexOf(searchString, n1 + 1);
= 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
More 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);
s1
"-12"
s2
"3.14"
s3
"a"
Final variables

Consider
final String POEM_TITLE = “Appearance of Brown";
final String WARNING = “Weather ball is black";

What is the representation?
POEM_TITLE
"Appearance of Brown"
WARNING
"Weather ball is black"
The locks indicate the memory location holds constants
Final variables
The reference cannot be
modified once it is established
object
type
constant
In general, these attributes can be
modified through member methods
Value
Rectangle
int x = 3;
int y = 4;
int
width = 5;
int
height = 2;
Rectangle r = new
x
3
y
4
width
5
height
2
The first two parameters of the
Rectangle constructor specify the
position of the upper-left-hand
corner of the new Rectangle
Rectangle(x, y, width, height);
The third and fourth
parameters of the
Rectangle constructor
specify the dimensions of
the new Rectangle
(3, 4)
r
2
Rectangle:
5
Rectangle

Consider
final Rectangle BLOCK = new Rectangle(6, 9, 4, 2);
BLOCK.setLocation(1, 4);
BLOCK.resize(8, 3);
(6, 4)
(1,
9)
BLOCK
2
3
Rectangle:
4
8
Final variables

Consider
final String LANGUAGE = "Java";
The reference cannot be
modified once it is
established
LANGUAGE
The contents are immutable because
there are no String methods that
allow the contents to be changed
"Java"
A bit of humor…
Related documents