Chapter 2: Objects and Primitive Data
| Presentation slides for | |
| Java Software Solutions | |
| Foundations of Program Design | |
| Third Edition | |
| by John Lewis and William Loftus | |
| Java Software Solutions is published by Addison-Wesley | |
| Presentation slides are copyright 2002 by John Lewis and William Loftus. All rights reserved. | |
| Instructors using the textbook may use and modify these slides for pedagogical purposes. | |
| Now we can explore some more fundamental programming concepts | ||
| Chapter 2 focuses on: | ||
| predefined objects | ||
| primitive data | ||
| the declaration and use of variables | ||
| expressions and operator precedence | ||
| creating and using objects | ||
| class libraries | ||
| Java applets | ||
| drawing shapes | ||
| An object represents something with which we can interact in a program | |
| An object provides a collection of services that we can tell it to perform for us | |
| The services are defined by methods in a class that defines the object | |
| A class represents a concept, and an object represents the embodiment of a class | |
| A class can be used to create multiple objects |
| One class can be used to derive another via inheritance | |
| Classes can be organized into inheritance hierarchies |
| The System.out object represents a destination to which we can send output | |
| In the Lincoln program, we invoked the println method of the System.out object: | |
| The System.out object provides another service as well | |
| The print method is similar to the println method, except that it does not advance to the next line | |
| Therefore anything printed after a print statement will appear on the same line | |
| See Countdown.java (page 65) |
| An abstraction hides (or suppresses) the right details at the right time | |
| An object is abstract in that we don't have to think about its internal details in order to use it | |
| For example, we don't have to know how the println method works in order to invoke it | |
| A human being can manage only seven (plus or minus 2) pieces of information at one time | |
| But if we group information into chunks (such as objects) we can manage many complicated pieces at once | |
| Classes and objects help us write complex software | |
| Every character string is an object in Java, defined by the String class | |
| Every string literal, delimited by double quotation marks, represents a String object | |
| The string concatenation operator (+) is used to append one string to the end of another | |
| It can also be used to append a number to a string | |
| A string literal cannot be broken across two lines in a program | |
| See Facts.java (page 68) |
| The plus operator (+) is also used for arithmetic addition | |
| The function that the + operator performs depends on the type of the information on which it operates | |
| If both operands are strings, or if one is a string and one is a number, it performs string concatenation | |
| If both operands are numeric, it adds them | |
| The + operator is evaluated left to right | |
| Parentheses can be used to force the operation order | |
| See Addition.java (page 70) |
| What if we wanted to print a double quote character? | |
| The following line would confuse the compiler because it would interpret the second quote as the end of the string | |
| System.out.println ("I said "Hello" to you."); | |
| An escape sequence is a series of characters that represents a special character | |
| An escape sequence begins with a backslash character (\), which indicates that the character(s) that follow should be treated in a special way | |
| System.out.println ("I said \"Hello\" to you."); | |
| Some Java escape sequences: |
| A variable is a name for a location in memory | |
| A variable must be declared by specifying the variable's name and the type of information that it will hold |
| A variable can be given an initial value in the declaration |
| An assignment statement changes the value of a variable | |
| The assignment operator is the = sign |
| A constant is an identifier that is similar to a variable except that it holds one value while the program is active | |||||
| The compiler will issue an error if you try to change the value of a constant during execution | |||||
| In Java, we use the final modifier to declare a constant | |||||
| final int MIN_HEIGHT = 69; | |||||
| Constants: | |||||
| give names to otherwise unclear literal values | |||||
| facilitate updates of values used throughout a program | |||||
| prevent inadvertent attempts to change a value | |||||
| There are exactly eight primitive data types in Java | ||
| Four of them represent integers: | ||
| byte, short, int, long | ||
| Two of them represent floating point numbers: | ||
| float, double | ||
| One of them represents characters: | ||
| char | ||
| And one of them represents boolean values: | ||
| boolean | ||
| The difference between the various numeric primitive types is their size, and therefore the values they can store: |
| A char variable stores a single character from the Unicode character set | |
| A character set is an ordered list of characters, and each character corresponds to a unique number | |
| The Unicode character set uses sixteen bits per character, allowing for 65,536 unique characters | |
| It is an international character set, containing symbols and characters from many world languages | |
| Character literals are delimited by single quotes: | |
| 'a' 'X' '7' '$' ',' '\n' |
| The ASCII character set is older and smaller than Unicode, but is still quite popular | |
| The ASCII characters are a subset of the Unicode character set, including: |
| A boolean value represents a true or false condition | |
| A boolean also can be used to represent any two states, such as a light bulb being on or off | |
| The reserved words true and false are the only valid values for a boolean type | |
| boolean done = false; |
| An expression is a combination of one or more operands and their operators | |
| Arithmetic expressions compute numeric results and make use of the arithmetic operators: |
| If both operands to the division operator (/) are integers, the result is an integer (the fractional part is discarded) |
| Operators can be combined into complex expressions | |
| result = total + count / max - offset; | |
| Operators have a well-defined precedence which determines the order in which they are evaluated | |
| Multiplication, division, and remainder are evaluated prior to addition, subtraction, and string concatenation | |
| Arithmetic operators with the same precedence are evaluated from left to right | |
| Parentheses can be used to force the evaluation order |
| What is the order of evaluation in the following expressions? |
| The assignment operator has a lower precedence than the arithmetic operators |
| The right and left hand sides of an assignment statement can contain the same variable |
| Sometimes it is convenient to convert data from one type to another | |
| For example, we may want to treat an integer as a floating point value during a computation | |
| Conversions must be handled carefully to avoid losing information | |
| Widening conversions are safest because they tend to go from a small data type to a larger one (such as a short to an int) | |
| Narrowing conversions can lose information because they tend to go from a large data type to a smaller one (such as an int to a short) |
| In Java, data conversions can occur in three ways: | ||
| assignment conversion | ||
| arithmetic promotion | ||
| casting | ||
| Assignment conversion occurs when a value of one type is assigned to a variable of another | ||
| Only widening conversions can happen via assignment | ||
| Arithmetic promotion happens automatically when operators in expressions convert their operands | ||
| Casting is the most powerful, and dangerous, technique for conversion | ||
| Both widening and narrowing conversions can be accomplished by explicitly casting a value | ||
| To cast, the type is put in parentheses in front of the value being converted | ||
| For example, if total and count are integers, but we want a floating point result when dividing them, we can cast total: | ||
| result = (float) total / count; | ||
| A variable holds either a primitive type or a reference to an object | |
| A class name can be used as a type to declare an object reference variable | |
| String title; | |
| No object is created with this declaration | |
| An object reference variable holds the address of an object | |
| The object itself must be created separately |
| Generally, we use the new operator to create an object |
| Because strings are so common, we don't have to use the new operator to create a String object | |
| title = "Java Software Solutions"; | |
| This is special syntax that works only for strings | |
| Once an object has been instantiated, we can use the dot operator to invoke its methods | |
| title.length() |
| The String class has several methods that are useful for manipulating strings | |
| Many of the methods return a value, such as an integer or a new String object | |
| See the list of String methods on page 89 and in Appendix M | |
| See StringMutation.java (page 90) | |
| A class library is a collection of classes that we can use when developing programs | |
| The Java standard class library is part of any Java development environment | |
| Its classes are not part of the Java language per se, but we rely on them heavily | |
| The System class and the String class are part of the Java standard class library | |
| Other class libraries can be obtained through third party vendors, or you can create them yourself |
| The classes of the Java standard class library are organized into packages | |
| Some of the packages in the standard class library are: |
| When you want to use a class from a package, you could use its fully qualified name | |
| java.util.Random | |
| Or you can import the class, and then use just the class name | |
| import java.util.Random; | |
| To import all classes in a particular package, you can use the * wildcard character | |
| import java.util.*; | |
| All classes of the java.lang package are imported automatically into all programs | |
| That's why we didn't have to import the System or String classes explicitly in earlier programs | |
| The Random class is part of the java.util package | |
| It provides methods that generate pseudorandom numbers | |
| See RandomNumbers.java (page 97) |
| Some methods can be invoked through the class name, instead of through an object of the class | |
| These methods are called class methods or static methods | |
| The Math class contains many static methods, providing various mathematical functions, such as absolute value, trigonometry functions, square root, etc. | |
| temp = Math.cos(90) + Math.sqrt(delta); | |
| The Keyboard class is NOT part of the Java standard class library | |
| It is provided by the authors of the textbook to make reading input from the keyboard easy | |
| Details of the Keyboard class are explored in Chapter 5 | |
| The Keyboard class is part of a package called cs1 | |
| It contains several static methods for reading particular types of data | |
| See Echo.java (page 101) | |
| See Quadratic.java (page 102) | |
| The NumberFormat class has static methods that return a formatter object | |
| getCurrencyInstance() | |
| getPercentInstance() | |
| Each formatter object has a method called format that returns a string with the specified information in the appropriate format | |
| See Price.java (page 104) |
| The DecimalFormat class can be used to format a floating point value in generic ways | |
| For example, you can specify that the number should be printed to three decimal places | |
| The constructor of the DecimalFormat class takes a string that represents a pattern for the formatted number | |
| See CircleStats.java (page 107) |
| A Java application is a stand-alone program with a main method (like the ones we've seen so far) | |
| A Java applet is a program that is intended to transported over the Web and executed using a web browser | |
| An applet also can be executed using the appletviewer tool of the Java Software Development Kit | |
| An applet doesn't have a main method | |
| Instead, there are several special methods that serve specific purposes | |
| The paint method, for instance, is executed automatically and is used to draw the applet’s contents | |
| The paint method accepts a parameter that is an object of the Graphics class | |
| A Graphics object defines a graphics context on which we can draw shapes and text | |
| The Graphics class has several methods for drawing shapes |
| The class that defines an applet extends the Applet class | |
| This makes use of inheritance, which is explored in more detail in Chapter 7 | |
| See Einstein.java (page 109) | |
| An applet is embedded into an HTML file using a tag that references the bytecode file of the applet class | |
| The bytecode version of the program is transported across the web and executed by a Java interpreter that is part of the browser | |
| Let's explore some of the methods of the Graphics class that draw shapes in more detail | |
| A shape can be filled or unfilled, depending on which method is invoked | |
| The method parameters specify coordinates and sizes | |
| Recall from Chapter 1 that the Java coordinate system has the origin in the top left corner | |
| Shapes with curves, like an oval, are usually drawn by specifying the shape’s bounding rectangle | |
| An arc can be thought of as a section of an oval |
| A color is defined in a Java program using an object created from the Color class | |
| The Color class also contains several static predefined colors, including: |
| Every drawing surface has a background color | |
| Every graphics context has a current foreground color | |
| Both can be set explicitly | |
| See Snowman.java (page115) | |
| Chapter 2 has focused on: | ||
| predefined objects | ||
| primitive data | ||
| the declaration and use of variables | ||
| expressions and operator precedence | ||
| creating and using objects | ||
| class libraries | ||
| Java applets | ||
| drawing shapes | ||