{"product_id":"job-ready-java-isbn-9781119775645","title":"Job Ready Java","description":"\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 \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 \u003cp\u003e\u003cb\u003eHAYTHEM BALTI, PhD,\u003c\/b\u003e is Director of Curriculum at Wiley’s Software Guild and mthree. He has created courses used by thousands of Software Guild Students in Java, Python, Go, and other development and data science competencies. He earned his doctorate in Computer Engineering and Computer Science from the University of Louisville.\u003c\/p\u003e\u003cp\u003e\u003cb\u003eALAN GALLOWAY\u003c\/b\u003e is Director of Instruction at Wiley’s Software Guild and mthree. H:e supervises a team of instructors who deliver large-scale training programs in technology.\u003c\/p\u003e  \u003cp\u003e\u003cb\u003ePREPARE YOURSELF TO TAKE ON REAL-WORLD JAVA APPLICATION PROGRAMMING\u003c\/b\u003e\u003c\/p\u003e\u003cp\u003eProgramming has become a widely applicable and useful skill in today’s world. Growing career opportunities for those with skills in languages like Java make it a more practical and marketable skill than ever.\u003c\/p\u003e\u003cp\u003e\u003ci\u003eJob Ready Java\u003c\/i\u003e delivers the foundational knowledge you need to tackle most of today’s Java-related jobs. Based on a professional Java course from The Software Guild, the book offers readers the opportunity to familiarize themselves with the techniques, theory, and practical implementations used by working Java programmers.\u003c\/p\u003e\u003cp\u003e\u003ci\u003eJob Ready Java\u003c\/i\u003e teaches fundamental and advanced Java skills plus it shows you how to combine everything you’ve learned into a coherent whole that will stick with you long after you’ve put down the book. Sections like “Pulling It Together” help you gain a birds-eye understanding of complex Java concepts and real-world applications.\u003c\/p\u003e\u003cp\u003ePerfect for Java novices looking to break into the field, \u003ci\u003eJob Ready Java\u003c\/i\u003e will also earn its place with experienced Java programmers needing to brush up on their skills with a comprehensive reference designed to help readers achieve Java mastery.\u003c\/p\u003e\u003cp\u003eAlong with foundational topics like objects, classes, and interfaces, you’ll learn more complex material, including service layers, unit testing, stateful and stateless code, and the Spring Framework.\u003c\/p\u003e\u003cp\u003eThis practical book also provides:\u003c\/p\u003e\u003cul\u003e\n\u003cli\u003eA thorough introduction on how to get set up with Java, including the entry, compilation, and running of Java programs using the IDE\u003c\/li\u003e\n\u003cli\u003eA practical discussion of the basics of object-oriented programming, including syntax, program flow, code organization, and more\u003c\/li\u003e\n\u003cli\u003eAn exploration of the fundamentals of classes and objects\u003c\/li\u003e\n\u003cli\u003eTreatments of intermediate and advanced Java programming\u003c\/li\u003e\n\u003c\/ul\u003e \u003cp\u003eThe companion website at \u003cb\u003ewww.wiley.com\/go\/jobreadyjava\u003c\/b\u003e provides supplemental files to be used by the reader in several lessons found in the book.\u003c\/p\u003e","brand":"Wiley","offers":[{"title":"Default Title","offer_id":47989490155749,"sku":"NP9781119775645","price":40.0,"currency_code":"USD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1842\/7735\/files\/9781119775645.jpg?v=1761784311","url":"https:\/\/k12savings.com\/es\/products\/job-ready-java-isbn-9781119775645","provider":"K12savings","version":"1.0","type":"link"}