### JAVA^{TM} - The Beginnings

Foreword |
1 |

Terminology |
2 |

The HelloWorld Program |
4 |

Section 1 - Creating and Running the HelloWorld Program | 4 |

Section 2 - Analyzing the HelloWorld Program | 5 |

Short Problems | 6 |

Comments and Indentation |
8 |

Section 1 - Defining Java-style Comments | 8 |

Section 2 - Defining C-style Comments | 9 |

Section 3 - Indentation | 10 |

Short Problems | 12 |

Types |
13 |

Section 1 - Variables | 13 |

Section 2 - Types | 14 |

Section 3 - Primitive Types | 14 |

Section 3a - The Integer Types | 14 |

Section 3b - The Floating Point Types | 16 |

Section 3c - The char Type | 16 |

Section 3d - The boolean Type | 17 |

Section 4 - Strings | 17 |

Short Problems | 17 |

Literals |
17 |

Section 1 - Integer Literals | 18 |

Section 1a - Integer Literals in Different Numeric Bases | 18 |

Section 2 - Floating Point Literals | 18 |

Section 3 - Boolean Literals | 19 |

Section 4 - Character Literals | 19 |

Section 5 - String Literals | 19 |

Short Problems | 20 |

println and print |
21 |

Section 1 - Creating Longer String Literals | 21 |

Section 2 - The Newline Character ‘\n’ | 22 |

Section 3 - The print Method | 22 |

Section 4 - The Tab Character ‘\t’ | 23 |

Short Problems | 24 |

Long Problems | 24 |

Variables |
26 |

Section 1 - Keywords | 26 |

Section 2 - Identifiers | 26 |

Section 3 - Variable Declarations | 27 |

Section 3a - Declaring Multiple Variables in a Single Statement | 28 |

Section 4- Using Variable Declarations | 29 |

Section 5- The Lifetime of a Variable | 30 |

Section 6- String Variables | 30 |

Short Problems | 31 |

Long Problems | 32 |

Constants |
34 |

Section 1 - Using the final Keyword to Define Constants | 35 |

Section 2 - Constants Make your Programs Easier to Maintain | 35 |

Section 3 - String Constants | 36 |

Short Problems | 36 |

Long Problems | 37 |

Expressions |
38 |

Section 1 - Assignment Statements | 38 |

Section 2 - Expressions Defined | 39 |

Section 3 - Arithmetic Expressions | 39 |

Section 3a - Division | 39 |

Section 3b - Remainder | 40 |

Section 3c - Parentheses | 40 |

Section 3d - Order of Operations | 40 |

Section 3e - The Unary -, ++, and -- Operators | 41 |

Section 3f - Prefix and Postfix Form | 41 |

Section 3g - Shorthand | 42 |

Section 4 - Boolean Expressions | 42 |

Section 4a - Equality | 43 |

Section 4b - Relational Operators | 43 |

Section 4c - Logical Operators | 44 |

Section 5 - Bitwise Expressions | 45 |

Section 5a - Shifting | 45 |

Section 6 - Concatenation | 46 |

Section 7 - String Equality | 47 |

Short Problems | 48 |

Long Problems | 49 |

Conversion |
51 |

Section 1 - Widening Conversions | 51 |

Section 2 - Narrowing Conversions | 52 |

Section 3 - Conversions involving char | 52 |

Section 4 - Conversions involving boolean | 53 |

Section 5 - Conversions involving String | 53 |

Section 6 - Promotion | 54 |

Section 7 - Typecasting | 54 |

Short Problems | 55 |

if Statements |
56 |

Section 1 - The if Statement | 56 |

Section 2 - The if-else Statement | 57 |

Section 3 - The if-else if Statement | 58 |

Section 4 - Statement Blocks | 60 |

Section 5 - Nested if Statements | 61 |

Short Problems | 63 |

Long Problems | 63 |

switch Statements |
66 |

Section 1 - switch Statements | 66 |

Section 2 - Execution Flow in a switch Statement | 67 |

Section 3 - The Default Case | 67 |

