{"product_id":"job-ready-java-paperback-softback-9781119775645","title":"Job Ready Java (Paperback \/ softback) 9781119775645","description":"\u003cfont face=\"Georgia\"\u003e\r\n\u003cp\u003e\u003cfont size=\"6\"\u003eJob Ready Java\u003c\/font\u003e\u003cbr\u003e\r\n\r\n\r\n\r\n\r\n\r\n\u003c\/p\u003e\n\u003cp\u003e\u003cfont size=\"4\"\u003eHaythem Balti (Author), Alan Galloway (Author)\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e9781119775645, Wiley\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003ePaperback \/ softback, published 6 May 2021\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e768 pages\u003cbr\u003e23.4 x 18.5 x 4.3 cm, 1.225 kg\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\r\n\r\n\r\n\u003cp align=\"justify\"\u003e\u003cstrong\u003e\u003cfont size=\"3\"\u003e\u003cp\u003e\u003cb\u003ePrepare yourself to take on new and exciting Java programming challenges with this one-stop resource \u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003ci\u003eJob Ready Java\u003c\/i\u003e delivers a comprehensive and foundational approach to Java that is immediately applicable to real-world environments. Based on the highly regarded and effective Software Guild Java Bootcamp: Object Oriented Programming course, this book teaches you the basic and advanced Java concepts you will need at any entry-level Java position. \u003c\/p\u003e \u003cp\u003eWith the “Pulling It Together” sections, you’ll combine and integrate the concepts and lessons taught by the book, while also benefiting from: \u003c\/p\u003e \u003cul\u003e \u003cli\u003eA thorough introduction to getting set up with Java, including how to write, compile, and run Java programs with or without a Java IDE \u003c\/li\u003e \u003cli\u003ePractical discussions of the basics of the Java language, including syntax, program flow, and code organization \u003c\/li\u003e \u003cli\u003eA walk through the fundamentals of Object-Oriented Programming including Classes, Objects, Interfaces, and Inheritance, and how to leverage OOP in Java to create elegant code.  \u003c\/li\u003e \u003cli\u003eExplorations of intermediate and advanced Java concepts, including Maven , unit testing, Lambdas, Streams, and the Spring Framework  \u003c\/li\u003e \u003c\/ul\u003e \u003cp\u003ePerfect for Java novices seeking to make a career transition,\u003ci\u003e Job Ready Java\u003c\/i\u003e will also earn a place in the libraries of Java developers wanting to brush up on the fundamentals of their craft with an accessible and up-to-date resource. \u003c\/p\u003e\u003c\/font\u003e\u003c\/strong\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e\u003cp\u003eAbout the Authors v\u003c\/p\u003e \u003cp\u003eAbout the Technical Writer vii\u003c\/p\u003e \u003cp\u003eAbout the Technical Editors vii\u003c\/p\u003e \u003cp\u003eAcknowledgments ix\u003c\/p\u003e \u003cp\u003eIntroduction xxv\u003c\/p\u003e \u003cp\u003e\u003cb\u003ePart I: Getting Set Up 1\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 1: Installing Java 2\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThe Java Universe 3\u003c\/p\u003e \u003cp\u003eThe Java Development Kit 3\u003c\/p\u003e \u003cp\u003eThe Java Virtual Machine 4\u003c\/p\u003e \u003cp\u003eThe Java Runtime Environment 5\u003c\/p\u003e \u003cp\u003eInstalling OpenJDK 5\u003c\/p\u003e \u003cp\u003eInstalling OpenJDK on Microsoft Windows 6\u003c\/p\u003e \u003cp\u003eChecking for an Existing JDK on Windows 6\u003c\/p\u003e \u003cp\u003eInstalling OpenJDK 7\u003c\/p\u003e \u003cp\u003eVerifying the Installation 10\u003c\/p\u003e \u003cp\u003eInstalling OpenJDK on macOS 13\u003c\/p\u003e \u003cp\u003eChecking for an Existing JDK on macOS 13\u003c\/p\u003e \u003cp\u003eInstalling OpenJDK 13\u003c\/p\u003e \u003cp\u003eVerifying the Installation 17\u003c\/p\u003e \u003cp\u003eCreating Your First Java Program 17\u003c\/p\u003e \u003cp\u003eWriting the Program 18\u003c\/p\u003e \u003cp\u003eCompiling and Running the Program 19\u003c\/p\u003e \u003cp\u003eDealing with Syntax Errors 21\u003c\/p\u003e \u003cp\u003eUsing the Compiler and Java Virtual Machine 22\u003c\/p\u003e \u003cp\u003eSummary 22\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 2: Installing a Development Environment: NetBeans 24\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eGetting Started 25\u003c\/p\u003e \u003cp\u003eUnderstanding the Value of an IDE 25\u003c\/p\u003e \u003cp\u003eUsing the Source Code Editor 25\u003c\/p\u003e \u003cp\u003eUsing the Build Automation Tools 26\u003c\/p\u003e \u003cp\u003eUsing the Debugger 26\u003c\/p\u003e \u003cp\u003eInstalling NetBeans 27\u003c\/p\u003e \u003cp\u003eUsing an Installer 27\u003c\/p\u003e \u003cp\u003eInstalling on Windows 28\u003c\/p\u003e \u003cp\u003eInstalling on macOS 32\u003c\/p\u003e \u003cp\u003eInstalling Binaries 37\u003c\/p\u003e \u003cp\u003eInstalling Binaries on Windows 40\u003c\/p\u003e \u003cp\u003eAdding the JDK 42\u003c\/p\u003e \u003cp\u003eRunning NetBeans 44\u003c\/p\u003e \u003cp\u003eSummary 45\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 3: Using an Integrated Development Environment 46\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eUsing an IDE 47\u003c\/p\u003e \u003cp\u003eCreating a New Project 48\u003c\/p\u003e \u003cp\u003eCoding the “Hello, World!” Program 53\u003c\/p\u003e \u003cp\u003eCompiling the Code in NetBeans 57\u003c\/p\u003e \u003cp\u003eRunning the Program 59\u003c\/p\u003e \u003cp\u003eUsing the Debugging Tools 60\u003c\/p\u003e \u003cp\u003eCompilation and Syntax Errors 61\u003c\/p\u003e \u003cp\u003eRuntime and Logic Errors 63\u003c\/p\u003e \u003cp\u003eUnderstanding Source Control 67\u003c\/p\u003e \u003cp\u003eSummary 69\u003c\/p\u003e \u003cp\u003e\u003cb\u003ePart II: Basics of Object Oriented Programming 70\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 4: Using Program Statements and\u003c\/b\u003e\u003cb\u003e Variables 71\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eApproach 72\u003c\/p\u003e \u003cp\u003eConcepts 73\u003c\/p\u003e \u003cp\u003eComputers 73\u003c\/p\u003e \u003cp\u003eData vs. Information 73\u003c\/p\u003e \u003cp\u003ePrograms and Programming 74\u003c\/p\u003e \u003cp\u003eModels and Metaphors 74\u003c\/p\u003e \u003cp\u003eObjects 74\u003c\/p\u003e \u003cp\u003eSpecifications 75\u003c\/p\u003e \u003cp\u003eSyntax vs. Semantics 75\u003c\/p\u003e \u003cp\u003eLanguage Building Blocks 75\u003c\/p\u003e \u003cp\u003eComments 75\u003c\/p\u003e \u003cp\u003eSingle-Line Comments 76\u003c\/p\u003e \u003cp\u003eMultiline Comments 76\u003c\/p\u003e \u003cp\u003eDoc Comments 77\u003c\/p\u003e \u003cp\u003eUsing Comments 78\u003c\/p\u003e \u003cp\u003eIdentifiers 79\u003c\/p\u003e \u003cp\u003eData Types 80\u003c\/p\u003e \u003cp\u003eStatically Typed Languages 81\u003c\/p\u003e \u003cp\u003eType Conversion 81\u003c\/p\u003e \u003cp\u003eLiterals 82\u003c\/p\u003e \u003cp\u003eVariables 82\u003c\/p\u003e \u003cp\u003eConstants 84\u003c\/p\u003e \u003cp\u003eOperators and Expressions 84\u003c\/p\u003e \u003cp\u003eThree Flavors of Operators 85\u003c\/p\u003e \u003cp\u003eOperator Precedence 88\u003c\/p\u003e \u003cp\u003ePulling It All Together: Mathematical Expressions and Operators 89\u003c\/p\u003e \u003cp\u003eSummary 93\u003c\/p\u003e \u003cp\u003eExercises 93\u003c\/p\u003e \u003cp\u003eExercise 1: ABeginning.java 94\u003c\/p\u003e \u003cp\u003eExercise 2: ProjectGutenberg.java 95\u003c\/p\u003e \u003cp\u003eExercise 3: CommentingCode.java 97\u003c\/p\u003e \u003cp\u003eExercise 4: AllTheMath.java 98\u003c\/p\u003e \u003cp\u003eExercise 5: BucketsOfFun.java 100\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 5: Collecting and\u003c\/b\u003e\u003cb\u003e Parsing Input from\u003c\/b\u003e\u003cb\u003e the\u003c\/b\u003e\u003cb\u003e User 103\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eConsole Input and Output 104\u003c\/p\u003e \u003cp\u003eAdder Version 1 104\u003c\/p\u003e \u003cp\u003eAdder Version 2 106\u003c\/p\u003e \u003cp\u003eDeclaring and Initializing Our Variables 106\u003c\/p\u003e \u003cp\u003eSetting Up a Scanner Object 106\u003c\/p\u003e \u003cp\u003eUnderstanding the Command Line 107\u003c\/p\u003e \u003cp\u003eGetting the Values from the User 108\u003c\/p\u003e \u003cp\u003eGoing from Strings to Integers 108\u003c\/p\u003e \u003cp\u003eAdding the Numbers Together 109\u003c\/p\u003e \u003cp\u003eUsing Loops to Gather User Input 111\u003c\/p\u003e \u003cp\u003eParsing Data 112\u003c\/p\u003e \u003cp\u003eDealing with Bad Numbers: NumberFormatException 113\u003c\/p\u003e \u003cp\u003eScanner Problems 115\u003c\/p\u003e \u003cp\u003eSummary 121\u003c\/p\u003e \u003cp\u003eExercises 121\u003c\/p\u003e \u003cp\u003eExercise 1: Quest for the User Input 121\u003c\/p\u003e \u003cp\u003eExercise 2: Don’t Forget to Store It 123\u003c\/p\u003e \u003cp\u003eExercise 3: Passing the Turing Test 124\u003c\/p\u003e \u003cp\u003eExercise 4: Healthy Hearts 125\u003c\/p\u003e \u003cp\u003eExercise 5: Mini Mad Libs 126\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 6: Pulling It All Together: Building a\u003c\/b\u003e\u003cb\u003e Useful Program 127\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003ePlanning the Program 128\u003c\/p\u003e \u003cp\u003eIdentifying the Variables 128\u003c\/p\u003e \u003cp\u003ePlanning the Steps 128\u003c\/p\u003e \u003cp\u003eCreating the Code 129\u003c\/p\u003e \u003cp\u003eDeclaring the Variables 129\u003c\/p\u003e \u003cp\u003eGetting Input 130\u003c\/p\u003e \u003cp\u003eConverting the Strings 131\u003c\/p\u003e \u003cp\u003eCalculating the Area and Perimeter 132\u003c\/p\u003e \u003cp\u003eCalculating the Cost 133\u003c\/p\u003e \u003cp\u003eDisplaying the Results 133\u003c\/p\u003e \u003cp\u003eRunning the Program 135\u003c\/p\u003e \u003cp\u003eSummary 135\u003c\/p\u003e \u003cp\u003eExercises 136\u003c\/p\u003e \u003cp\u003eExercise 1: Mapping Instructions to Code 136\u003c\/p\u003e \u003cp\u003eExercise 2: Adding Prompts for Costs 136\u003c\/p\u003e \u003cp\u003eExercise 3: Adding Multiple Windows 136\u003c\/p\u003e \u003cp\u003eExercise 4: Adding Validation 137\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 7: Controlling Program Flow 138\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eWhat Can Our Code Do? 139\u003c\/p\u003e \u003cp\u003eDecisions and Boolean Expressions 139\u003c\/p\u003e \u003cp\u003eif Statements 139\u003c\/p\u003e \u003cp\u003eif-else Statements 142\u003c\/p\u003e \u003cp\u003eChaining if-else Statements 144\u003c\/p\u003e \u003cp\u003eEvaluating Multiple Conditions 146\u003c\/p\u003e \u003cp\u003eConditional-And and Conditional-Or Operators 147\u003c\/p\u003e \u003cp\u003eExclusive-Or 149\u003c\/p\u003e \u003cp\u003eTernary or Conditional Operator 150\u003c\/p\u003e \u003cp\u003eswitch Statement 151\u003c\/p\u003e \u003cp\u003eFalling Through with a switch Statement 153\u003c\/p\u003e \u003cp\u003eComparing for Equal Strings 155\u003c\/p\u003e \u003cp\u003eSummary 158\u003c\/p\u003e \u003cp\u003eExercises 159\u003c\/p\u003e \u003cp\u003eExercise 1: What Month is It? 159\u003c\/p\u003e \u003cp\u003eExercise 2: Guess Me 159\u003c\/p\u003e \u003cp\u003eExercise 3: Birthstones 160\u003c\/p\u003e \u003cp\u003eExercise 4: Trivia Night 161\u003c\/p\u003e \u003cp\u003eExercise 5: Space Rustlers 162\u003c\/p\u003e \u003cp\u003eExercise 6: Picky Eater 163\u003c\/p\u003e \u003cp\u003eExercise 7: Field Day 165\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 8: Looping Program Flow 167\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eLoops 167\u003c\/p\u003e \u003cp\u003eUsing while Loops 168\u003c\/p\u003e \u003cp\u003eInitializing the while Loop 171\u003c\/p\u003e \u003cp\u003eIncrementing the while Loop 171\u003c\/p\u003e \u003cp\u003eBreaking a Loop 172\u003c\/p\u003e \u003cp\u003eUsing do-while Loops 174\u003c\/p\u003e \u003cp\u003eMaking do-while Shine 176\u003c\/p\u003e \u003cp\u003eUsing for Loops 179\u003c\/p\u003e \u003cp\u003eInitializing the for Loop 181\u003c\/p\u003e \u003cp\u003eTerminating the for Loop 181\u003c\/p\u003e \u003cp\u003eIncrementing a for Loop 181\u003c\/p\u003e \u003cp\u003eSummary 184\u003c\/p\u003e \u003cp\u003eExercises 184\u003c\/p\u003e \u003cp\u003eExercise 1: Surfacing in BewareTheKraken.java 185\u003c\/p\u003e \u003cp\u003eExercise 2: Do or Do Not 185\u003c\/p\u003e \u003cp\u003eExercise 3: Guess Me Finally 186\u003c\/p\u003e \u003cp\u003eExercise 4: for and Twenty Blackbirds 187\u003c\/p\u003e \u003cp\u003eExercise 5: Spring Forward, Fall Back 188\u003c\/p\u003e \u003cp\u003eExercise 6: for Times 189\u003c\/p\u003e \u003cp\u003eExercise 7: for Times for 189\u003c\/p\u003e \u003cp\u003eExercise 8: Nesting for Loops 190\u003c\/p\u003e \u003cp\u003eExercise 9: Traditional Fizz Buzz 191\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 9: Understanding Flowcharts and Algorithms 193\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eFlowchart Basics 194\u003c\/p\u003e \u003cp\u003eSequences 194\u003c\/p\u003e \u003cp\u003eBranches 195\u003c\/p\u003e \u003cp\u003eLoops 196\u003c\/p\u003e \u003cp\u003eFlowcharting 197\u003c\/p\u003e \u003cp\u003eFlowchart Example 197\u003c\/p\u003e \u003cp\u003eSummary 198\u003c\/p\u003e \u003cp\u003eExercises 200\u003c\/p\u003e \u003cp\u003eExercise 1: A Guessing Game 200\u003c\/p\u003e \u003cp\u003eA Possible Flowcharting Solution 201\u003c\/p\u003e \u003cp\u003eThe Guessing Game Flowchart 201\u003c\/p\u003e \u003cp\u003eThe Guessing Game Code 203\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 10: Adding Randomness to\u003c\/b\u003e\u003cb\u003e Your Programs 207\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eInitializing the Random Object 208\u003c\/p\u003e \u003cp\u003eIncluding the Random Class 208\u003c\/p\u003e \u003cp\u003eSeeding Random Numbers 208\u003c\/p\u003e \u003cp\u003eGenerating Random Integers 209\u003c\/p\u003e \u003cp\u003eGenerating Random Doubles 210\u003c\/p\u003e \u003cp\u003eRevisiting the Number Guessing Game 212\u003c\/p\u003e \u003cp\u003eOther Random Options 215\u003c\/p\u003e \u003cp\u003eSummary 215\u003c\/p\u003e \u003cp\u003eExercises 215\u003c\/p\u003e \u003cp\u003eExercise 1: A Little Chaos 216\u003c\/p\u003e \u003cp\u003eExercise 2: Opinionator—Making Random Choices 217\u003c\/p\u003e \u003cp\u003eExercise 3: High Roller 219\u003c\/p\u003e \u003cp\u003eExercise 4: Coin Flipper 220\u003c\/p\u003e \u003cp\u003eExercise 5: Guess Me More 220\u003c\/p\u003e \u003cp\u003eExercise 6: Fortune Cookie 221\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 11: Debugging 222\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eCreating a File to Debug 222\u003c\/p\u003e \u003cp\u003eSetting Breakpoints 224\u003c\/p\u003e \u003cp\u003eStepping through Code 226\u003c\/p\u003e \u003cp\u003eRunning the Debugger 226\u003c\/p\u003e \u003cp\u003eExamining Variables 229\u003c\/p\u003e \u003cp\u003eThe Console and the Debugger 232\u003c\/p\u003e \u003cp\u003eSummary 234\u003c\/p\u003e \u003cp\u003eExercises 234\u003c\/p\u003e \u003cp\u003eExercise 1: Odd Odd Numbers 234\u003c\/p\u003e \u003cp\u003eExercise 2: A Simple Question of If 235\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 12: Adding Methods 237\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eWhy Methods? 238\u003c\/p\u003e \u003cp\u003eDefining Methods 238\u003c\/p\u003e \u003cp\u003eMethod Signature 239\u003c\/p\u003e \u003cp\u003eMethod Naming Conventions 239\u003c\/p\u003e \u003cp\u003eReturn Values 240\u003c\/p\u003e \u003cp\u003eUsing Return Values 241\u003c\/p\u003e \u003cp\u003eInput Parameters 242\u003c\/p\u003e \u003cp\u003eMatching Number of Parameters 244\u003c\/p\u003e \u003cp\u003eMatching Parameter Types 245\u003c\/p\u003e \u003cp\u003ePassing Parameters 246\u003c\/p\u003e \u003cp\u003eMethod Forms 248\u003c\/p\u003e \u003cp\u003eNo Return Value, No Parameters 248\u003c\/p\u003e \u003cp\u003eReturn Value, No Parameters 248\u003c\/p\u003e \u003cp\u003eNo Return Value, One or More Parameters 249\u003c\/p\u003e \u003cp\u003eReturn Value, One or More Parameters 249\u003c\/p\u003e \u003cp\u003eThe staticKeyword 249\u003c\/p\u003e \u003cp\u003ePulling It All Together 250\u003c\/p\u003e \u003cp\u003eIdentifying the Similarities 252\u003c\/p\u003e \u003cp\u003eIdentifying the Differences 252\u003c\/p\u003e \u003cp\u003eCreating the Method 252\u003c\/p\u003e \u003cp\u003eSetting the Name 252\u003c\/p\u003e \u003cp\u003eDetermining Parameters 253\u003c\/p\u003e \u003cp\u003eSetting a Return Type 253\u003c\/p\u003e \u003cp\u003eOur Basic Definition 253\u003c\/p\u003e \u003cp\u003eOur Method Body 254\u003c\/p\u003e \u003cp\u003eUsing the Method 255\u003c\/p\u003e \u003cp\u003eScope 257\u003c\/p\u003e \u003cp\u003eDebugging and Step Into 259\u003c\/p\u003e \u003cp\u003eSetting a Breakpoint in a Method 260\u003c\/p\u003e \u003cp\u003eStepping into Code 262\u003c\/p\u003e \u003cp\u003eDebugging and Scope 265\u003c\/p\u003e \u003cp\u003eSummary 265\u003c\/p\u003e \u003cp\u003eExercises 265\u003c\/p\u003e \u003cp\u003eExercise 1: Method to the Madness 266\u003c\/p\u003e \u003cp\u003eExercise 2: Return to Sender 267\u003c\/p\u003e \u003cp\u003eExercise 3: MatchWork 268\u003c\/p\u003e \u003cp\u003eExercise 4: Barely Controlled Chaos 269\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 13: Organizing with\u003c\/b\u003e\u003cb\u003e Arrays 272\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eWhat is an Array? 273\u003c\/p\u003e \u003cp\u003eTypes of Arrays 274\u003c\/p\u003e \u003cp\u003eElement vs. Index 275\u003c\/p\u003e \u003cp\u003eDeclaring Arrays 276\u003c\/p\u003e \u003cp\u003eSingle-Dimensional Arrays 276\u003c\/p\u003e \u003cp\u003eRectangular Arrays 276\u003c\/p\u003e \u003cp\u003eJagged Arrays 277\u003c\/p\u003e \u003cp\u003eInitializing Arrays 277\u003c\/p\u003e \u003cp\u003eInitializing a Single-Dimensional Array 278\u003c\/p\u003e \u003cp\u003eInitializing a Rectangular Array 279\u003c\/p\u003e \u003cp\u003eInitializing a Jagged Array 280\u003c\/p\u003e \u003cp\u003eAccessing Array Elements 281\u003c\/p\u003e \u003cp\u003eAccessing Elements in a Single-Dimensional Array 281\u003c\/p\u003e \u003cp\u003eAccessing Elements in a Multidimensional Array 283\u003c\/p\u003e \u003cp\u003eAccessing Elements in a Jagged Array 284\u003c\/p\u003e \u003cp\u003eIterating through Arrays 284\u003c\/p\u003e \u003cp\u003eIterating through Multidimensional and Jagged Arrays 286\u003c\/p\u003e \u003cp\u003eSum the Elements of an Array 288\u003c\/p\u003e \u003cp\u003eLooping Back to Front, with a Twist 289\u003c\/p\u003e \u003cp\u003ePrinting Pairs of Elements 290\u003c\/p\u003e \u003cp\u003eChanging the Size of an Array 291\u003c\/p\u003e \u003cp\u003eDealing with Errors 293\u003c\/p\u003e \u003cp\u003eSummary 293\u003c\/p\u003e \u003cp\u003eExercises 294\u003c\/p\u003e \u003cp\u003eExercise 1: A Rainbow 294\u003c\/p\u003e \u003cp\u003eExercise 2: Still Positive 295\u003c\/p\u003e \u003cp\u003eExercise 3: Fruit Basket 296\u003c\/p\u003e \u003cp\u003eExercise 4: Simple Combination 297\u003c\/p\u003e \u003cp\u003eExercise 5: Hidden Nuts 297\u003c\/p\u003e \u003cp\u003eExercise 6: Summative Sums 298\u003c\/p\u003e \u003cp\u003e\u003cb\u003ePart III: Fundamentals of Classes and Objects 299\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 14: Object-Oriented Concepts 300\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eAbstraction 301\u003c\/p\u003e \u003cp\u003eObject Orientation 301\u003c\/p\u003e \u003cp\u003eTypes 302\u003c\/p\u003e \u003cp\u003ePublic Interface\/Private Implementation 302\u003c\/p\u003e \u003cp\u003eEncapsulation and Data Hiding 303\u003c\/p\u003e \u003cp\u003eSingle Responsibility Principle and Cohesion 303\u003c\/p\u003e \u003cp\u003eDelegation 304\u003c\/p\u003e \u003cp\u003eSummary 304\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 15: Creating Classes and\u003c\/b\u003e\u003cb\u003e Types 305\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eCreating New Types 305\u003c\/p\u003e \u003cp\u003eClasses vs. Objects 307\u003c\/p\u003e \u003cp\u003eProperties, Accessors, and Mutators 307\u003c\/p\u003e \u003cp\u003eDot Operator 308\u003c\/p\u003e \u003cp\u003ethis Keyword 309\u003c\/p\u003e \u003cp\u003eMethods\/Behaviors 309\u003c\/p\u003e \u003cp\u003eConstructors 309\u003c\/p\u003e \u003cp\u003eObject Instantiation and Method Invocation 311\u003c\/p\u003e \u003cp\u003eStatic Keyword 312\u003c\/p\u003e \u003cp\u003eStatic and the Main Method 313\u003c\/p\u003e \u003cp\u003eStatic and Constant Values 313\u003c\/p\u003e \u003cp\u003eStatic and Utility Methods 314\u003c\/p\u003e \u003cp\u003ePulling It All Together 315\u003c\/p\u003e \u003cp\u003eCreating a New Class 316\u003c\/p\u003e \u003cp\u003eGoing Static 320\u003c\/p\u003e \u003cp\u003eWhen to Go Static 323\u003c\/p\u003e \u003cp\u003eExisting Static Methods 325\u003c\/p\u003e \u003cp\u003eSummary 325\u003c\/p\u003e \u003cp\u003eExercises 326\u003c\/p\u003e \u003cp\u003eExercise 1: Class Modeling 327\u003c\/p\u003e \u003cp\u003eExercise 2: Refactoring 328\u003c\/p\u003e \u003cp\u003eExercise 3: A Multiclass Problem 330\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 16: Managing Storage and\u003c\/b\u003e\u003cb\u003e Memory 331\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003ePrograms and Memory 331\u003c\/p\u003e \u003cp\u003eThe Stack 332\u003c\/p\u003e \u003cp\u003eThe Heap 334\u003c\/p\u003e \u003cp\u003eGarbage Collection 338\u003c\/p\u003e \u003cp\u003eReference and Null Values 339\u003c\/p\u003e \u003cp\u003eSummary 341\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 17: Exploring Interfaces, Composition, and\u003c\/b\u003e\u003cb\u003e Inheritance 342\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eHow Do These Tools Help? 343\u003c\/p\u003e \u003cp\u003eInterfaces 344\u003c\/p\u003e \u003cp\u003eComposition and Inheritance 345\u003c\/p\u003e \u003cp\u003eComposition 345\u003c\/p\u003e \u003cp\u003eInheritance 346\u003c\/p\u003e \u003cp\u003eUsing Interfaces, Composition, and Inheritance 346\u003c\/p\u003e \u003cp\u003eSummary 347\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 18: Diving into Interfaces 348\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eWhat is an Interface? 349\u003c\/p\u003e \u003cp\u003eDeclaring an Interface 349\u003c\/p\u003e \u003cp\u003eImplementing an Interface 350\u003c\/p\u003e \u003cp\u003eInterface Restrictions 352\u003c\/p\u003e \u003cp\u003eImplementing Multiple Interfaces 352\u003c\/p\u003e \u003cp\u003eExtending an Interface 354\u003c\/p\u003e \u003cp\u003eInterfaces and Polymorphism 356\u003c\/p\u003e \u003cp\u003eSummary 357\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 19: Diving into Composition 358\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eWhat is Composition? 359\u003c\/p\u003e \u003cp\u003eBook without Composition 359\u003c\/p\u003e \u003cp\u003eBook with Composition 360\u003c\/p\u003e \u003cp\u003eSummary 362\u003c\/p\u003e \u003cp\u003eExercises 362\u003c\/p\u003e \u003cp\u003eExercise 1: Classroom Composition 362\u003c\/p\u003e \u003cp\u003eExercise 2: Cookbook 363\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 20: Diving into Inheritance 365\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eEverything Extends Object 366\u003c\/p\u003e \u003cp\u003eTerminology 366\u003c\/p\u003e \u003cp\u003eAccess Control 367\u003c\/p\u003e \u003cp\u003eInheritance 368\u003c\/p\u003e \u003cp\u003eCode Reuse through Inheritance 371\u003c\/p\u003e \u003cp\u003eMethod Overloading 371\u003c\/p\u003e \u003cp\u003eMethod Overriding 373\u003c\/p\u003e \u003cp\u003eConstructors 375\u003c\/p\u003e \u003cp\u003ePolymorphism 380\u003c\/p\u003e \u003cp\u003eCalling Methods Polymorphically 382\u003c\/p\u003e \u003cp\u003eAbstract Base Classes 383\u003c\/p\u003e \u003cp\u003eSummary 383\u003c\/p\u003e \u003cp\u003eExercises 383\u003c\/p\u003e \u003cp\u003eExercise 1: Working with Shape 384\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 21: Understanding Collections 385\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eCollections in Java 385\u003c\/p\u003e \u003cp\u003eJavadoc 386\u003c\/p\u003e \u003cp\u003eCollections Framework Structure 387\u003c\/p\u003e \u003cp\u003eInterface vs. Implementation 389\u003c\/p\u003e \u003cp\u003eIterator 390\u003c\/p\u003e \u003cp\u003eCommonly Used Interfaces in the Collections Framework 390\u003c\/p\u003e \u003cp\u003eQuick Look at List 390\u003c\/p\u003e \u003cp\u003eArrayList 390\u003c\/p\u003e \u003cp\u003eStack 391\u003c\/p\u003e \u003cp\u003eQuick Look at Set 391\u003c\/p\u003e \u003cp\u003eHashSet 391\u003c\/p\u003e \u003cp\u003eTreeSet 392\u003c\/p\u003e \u003cp\u003eQuick Look at Map 392\u003c\/p\u003e \u003cp\u003eHashMap 392\u003c\/p\u003e \u003cp\u003eTreeMap 392\u003c\/p\u003e \u003cp\u003eSummary 393\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 22: Introduction to\u003c\/b\u003e\u003cb\u003e Lists 394\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eList 394\u003c\/p\u003e \u003cp\u003eTypes of Lists 395\u003c\/p\u003e \u003cp\u003eArrayList 395\u003c\/p\u003e \u003cp\u003eLinkedList 395\u003c\/p\u003e \u003cp\u003eStack 397\u003c\/p\u003e \u003cp\u003eUnderstanding Generics 397\u003c\/p\u003e \u003cp\u003eUsing Lists 398\u003c\/p\u003e \u003cp\u003eInstantiating a List 398\u003c\/p\u003e \u003cp\u003eAdding Items to a List 401\u003c\/p\u003e \u003cp\u003eAccessing Items in a List 402\u003c\/p\u003e \u003cp\u003eInserting Items into a List 403\u003c\/p\u003e \u003cp\u003eRemoving Items from a List 403\u003c\/p\u003e \u003cp\u003eEnhanced Approaches to Access List Items 405\u003c\/p\u003e \u003cp\u003eThe Enhanced for Loop and Lists 406\u003c\/p\u003e \u003cp\u003eVisiting Each Element: Iterators 407\u003c\/p\u003e \u003cp\u003eCreating an Iterator 407\u003c\/p\u003e \u003cp\u003eUsing the Iterator 408\u003c\/p\u003e \u003cp\u003eSummary 410\u003c\/p\u003e \u003cp\u003eExercises 410\u003c\/p\u003e \u003cp\u003eExercise 1: Three Threes 410\u003c\/p\u003e \u003cp\u003eExercise 2: Mixed-Up Animals 411\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 23: Exploring Maps 412\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eMap Interface 412\u003c\/p\u003e \u003cp\u003eHashMap 413\u003c\/p\u003e \u003cp\u003eCreating and Adding Entries to a Map 413\u003c\/p\u003e \u003cp\u003eInstantiating a Map 413\u003c\/p\u003e \u003cp\u003eAdding Data to a Map 414\u003c\/p\u003e \u003cp\u003eManipulating with Entries in a Map 415\u003c\/p\u003e \u003cp\u003eLooking Up Values in a Map 415\u003c\/p\u003e \u003cp\u003eReplacing Data in a Map 417\u003c\/p\u003e \u003cp\u003eRemoving Values from a Map 417\u003c\/p\u003e \u003cp\u003eGetting Keys and Listing Mapped Values in a Map 417\u003c\/p\u003e \u003cp\u003eListing All the Keys 417\u003c\/p\u003e \u003cp\u003eListing All the Values Key by Key 420\u003c\/p\u003e \u003cp\u003eListing All the Values: Value Collection 421\u003c\/p\u003e \u003cp\u003eSummary 423\u003c\/p\u003e \u003cp\u003eExercises 423\u003c\/p\u003e \u003cp\u003eExercise 1: State Capitals 423\u003c\/p\u003e \u003cp\u003eExercise 2: A Reusable User I\/O Class 424\u003c\/p\u003e \u003cp\u003eExercise 3: Student Quiz Scores 427\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 24: Using Simple File Input and\u003c\/b\u003e\u003cb\u003e Output 429\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eData Storage and Representation 430\u003c\/p\u003e \u003cp\u003eFile Format, Marshaling, and Unmarshaling 431\u003c\/p\u003e \u003cp\u003eStudent Class 432\u003c\/p\u003e \u003cp\u003eFile Format Example 433\u003c\/p\u003e \u003cp\u003eMarshaling and Unmarshaling Approach 433\u003c\/p\u003e \u003cp\u003eSimple File I\/O 434\u003c\/p\u003e \u003cp\u003eWriting to a File 435\u003c\/p\u003e \u003cp\u003eExceptions 436\u003c\/p\u003e \u003cp\u003eThe OutFile.txt File 437\u003c\/p\u003e \u003cp\u003eReading from a File 438\u003c\/p\u003e \u003cp\u003eSummary 440\u003c\/p\u003e \u003cp\u003eExercises 440\u003c\/p\u003e \u003cp\u003eExercise 1: Creating State Capitals 441\u003c\/p\u003e \u003cp\u003eExercise 2: Hashing the State Capitals 442\u003c\/p\u003e \u003cp\u003eExercise 3: A State Guessing Game 442\u003c\/p\u003e \u003cp\u003eExercise 4: Objectifying States 443\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 25: Applying Application Design 446\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eCRUD Applications 447\u003c\/p\u003e \u003cp\u003eUsing a Tiered Design 448\u003c\/p\u003e \u003cp\u003eThe Basic Tiers 448\u003c\/p\u003e \u003cp\u003eThe Model-View-Controller Pattern 448\u003c\/p\u003e \u003cp\u003ePackages 449\u003c\/p\u003e \u003cp\u003eSoftware Development Lifecycle Overview 450\u003c\/p\u003e \u003cp\u003eWaterfall 450\u003c\/p\u003e \u003cp\u003eIterative Development 451\u003c\/p\u003e \u003cp\u003eAgile Development 451\u003c\/p\u003e \u003cp\u003eProject Lifecycle 452\u003c\/p\u003e \u003cp\u003ePhase 1: Inception 452\u003c\/p\u003e \u003cp\u003ePhase 2: Elaboration 452\u003c\/p\u003e \u003cp\u003ePhase 3: Construction 453\u003c\/p\u003e \u003cp\u003ePhase 4: Transition 453\u003c\/p\u003e \u003cp\u003eIterations 453\u003c\/p\u003e \u003cp\u003eSummary 454\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 26: Handling Exceptions 455\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eException Handling 456\u003c\/p\u003e \u003cp\u003eCatch or Specify Requirement 459\u003c\/p\u003e \u003cp\u003eException Types 459\u003c\/p\u003e \u003cp\u003eHandling (Catching) Exceptions 459\u003c\/p\u003e \u003cp\u003etry Block 459\u003c\/p\u003e \u003cp\u003ecatch Block 461\u003c\/p\u003e \u003cp\u003efinally Block 462\u003c\/p\u003e \u003cp\u003eSpecifying and Throwing Exceptions 464\u003c\/p\u003e \u003cp\u003eException Translation and Encapsulation 465\u003c\/p\u003e \u003cp\u003eSummary 466\u003c\/p\u003e \u003cp\u003eExercises 466\u003c\/p\u003e \u003cp\u003eExercise 1: Keep On Asking 466\u003c\/p\u003e \u003cp\u003eExercise 2: Arrays Gone Bad 466\u003c\/p\u003e \u003cp\u003eExercise 3: Exiting Gracefully 468\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 27: Pulling It All Together: Building the\u003c\/b\u003e\u003cb\u003e Class Roster App 469\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eApplication Requirements and Use Cases 470\u003c\/p\u003e \u003cp\u003eUnderstanding the\u003c\/p\u003e \u003cp\u003eApplication Structure 470\u003c\/p\u003e \u003cp\u003eInterface Relationships 471\u003c\/p\u003e \u003cp\u003eComposition Relationships 472\u003c\/p\u003e \u003cp\u003eInheritance Relationships 472\u003c\/p\u003e \u003cp\u003eClasses and Interfaces in Our Application 472\u003c\/p\u003e \u003cp\u003eMVC Rules of the Game 473\u003c\/p\u003e \u003cp\u003eConstruction Approach 473\u003c\/p\u003e \u003cp\u003eSetting Up the Class Roster Application Shell 474\u003c\/p\u003e \u003cp\u003eCreating the Menu System 477\u003c\/p\u003e \u003cp\u003eUserIO and UserIOConsoleImpl 478\u003c\/p\u003e \u003cp\u003eClassRosterController 482\u003c\/p\u003e \u003cp\u003eApp 483\u003c\/p\u003e \u003cp\u003eClassRosterView 484\u003c\/p\u003e \u003cp\u003eClassRosterController 485\u003c\/p\u003e \u003cp\u003eAdding a Student Use Case 487\u003c\/p\u003e \u003cp\u003eStudent (DTO) 487\u003c\/p\u003e \u003cp\u003eClassRosterDao and ClassRoster-DaoFileImpl 488\u003c\/p\u003e \u003cp\u003eClassRosterDao 488\u003c\/p\u003e \u003cp\u003eClassRosterDaoFileImpl 490\u003c\/p\u003e \u003cp\u003eClassRosterView 491\u003c\/p\u003e \u003cp\u003eClassRosterController 493\u003c\/p\u003e \u003cp\u003eViewing All Students Use Case 494\u003c\/p\u003e \u003cp\u003eClassRosterDaoFileImpl 494\u003c\/p\u003e \u003cp\u003eClassRosterView 495\u003c\/p\u003e \u003cp\u003eClassRosterController 496\u003c\/p\u003e \u003cp\u003eGetting a Student Use Case 497\u003c\/p\u003e \u003cp\u003eClassRosterDaoFileImpl 498\u003c\/p\u003e \u003cp\u003eClassRosterView 498\u003c\/p\u003e \u003cp\u003eClassRosterController 499\u003c\/p\u003e \u003cp\u003eRemoving a Student Use Case 501\u003c\/p\u003e \u003cp\u003eClassRosterDaoFileImpl 501\u003c\/p\u003e \u003cp\u003eClassRosterView 501\u003c\/p\u003e \u003cp\u003eClassRosterController 502\u003c\/p\u003e \u003cp\u003eHandling Unknown Command and Exiting 504\u003c\/p\u003e \u003cp\u003eClassRosterView 504\u003c\/p\u003e \u003cp\u003eClassRosterController 504\u003c\/p\u003e \u003cp\u003eWorking with Dependency Injection 506\u003c\/p\u003e \u003cp\u003eImplementation 507\u003c\/p\u003e \u003cp\u003eClassRosterController 507\u003c\/p\u003e \u003cp\u003eClassRosterView 508\u003c\/p\u003e \u003cp\u003eApp 508\u003c\/p\u003e \u003cp\u003eHandling Application Exceptions 509\u003c\/p\u003e \u003cp\u003eClassRosterDaoException 509\u003c\/p\u003e \u003cp\u003eAdding File Persistence 512\u003c\/p\u003e \u003cp\u003eClassRosterDaoFileImpl 512\u003c\/p\u003e \u003cp\u003eConstants 512\u003c\/p\u003e \u003cp\u003eunmarshalStudent 513\u003c\/p\u003e \u003cp\u003eloadRoster 514\u003c\/p\u003e \u003cp\u003emarshalStudent 516\u003c\/p\u003e \u003cp\u003ewriteRoster 517\u003c\/p\u003e \u003cp\u003eaddStudent 518\u003c\/p\u003e \u003cp\u003egetAllStudents 519\u003c\/p\u003e \u003cp\u003egetStudent 520\u003c\/p\u003e \u003cp\u003eremoveStudent 520\u003c\/p\u003e \u003cp\u003eClassRosterDao 521\u003c\/p\u003e \u003cp\u003eClassRosterView 522\u003c\/p\u003e \u003cp\u003eClassRosterController 522\u003c\/p\u003e \u003cp\u003eCreate roster.txt 525\u003c\/p\u003e \u003cp\u003eSummary 527\u003c\/p\u003e \u003cp\u003eExercises 527\u003c\/p\u003e \u003cp\u003eExercise 1: DVD Library Update 527\u003c\/p\u003e \u003cp\u003eExercise 2: Electronic Address Book 528\u003c\/p\u003e \u003cp\u003e\u003cb\u003ePart IV: Intermediate Java 531\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson 28: Exploring the Service Layer 532\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThe Role of the Service Layer 532\u003c\/p\u003e \u003cp\u003eService Layer Exceptions 534\u003c\/p\u003e \u003cp\u003eService Layer API Design 534\u003c\/p\u003e \u003cp\u003eNew Business Rules 534\u003c\/p\u003e \u003cp\u003eCreate a Student 535\u003c\/p\u003e \u003cp\u003eDefine the Method Signature 535\u003c\/p\u003e \u003cp\u003eDefine the Return Type 535\u003c\/p\u003e \u003cp\u003eDefine the Errors That Might Occur in This Method 535\u003c\/p\u003e \u003cp\u003eService Layer Methods for Getting Students 536\u003c\/p\u003e \u003cp\u003eGet All Students 536\u003c\/p\u003e \u003cp\u003eGet a Single Student 537\u003c\/p\u003e \u003cp\u003eRemove a Student 537\u003c\/p\u003e \u003cp\u003eSummary 537\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 29: Pulling It All Together: Coding the\u003c\/b\u003e\u003cb\u003e Class Roster Service Layer 538\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eCreate a Service Layer Interface 539\u003c\/p\u003e \u003cp\u003eCreate New Exceptions 542\u003c\/p\u003e \u003cp\u003eClassRosterDuplicateIdException 542\u003c\/p\u003e \u003cp\u003eClassRosterDataValidation Exception 543\u003c\/p\u003e \u003cp\u003eRefactor\/Rename ClassRoster-DaoException 543\u003c\/p\u003e \u003cp\u003eCreate the Service Layer Implementation 546\u003c\/p\u003e \u003cp\u003eConstructor and DAO Member 547\u003c\/p\u003e \u003cp\u003eValidating Student Data 547\u003c\/p\u003e \u003cp\u003eCreate Student 548\u003c\/p\u003e \u003cp\u003eGet All Students 549\u003c\/p\u003e \u003cp\u003eGet One Student 549\u003c\/p\u003e \u003cp\u003eRemove Student 550\u003c\/p\u003e \u003cp\u003eModify the Controller 550\u003c\/p\u003e \u003cp\u003eReplace Member Field 551\u003c\/p\u003e \u003cp\u003eModify Constructor 551\u003c\/p\u003e \u003cp\u003eReplace Calls to DAO Methods with Calls to the Service Layer Method 551\u003c\/p\u003e \u003cp\u003eModify the App 553\u003c\/p\u003e \u003cp\u003eAdd the Audit Log Feature 554\u003c\/p\u003e \u003cp\u003eAudit DAO Interface and Implementation 554\u003c\/p\u003e \u003cp\u003eModify the Service Layer 556\u003c\/p\u003e \u003cp\u003eAdd Member Field 556\u003c\/p\u003e \u003cp\u003eModify the Constructor 556\u003c\/p\u003e \u003cp\u003eModify createStudent 556\u003c\/p\u003e \u003cp\u003eModify removeStudent 557\u003c\/p\u003e \u003cp\u003eModify App 558\u003c\/p\u003e \u003cp\u003eSummary 559\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 30: Doing Unit Testing 560\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eUnit Testing 561\u003c\/p\u003e \u003cp\u003eTypes of Unit Testing 561\u003c\/p\u003e \u003cp\u003eBlack-Box vs. Glass-Box Testing 562\u003c\/p\u003e \u003cp\u003eStateful vs. Stateless Components 562\u003c\/p\u003e \u003cp\u003eTest-Driven Development and Red\/Green\/Refactor 562\u003c\/p\u003e \u003cp\u003eTest Stubs 563\u003c\/p\u003e \u003cp\u003eJUnit 563\u003c\/p\u003e \u003cp\u003eTest Setup and Teardown 563\u003c\/p\u003e \u003cp\u003eAnnotations 564\u003c\/p\u003e \u003cp\u003eAsserts 564\u003c\/p\u003e \u003cp\u003eGiven\/When\/Then 564\u003c\/p\u003e \u003cp\u003eStateless Unit Testing 565\u003c\/p\u003e \u003cp\u003eWhat Makes a Good Unit Test? 565\u003c\/p\u003e \u003cp\u003eDesigning a Test Plan 565\u003c\/p\u003e \u003cp\u003eHappy Llama Test Plan 567\u003c\/p\u003e \u003cp\u003eImplementing Unit Tests 568\u003c\/p\u003e \u003cp\u003eCreating the Test Class 568\u003c\/p\u003e \u003cp\u003eWriting Happy Llama Tests 569\u003c\/p\u003e \u003cp\u003eRunning JUnit Tests 571\u003c\/p\u003e \u003cp\u003eSummary 575\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 31: Testing Stateful Code 577\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eUnit Testing Stateful Code 578\u003c\/p\u003e \u003cp\u003eSeparating Production and Test Data 579\u003c\/p\u003e \u003cp\u003eAdding hashCode and equals to Student 580\u003c\/p\u003e \u003cp\u003eAdding toString to Student 582\u003c\/p\u003e \u003cp\u003eCreating the Test Class 583\u003c\/p\u003e \u003cp\u003eThe Set Up and Tear Down Methods 584\u003c\/p\u003e \u003cp\u003eArrange\/Act\/Assert for Stateful Code 585\u003c\/p\u003e \u003cp\u003eClass Roster DAO Test Design 586\u003c\/p\u003e \u003cp\u003eAdd Student 586\u003c\/p\u003e \u003cp\u003eGet Student 588\u003c\/p\u003e \u003cp\u003eClassRosterDaoTest: Adding and Getting a Student 589\u003c\/p\u003e \u003cp\u003eGet All Students 590\u003c\/p\u003e \u003cp\u003eClassRosterDaoTest: Adding and Getting All Students 590\u003c\/p\u003e \u003cp\u003eRemove Student 592\u003c\/p\u003e \u003cp\u003eClassRosterDaoTest: Adding and Removing Students 592\u003c\/p\u003e \u003cp\u003eUnit Testing the Service Layer 594\u003c\/p\u003e \u003cp\u003ePlanning the Test Design 595\u003c\/p\u003e \u003cp\u003eCreating the Test Class 595\u003c\/p\u003e \u003cp\u003eCreating the DAO Stubs 596\u003c\/p\u003e \u003cp\u003eClassRosterAuditDaoStubImpl 597\u003c\/p\u003e \u003cp\u003eClassRosterDaoStubImpl 597\u003c\/p\u003e \u003cp\u003eTest Setup 599\u003c\/p\u003e \u003cp\u003eTest Implementation 600\u003c\/p\u003e \u003cp\u003etestCreateValidStudent 600\u003c\/p\u003e \u003cp\u003etestCreateStudentDuplicateId 601\u003c\/p\u003e \u003cp\u003etestCreateStudentInvalidData 602\u003c\/p\u003e \u003cp\u003etestGetAllStudents 603\u003c\/p\u003e \u003cp\u003etestGetStudent 603\u003c\/p\u003e \u003cp\u003etestRemoveStudent 604\u003c\/p\u003e \u003cp\u003eSummary 605\u003c\/p\u003e \u003cp\u003eExercises 605\u003c\/p\u003e \u003cp\u003eExercise 1: Testing the Address Book App 605\u003c\/p\u003e \u003cp\u003eExercise 2: Testing the DVD Library 606\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 32: Including Magic Numbers and\u003c\/b\u003e\u003cb\u003e Enums 607\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eMagic Numbers 608\u003c\/p\u003e \u003cp\u003eEnums 608\u003c\/p\u003e \u003cp\u003eCreating Enums for Fixed Constants 609\u003c\/p\u003e \u003cp\u003eUsing Enums 609\u003c\/p\u003e \u003cp\u003eGetting Values from an Enum 611\u003c\/p\u003e \u003cp\u003eEnum Members 612\u003c\/p\u003e \u003cp\u003eSummary 616\u003c\/p\u003e \u003cp\u003eExercises 616\u003c\/p\u003e \u003cp\u003eExercise 1: How Many Days until Friday? 617\u003c\/p\u003e \u003cp\u003eExercise 2: Playing Cards 617\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson 33: Manipulating Dates and\u003c\/b\u003e\u003cb\u003e Times 618\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eISO Calendar 619\u003c\/p\u003e \u003cp\u003eHuman Time and Machine Time 619\u003c\/p\u003e \u003cp\u003eLocal and Zoned Classes 619\u003c\/p\u003e \u003cp\u003ePeriods and Duration 620\u003c\/p\u003e \u003cp\u003eWorking with LocalDate Objects 620\u003c\/p\u003e \u003cp\u003eCreating LocalDates 620\u003c\/p\u003e \u003cp\u003eConverting Dates to and from Strings 622\u003c\/p\u003e \u003cp\u003eFormatting Dates 623\u003c\/p\u003e \u003cp\u003eUsing Localization 625\u003c\/p\u003e \u003cp\u003eGetting the Time with LocalDateTime 626\u003c\/p\u003e \u003cp\u003eWorking with Date Calculations 628\u003c\/p\u003e \u003cp\u003eCalculating Dates in the Future and Past 628\u003c\/p\u003e \u003cp\u003eCalculating the Time between Two Dates 630\u003c\/p\u003e \u003cp\u003eWorking with Legacy Dates 632\u003c\/p\u003e \u003cp\u003eConverting Date Objects 632\u003c\/p\u003e \u003cp\u003eConverting a GregorianCalendar Object 633\u003c\/p\u003e \u003cp\u003eSummary 635\u003c\/p\u003e \u003cp\u003eExercises 635\u003c\/p\u003e \u003cp\u003eExercise 1: Birthday Calculator 635\u003c\/p\u003e \u003cp\u003eExercise 2: It’s The End of the World as We Know It 636\u003c\/p\u003e \u003cp\u003eExercise 3: Tracking Your Time 636\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 34: Using the BigDecimal Class 638\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eExploring BigDecimal 639\u003c\/p\u003e \u003cp\u003eConstructing BigDecimals 639\u003c\/p\u003e \u003cp\u003eUnderstanding Scale 641\u003c\/p\u003e \u003cp\u003eUnderstanding Rounding Modes 641\u003c\/p\u003e \u003cp\u003eWorking with BigDecimal 642\u003c\/p\u003e \u003cp\u003eSetting Scale 642\u003c\/p\u003e \u003cp\u003eSetting Scale without Rounding Mode 643\u003c\/p\u003e \u003cp\u003eRounding BigDecimals 643\u003c\/p\u003e \u003cp\u003eDoing Calculations with BigDecimals 645\u003c\/p\u003e \u003cp\u003eDividing BigDecimals 646\u003c\/p\u003e \u003cp\u003eSummary 648\u003c\/p\u003e \u003cp\u003eExercises 648\u003c\/p\u003e \u003cp\u003eExercise 1: Interest Calculator 648\u003c\/p\u003e \u003cp\u003eExercise 2: Car Lot Service Layer 649\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 35: Working with\u003c\/b\u003e\u003cb\u003e Lambdas and\u003c\/b\u003e\u003cb\u003e Streams 653\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eUsing Aggregate Operations 654\u003c\/p\u003e \u003cp\u003eUnderstanding Pipelines and Streams 654\u003c\/p\u003e \u003cp\u003eStreams vs. Iteration 655\u003c\/p\u003e \u003cp\u003eExploring Lambdas 655\u003c\/p\u003e \u003cp\u003eWorking with Stream and Lambda Syntax 655\u003c\/p\u003e \u003cp\u003eThe forEach() Stream Method 656\u003c\/p\u003e \u003cp\u003eThe filter Stream Method 660\u003c\/p\u003e \u003cp\u003eThe map Stream Method 661\u003c\/p\u003e \u003cp\u003eThe collect Stream Method 663\u003c\/p\u003e \u003cp\u003eFurther Syntax 664\u003c\/p\u003e \u003cp\u003eSummary 665\u003c\/p\u003e \u003cp\u003eExercises 665\u003c\/p\u003e \u003cp\u003eExercise 1: Only the Young 665\u003c\/p\u003e \u003cp\u003eExercise 2: DVD Library Update 666\u003c\/p\u003e \u003cp\u003e\u003cb\u003ePart V: Advanced Java 667\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 36: Working with the Spring Framework 668\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eDependency Injection and Programming to Interfaces 669\u003c\/p\u003e \u003cp\u003eWhy Spring? 670\u003c\/p\u003e \u003cp\u003eUnderstanding the Spring Approach 670\u003c\/p\u003e \u003cp\u003ePlain Old Java Objects 671\u003c\/p\u003e \u003cp\u003eTemplates 671\u003c\/p\u003e \u003cp\u003ePulling It All Together: Spring DI in Action 673\u003c\/p\u003e \u003cp\u003eSpring DI with XML 674\u003c\/p\u003e \u003cp\u003eXML Configuration File 675\u003c\/p\u003e \u003cp\u003eUpdate the App Class 676\u003c\/p\u003e \u003cp\u003eSpring DI with Annotations 677\u003c\/p\u003e \u003cp\u003eClass Annotations 678\u003c\/p\u003e \u003cp\u003eSummary 681\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 37: Introducing Maven 682\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eWhat is Maven? 683\u003c\/p\u003e \u003cp\u003eProject Object Model 683\u003c\/p\u003e \u003cp\u003eProject Identification 685\u003c\/p\u003e \u003cp\u003eDependencies 685\u003c\/p\u003e \u003cp\u003eBuild Settings 686\u003c\/p\u003e \u003cp\u003eDependency Management 686\u003c\/p\u003e \u003cp\u003eMaven Lifecycle 687\u003c\/p\u003e \u003cp\u003eSummary 687\u003c\/p\u003e \u003cp\u003e\u003cb\u003eLesson\u003c\/b\u003e\u003cb\u003e 38: Pulling It All Together: Building the\u003c\/b\u003e\u003cb\u003e Class Roster with\u003c\/b\u003e\u003cb\u003e Spring 689\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eInclude the Spring Libraries 690\u003c\/p\u003e \u003cp\u003eHow Do I Know What My Dependency Entry Should Be? 691\u003c\/p\u003e \u003cp\u003eAdd Spring Configuration Files 692\u003c\/p\u003e \u003cp\u003eConvert the App Class to Use Spring 693\u003c\/p\u003e \u003cp\u003eDefining Beans 694\u003c\/p\u003e \u003cp\u003eModifying the App Class 696\u003c\/p\u003e \u003cp\u003eConvert the Unit Tests to Use Spring 697\u003c\/p\u003e \u003cp\u003eDefining Beans 698\u003c\/p\u003e \u003cp\u003eModifying the Test Class Constructor 699\u003c\/p\u003e \u003cp\u003eException Conditions 700\u003c\/p\u003e \u003cp\u003eSummary 701\u003c\/p\u003e \u003cp\u003eExercises 701\u003c\/p\u003e \u003cp\u003eExercise 1: DVD Library 701\u003c\/p\u003e \u003cp\u003e\u003cb\u003ePart VI: Appendices 702\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eAppendix A: Code Checklist 703\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eFunctionality 703\u003c\/p\u003e \u003cp\u003eStyle 703\u003c\/p\u003e \u003cp\u003e\u003cb\u003eAppendix B: Java concepts Study List 705\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eVariables 705\u003c\/p\u003e \u003cp\u003eMethods 705\u003c\/p\u003e \u003cp\u003eArrays 706\u003c\/p\u003e \u003cp\u003eMaking Decisions 706\u003c\/p\u003e \u003cp\u003eLoops 706\u003c\/p\u003e \u003cp\u003eJava\/JVM 706\u003c\/p\u003e \u003cp\u003eObjects 707\u003c\/p\u003e \u003cp\u003eInterfaces 708\u003c\/p\u003e \u003cp\u003eInheritance 708\u003c\/p\u003e \u003cp\u003eN-Tier Design 708\u003c\/p\u003e \u003cp\u003eCollections 709\u003c\/p\u003e \u003cp\u003eExceptions 709\u003c\/p\u003e \u003cp\u003eLambdas\/Streams 709\u003c\/p\u003e \u003cp\u003eSpring Core 709\u003c\/p\u003e \u003cp\u003e\u003cb\u003eAppendix C: Agile Approach Checklist for Console CRUD Applications 710\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eAssumptions 710\u003c\/p\u003e \u003cp\u003eRequirement Steps 711\u003c\/p\u003e \u003cp\u003eDesign Steps 711\u003c\/p\u003e \u003cp\u003eConstruction Steps 712\u003c\/p\u003e \u003cp\u003eIndex 714\u003c\/p\u003e\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003eSubject Areas: Computer programming \/ software development [\u003ca title=\"See our other books on Computer programming \/ software development\" href=\"https:\/\/freshlyprintedbooks.co.uk\/search?q=%22Computer%20programming%20\/%20software%20development%20%5BUM%5D%22\"\u003eUM\u003c\/a\u003e]\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\u003c\/font\u003e","brand":"Wiley","offers":[{"title":"Brand New","offer_id":52507374682392,"sku":"9781119775645","price":23.95,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0730\/2037\/5320\/files\/9781119775645.jpg?v=1786445312","url":"https:\/\/freshlyprintedbooks.co.uk\/products\/job-ready-java-paperback-softback-9781119775645","provider":"Freshly Printed Books","version":"1.0","type":"link"}