Representing information: binary, hex, ascii Corresponding Reading

advertisement
UNDERSTANDING CLASSES
CMSC 150: Lecture 17
String Literals

"Wilco"

String literal: a sequence of characters flanked by "

Want to operate on the sequence
 E.g.,

pull out substrings, locate characters, etc.
No primitive data type directly handles such
sequences
Primitives

Primitives are only for storing information
 int
myInteger
= 5;
 boolean myBoolean
= true;
 char
myCharacter = 'c';

No associated methods
 myInteger.getValue();

// NOT VALID!!
So a primitive type to hold strings wouldn't help
Let's Write Our Own Class!
public class String
{
// instance variables
private char[] data;
// constructor
public String(char[] value)
{ … }
// some useful methods
public char
charAt(int index) { … }
public int
indexOf(char ch)
{ … }
public String substring(int beginIndex) { … }
…
}
Our String Class


We now have a new class named String
 Stores data
 Provides useful methods
Create new objects of this class type:
String myString = new String("Wilco");
String ourString = new String("Son Volt");

Use methods we wrote:
int index = ourString.indexOf(' ');
String firstWord = ourString.substring(0, index);
Use String Class in Other Classes
public class FancyEmailReader {
…
public FancyEmailReader()
{
…
String userHost = accountField.getText();
int index = userHost.indexOf('@');
String user = userHost.substring(0, index);
String host = userHost.substring(index + 1);
…
}
}
In Memory

String myString;
127
"myString" 128

Enough space to hold a
memory address
129
130
131
132
0
In Memory


String myString;
myString =
new String("Wilco");
127
"myString" 128
129

Enough space to hold an
object of our class type
130
131
132
130
In Memory


String myString;
myString =
new String("Wilco");
127
"myString" 128
Data
129
130
131
132
130
In Memory


String myString;
myString =
new String("Wilco");
127
"myString" 128
129
Methods
130
131
132
130
The String Class

Gives us a new data type

Allows us to meaningfully store info
And have methods to operate on that info

Use String whenever it is useful

Back to Last Lab…
public class IMClient {
…
String lineFromServer = connection.in.nextLine()
…
}

linefromServer contains info like
"IM_IN2:Lilly:T:T:<HTML><BODY>…"
Back to Last Lab…
public class IMClient {
…
String lineFromServer = connection.in.nextLine()
…
}



linefromServer contains info like
"IM_IN2:Lilly:T:T:<HTML><BODY>…"
Want methods to pull out buddy, status, msg
String class doesn't provide such methods
Let's Write Our Own!
public class TOCServerPacket {
String contents;
public TOCServerPacket(String packetContents) { … }
public boolean isError()
{ … }
public boolean isBuddyUpdate() { … }
public boolean isIncomingIM() { … }
public
public
public
public
String
String
String
String
getBuddyName()
getBuddyStatus()
getErrorCode()
getMessage()
{
{
{
{
…
…
…
…
}
}
}
}
private String getPrefix(String uncutPacket) { … }
private String getSuffix(String uncutPacket, int colonNumber) { … }
}
Let's Write Our Own!
public class TOCServerPacket {
String contents;
public TOCServerPacket(String packetContents) { … }
public boolean isError()
{ … }
public boolean isBuddyUpdate() { … }
public boolean isIncomingIM() { … }
public
public
public
public
String
String
String
String
getBuddyName()
getBuddyStatus()
getErrorCode()
getMessage()
{
{
{
{
…
…
…
…
}
}
}
}
private String getPrefix(String uncutPacket) { … }
private String getSuffix(String uncutPacket, int colonNumber) { … }
}
Similar to the String Class
class gives us a new data type

TocServerPacket

Allows us to meaningfully store info
 The

And have methods to operate on that info


String returned from the server
isIncomingIM(), getBuddyName(), getBuddyStatus()
Use TocServerPacket whenever it is useful
Use TOCServerPacket in Other Classes
public class IMControl {
…
public void dataAvailable()
{
…
String lineFromServer = connection.in.nextPacket();
// get the buddy name
int firstIndex = lineFromServer.indexOf(':');
int secondIndex = lineFromServer.indexOf(':', firstIndex + 1);
String buddy =
lineFromServer.substring(firstIndex + 1, secondIndex);
// pull out message
while ( … ) { … }
}
}
Use TOCServerPacket in Other Classes
public class IMControl {
…
Use a TOCServerPacket!
public void dataAvailable()
{
…
String lineFromServer = connection.in.nextPacket();
// get the buddy name
int firstIndex = lineFromServer.indexOf(':');
int secondIndex = lineFromServer.indexOf(':', firstIndex + 1);
String buddy =
lineFromServer.substring(firstIndex + 1, secondIndex);
// pull out message
while ( … ) { … }
}
}
Use TOCServerPacket in Other Classes
public class IMControl {
…
Use a TOCServerPacket!
public void dataAvailable()
{
…
String lineFromServer = connection.in.nextPacket();
TOCServerPacket packet =
new TOCServerPacket(lineFromServer);
String buddy = packet.getBuddyName();
String message = packet.getMessage();
}
}
In Memory

String line =
conn.in.nextPacket();

TOCServerPacket packet;
127
"packet"
128
129

Enough space to hold a memory
address
130
131
132
0
In Memory

String line =
conn.in.nextPacket();

TOCServerPacket packet;
127

packet = new
TOCServerPacket(lineFromServer);
"packet"
128
129
130
131
132
130
In Memory

String line =
conn.in.nextPacket();

TOCServerPacket packet;
127

packet = new
TOCServerPacket(lineFromServer);
"packet"
128
Data
129
130
131
132
130
In Memory

String line =
conn.in.nextPacket();

TOCServerPacket packet;
127

packet = new
TOCServerPacket(lineFromServer);
"packet"
128
129
Methods
130
131
132
130
Your tour guide will be…
Download