Section 4 - Fallthrough in switch Statements | 68 |

Section 5 - Sharing Statement Blocks | 69 |

Section 6 - Switching on Strings | 69 |

Short Problems | 70 |

Long Problems | 71 |

Loops |
73 |

Section 1 - while Loops | 73 |

Section 2 - do-while Loops | 75 |

Section 3 - for Loops | 76 |

Section 3a - Decrementing for Loops | 77 |

Section 3b - Computing a Sum with a for Loop | 77 |

Section 3c - More Complex Exit Conditions | 77 |

Section 3d - Performing Larger Increments per Iteration | 78 |

Section 3e - Nested for Loops | 78 |

Short Problems | 79 |

Long Problems | 80 |

Methods |
81 |

Section 1 - Writing Your Own Methods | 81 |

Section 2 - Method Definition | 82 |

Section 3 - Calling a Method | 83 |

Section 4 - Method Parameters | 84 |

Section 5 - Passing by Value | 85 |

Section 6 - Returning a Value from a Method | 86 |

Section 7 - Premature Returns | 88 |

Section 8 - Return Statements in void Methods | 88 |

Short Problems | 89 |

Long Problems | 89 |

Local Variables |
92 |

Section 1 - Variables Local to Methods | 92 |

Section 2 - Variables Local to if Clauses | 93 |

Section 3 - Variables Local to Loops | 94 |

Section 4 - Variables Local to Arbitrary Scopes | 95 |

Short Problems | 96 |

Long Problems | 97 |

Classes |
99 |

Section 1 - Classes Defined | 99 |

Section 2 - Defining Your Own Classes | 101 |

Section 3 - The Reason We Need Classes | 101 |

Section 4 - The State of a Class | 102 |

Section 5 - Class Fields | 103 |

Section 5a - Determining the Fields of a Class | 106 |

Section 5b - Default Initialization of Class Fields | 107 |

Section 6 - Class Methods | 107 |

Section 7 - Mutators | 109 |

Section 7a - Validation in Mutators | 111 |

Short Problems | 112 |

Long Problems | 113 |

Objects and References |
116 |

Section 1 - Objects Defined | 116 |

Section 2 - Object Declarations | 116 |

Section 3 - The new Operator | 117 |

Section 4 - Reference Variables | 117 |

Section 5 - Multiple References to the Same Object | 118 |

Section 6 - String Objects are Immutable | 119 |

Section 7 - The Java Application Programming Interface (API) | 119 |

Section 8 - The Object Class | 120 |

Section 8a - The toString Method | 120 |

Section 8b - The equals Method | 121 |

Short Problems | 122 |

Long Problems | 122 |

Encapsulation |
124 |

Section 1 - Encapsulation Defined | 125 |

Section 2 - Accessors | 126 |

Short Problems | 128 |

Long Problems | 128 |

Constructors |
130 |

Section 1 - Constructors Defined | 130 |

Section 2 - Calling a Constructor | 130 |

Section 3 - Overloading Constructors | 131 |

Section 4 - The Default Constructor | 131 |

Section 5 - Default Constructor Generation | 132 |

Section 6 - Constructors with no Arguments | 132 |

Section 7 - The this Reference | 133 |

Section 8 - Using this to Call Another Constructor | 134 |

Section 9 - Constructors and final Fields | 134 |

Short Problems | 136 |

Long Problems | 137 |

Static Fields and Methods |
139 |

Section 1 - Static Fields | 140 |

Section 2 - Static Field Declarations | 140 |

Section 3 - Static Field Initialization | 141 |

Section 4 - Implementing an Object Counter using a Static Field | 142 |

Section 5 - Static versus Instance Fields | 143 |

Section 6 - Defining Class Constants using Static Fields | 143 |

Section 7 - Static Methods | 145 |

Section 8 - Referencing Static Fields and Methods from Outside Defining Classes | 146 |

Section 9 - Helper Classes | 147 |

Short Problems | 148 |

Long Problems | 148 |

Passing and Returning Object References |
151 |

