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 Fancy Reader { … public Fancy Reader() { … String userHost = accountField.getText(); int index = String user = userHost.substring(0, index); String host = userHost.substring(index + 1); … }
In Memory String myString; Enough space to hold a memory address "myString" 0
In Memory String myString; myString = new String("Wilco"); Enough space to hold an object of our class type "myString" 130
In Memory String myString; myString = new String("Wilco"); "myString" Data 130
In Memory String myString; myString = new String("Wilco"); "myString" Methods 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: …"
Back to Last Lab… public class IMClient { … String lineFromServer = connection.in.nextLine() … } linefromServer contains info like "IM_IN2:Lilly:T:T: …" 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 String getBuddyName() { … } public String getBuddyStatus() { … } public String getErrorCode() { … } public String 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 String getBuddyName() { … } public String getBuddyStatus() { … } public String getErrorCode() { … } public String getMessage() { … } private String getPrefix(String uncutPacket) { … } private String getSuffix(String uncutPacket, int colonNumber) { … } }
Similar to the String Class TocServerPacket class gives us a new data type Allows us to meaningfully store info The String returned from the server And have methods to operate on that info 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 { … 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 a TOCServerPacket !
Use TOCServerPacket in Other Classes public class IMControl { … public void dataAvailable() { … String lineFromServer = connection.in.nextPacket(); TOCServerPacket packet = new TOCServerPacket(lineFromServer); String buddy = packet.getBuddyName(); String message = packet.getMessage(); } Use a TOCServerPacket !
In Memory String line = conn.in.nextPacket(); TOCServerPacket packet; Enough space to hold a memory address "packet" 0
In Memory String line = conn.in.nextPacket(); TOCServerPacket packet; packet = new TOCServerPacket(lineFromServer); "packet"
In Memory String line = conn.in.nextPacket(); TOCServerPacket packet; packet = new TOCServerPacket(lineFromServer); "packet" Data
In Memory String line = conn.in.nextPacket(); TOCServerPacket packet; packet = new TOCServerPacket(lineFromServer); "packet" Methods
Your tour guide will be…