|
|
|
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 |
|
|
|