Section 1- Passing an Object Reference to a Method | 151 |

Section 2- Modifying the Fields of a Object Passed into a Method | 152 |

Section 3- Returning an Object Reference from a Method | 153 |

Short Problems | 155 |

Long Problems | 155 |

Arrays |
159 |

Section 1 - Arrays Defined | 159 |

Section 2 - Array Declarations | 160 |

Section 3 - Array Subscripts | 160 |

Section 4 - The Bounds of an Array | 161 |

Section 5 - Arrays are Objects | 161 |

Section 6 - Array Initialization | 162 |

Section 7 - Arrays and Loops | 162 |

Section 8 - The length Field | 162 |

Section 9 - Array References as Class Fields | 164 |

Section 10 - The Size of a Java Array is Constant | 166 |

Section 11 - Enhanced For Loops | 167 |

Section 12 - Two Dimensional Arrays | 168 |

Short Problems | 170 |

Long Problems | 170 |

Arrays of Object References |
174 |

Section 1 - Declaring an Array of Object References | 174 |

Section 2 - Populating an Array of Object References using Assign Statements | 176 |

Section 3 - Populating an Array of Object References using an Initialization List | 177 |

Section 4 - Declaring Arrays of String References | 178 |

Section 5 - Passing an Array of Object References to a Method | 179 |

Section 6 - Returning an Array of Object References from a Method | 181 |

Short Problems | 182 |

Long Problems | 182 |

Wrapper Classes |
186 |

Section 1 - The Integer Class | 186 |

Section 1a - The parseInt Method | 186 |

Section 1b - The parseUnsignedInt Method | 187 |

Section 1c - The toString Methods | 187 |

Section 1d - Displaying in Different Numeric Bases | 187 |

Section 1e - Converting to a Different Primitive Type | 188 |

Section 1f - The MIN_VALUE and MAX_VALUE Constants | 189 |

Section 1g - The min and max Methods | 190 |

Section 1h - The toUnsignedLong Method | 190 |

Section 2 - The Double Class | 191 |

Section 2a - The POSITIVE_INFINITY, NEGATIVE_INFINITY, and NaN Constants | 191 |

Section 2b - The isInfinite, isFinite, and isNaN Methods | 191 |

Section 3 - The Float, Long, Short, and Byte Classes | 192 |

Section 4 - The Boolean Class | 193 |

Section 5 - Autoboxing | 193 |

Section 6 - Unboxing | 194 |

Section 7 - Wrapper Objects are Immutable | 194 |

Section 8 - The Character Class | 195 |

Short Problems | 200 |

Long Problems | 200 |

ArrayLists |
203 |

Section 1 - ArrayList Definition | 203 |

Section 2 - ArrayList Declarations | 203 |

Section 3 - ArrayLists Contain Object References | 204 |

Section 4 - Adding Elements to the End of an ArrayList | 204 |

Section 5 - Retrieving Elements from an ArrayList | 204 |

Section 6 - Looping Through an ArrayList | 204 |

Section 7 - import Statements | 205 |

Section 8 - Autoboxing and Unboxing with ArrayLists | 206 |

Section 9 - Adding Elements to an ArrayList at a Specified Index | 206 |

Section 10 - Removing Elements from an ArrayList | 207 |

Section 11 - Replacing an Element at a Specified Index | 207 |

Section 12 - Finding a Value in an ArrayList | 208 |

Section 13 - Determining if an ArrayList is Empty | 208 |

Section 14 - Copying ArrayLists | 208 |

Section 15 - Clearing an ArrayList | 209 |

Section 16 - Converting an ArrayList to a Java Array | 209 |

Section 17 - Passing an ArrayList to a Method | 210 |

Section 18 - Returning an ArrayList from a Method | 210 |

Short Problems | 211 |

Long Problems | 211 |

User Interaction |
215 |

Section 1 - System.in | 216 |

Section 2 - The Scanner Class | 216 |

Section 3 - Prompting | 217 |

Section 4 - The nextDouble, nextFloat, nextLong, nextShort, nextByte, and nextBoolean Methods | 218 |

Section 5 - Delimiters and the next Method | 219 |

Section 6 - The nextLine Method | 220 |

Section 7 - Scanner Use inside While Loops | 222 |

Section 8 - Using a Scanner to Play a Game | 223 |

Section 9 - Using a Scanner to Read a File | 224 |

Section 9a - The hasNext Method | 225 |

Section 10 - Using a Scanner to Read a String | 226 |

Section 11 - Changing a Scanner’s Delimiter | 227 |

Short Problems | 228 |

Long Problems | 228 |

String Operations |
232 |

Section 1 - Obtaining the Length of a String | 232 |

Section 2 - Retrieving the Character at an Index in a String Object | 232 |

Section 3 - Retrieving the Last Character of a String Object | 233 |

Section 4 - Finding the Position of a Character or String in a String Object | 233 |

Section 5 - Retrieving a Portion of a String Object | 235 |

Section 6 - The startsWith and endsWith Methods | 236 |

Section 7 - The isEmpty Method | 236 |

Section 8 - The toUpperCase and toLowerCase Methods | 236 |

Section 9 - The valueOf Methods | 237 |

Section 10 - The trim Method | 238 |

Section 11 - Matching a Region of two Strings | 238 |

Section 12 - Comparing two String Objects Lexicographically | 238 |

Section 13 - Strings and char Arrays | 240 |

Section 14 - Replacing a Portion of a String Object | 240 |

Section 15 - The StringBuilder Class | 241 |

Section 16 - The StringTokenizer Class | 245 |

Short Problems | 247 |

Long Problems | 248 |

Random Numbers |
251 |

Section 1 - The Random Class | 251 |

Section 2 - Limiting Random Numbers to a Range | 252 |

Section 3 - Specifying the Seed Value | 252 |

Section 4 - The nextFloat Method | 253 |

Section 5 - Computer Guessing Games | 254 |

Short Problems | 256 |

Long Problems | 256 |

Formatting Output |
258 |

Section 1 - The NumberFormat Class | 258 |

Section 1a - The getNumberInstance Method | 258 |

Section 1a1 - Grouping | 259 |

Section 1a2 - Rounding | 260 |

Section 1b - The getCurrencyInstance Method | 260 |

Section 1c - The getPercentInstance Formatter | 261 |

Section 2 - The DecimalFormat Class | 262 |

Section 3 - The printf Method | 263 |

Short Problems | 263 |

Long Problems | 264 |

Math Operations |
266 |

Section 1 - The Math Class | 266 |

Section 2 - Math Class Constants | 266 |

Section 3 - The abs Method | 267 |

Section 4 - The floor Method | 267 |

Section 5 - The ceil Method | 267 |

Section 6 - The round Method | 267 |

Section 7 - The min Method | 268 |

Section 8 - The max Method | 268 |

Section 9 - The pow Method | 268 |

Section 10 - The log, log10, and exp Methods | 269 |

Section 11 - The hypot Method | 269 |

Section 12 - Trigonometric Functions | 269 |

Section 12a - The toRadians and toDegrees Methods | 269 |

Section 12b - The sin, cos, and tan Methods | 270 |

Section 12c - The asin, acos, and atan Methods | 270 |

Short Problems | 271 |

Long Problems | 272 |

Enum Types |
274 |

Section 1 - Defining an Enum Type | 275 |

Section 2 - Enum Types are Classes | 276 |

Section 3 - The ordinal Method | 276 |

Section 4 - The toString and name Methods | 277 |

Section 5 - The equals Method | 277 |

Section 6 - The compareTo Method | 277 |

Section 7 - The values Method | 278 |

Section 8 - Placing an Enum Type in a Separate File | 278 |

Section 9 - Switching on an Enum Reference Variable | 279 |

Section 10 - Enum Reference Variables as Fields in other Classes | 280 |

Short Problems | 281 |

Long Problems | 282 |

**Copyright ©2017 by Ralph Lecessi Incorporated. All rights reserved.**