دسترسی نامحدود
برای کاربرانی که ثبت نام کرده اند
برای ارتباط با ما می توانید از طریق شماره موبایل زیر از طریق تماس و پیامک با ما در ارتباط باشید
در صورت عدم پاسخ گویی از طریق پیامک با پشتیبان در ارتباط باشید
برای کاربرانی که ثبت نام کرده اند
درصورت عدم همخوانی توضیحات با کتاب
از ساعت 7 صبح تا 10 شب
ویرایش: [Eleventh edition, Global edition.] نویسندگان: Harvey M. Deitel, Paul J. Deitel سری: ISBN (شابک) : 9781292273747, 1292273747 ناشر: سال نشر: 2020 تعداد صفحات: [1244] زبان: English فرمت فایل : PDF (درصورت درخواست کاربر به PDF، EPUB یا AZW3 تبدیل می شود) حجم فایل: 8 Mb
در صورت تبدیل فایل کتاب Java how to program : late objects : introducing JShell به فرمت های PDF، EPUB، AZW3، MOBI و یا DJVU می توانید به پشتیبان اطلاع دهید تا فایل مورد نظر را تبدیل نمایند.
توجه داشته باشید کتاب جاوا نحوه برنامه نویسی : late objects : معرفی JShell نسخه زبان اصلی می باشد و کتاب ترجمه شده به فارسی نمی باشد. وبسایت اینترنشنال لایبرری ارائه دهنده کتاب های زبان اصلی می باشد و هیچ گونه کتاب ترجمه شده یا نوشته شده به فارسی را ارائه نمی دهد.
مجموعه پیشگامانه «چگونه برنامهنویسی» دیتلز، وسعت و عمق بینظیری از اصول برنامهنویسی، مفاهیم برنامهنویسی شیگرا و موضوعات سطح متوسط را برای مطالعه بیشتر ارائه میدهد. Java How to Program, Late Objects، ویرایش یازدهم، فناوریهای محاسباتی پیشرو را با استفاده از رویکرد کد زنده امضای Deitel ارائه میکند که مفاهیم را در صدها برنامه کاری کامل نشان میدهد. نسخه یازدهم پوشش به روز شده ای از Java SE 8 و قابلیت های Java SE 9 جدید، از جمله JShell، سیستم ماژول جاوا و دیگر موضوعات کلیدی جاوا 9 را ارائه می دهد. متن کامل بارگیری شده در رایانه شما با کتابهای الکترونیکی میتوانید: جستجوی مفاهیم، کلمات و عبارات کلیدی ایجاد نکات برجسته و یادداشتبرداری در حین مطالعه یادداشتهای خود را با دوستان خود به اشتراک بگذارید کتابهای الکترونیکی در رایانه شما دانلود میشوند و به صورت آفلاین از طریق قفسه کتاب در دسترس هستند (به صورت رایگان موجود است. دانلود)، به صورت آنلاین و همچنین از طریق برنامه های iPad و Android در دسترس است. پس از خرید، دسترسی فوری به این کتاب الکترونیکی خواهید داشت. محدودیت زمانی محصولات کتاب های الکترونیکی تاریخ انقضا ندارند. تا زمانی که قفسه کتاب خود را نصب کرده باشید، همچنان به محصولات کتاب الکترونیکی دیجیتال خود دسترسی خواهید داشت.
The Deitels' groundbreaking How to Program series offers unparalleled breadth and depth of programming fundamentals, object-oriented programming concepts and intermediate-level topics for further study. Java How to Program, Late Objects, 11th Edition, presents leading-edge computing technologies using the Deitel signature live-code approach, which demonstrates concepts in hundreds of complete working programs. The 11th Edition presents updated coverage of Java SE 8 and new Java SE 9 capabilities, including JShell, the Java Module System, and other key Java 9 topics. The full text downloaded to your computer With eBooks you can: search for key concepts, words and phrases make highlights and notes as you study share your notes with friends eBooks are downloaded to your computer and accessible either offline through the Bookshelf (available as a free download), available online and also via the iPad and Android apps. Upon purchase, you'll gain instant access to this eBook. Time limit The eBooks products do not have an expiry date. You will continue to access your digital ebook products whilst you have your Bookshelf installed.
Cover Title Page Copyright Page Contents Foreword Preface Before You Begin 1 Introduction to Computers, the Internet and Java 53 1.1 Introduction 54 1.2 Hardware and Software 56 1.2.1 Moore’s Law 56 1.2.2 Computer Organization 57 1.3 Data Hierarchy 59 1.4 Machine Languages, Assembly Languages and High-Level Languages 61 1.5 Basic Introduction to Object Terminology 62 1.5.1 Automobile as an Object 63 1.5.2 Methods and Classes 63 1.5.3 Instantiation 63 1.5.4 Reuse 63 1.5.5 Messages and Method Calls 64 1.5.6 Attributes and Instance Variables 64 1.5.7 Encapsulation and Information Hiding 64 1.5.8 Inheritance 64 1.5.9 Interfaces 65 1.5.10 Object-Oriented Analysis and Design (OOAD) 65 1.5.11 The UML (Unified Modeling Language) 65 1.6 Operating Systems 66 1.6.1 Windows—A Proprietary Operating System 66 1.6.2 Linux—An Open-Source Operating System 66 1.6.3 Apple’s macOS and Apple’s iOS for iPhone®, iPad® and iPod Touch® Devices 67 1.6.4 Google’s Android 67 1.7 Programming Languages 68 1.8 Java 70 1.9 A Typical Java Development Environment 71 1.10 Test-Driving a Java Application 74 1.11 Internet and World Wide Web 78 1.11.1 Internet: A Network of Networks 79 1.11.2 World Wide Web: Making the Internet User-Friendly 79 1.11.3 Web Services and Mashups 79 1.11.4 Internet of Things 80 1.12 Software Technologies 81 1.13 Getting Your Questions Answered 83 2 Introduction to Java Applications; Input/Output and Operators 87 2.1 Introduction 88 2.2 Your First Program in Java: Printing a Line of Text 88 2.2.1 Compiling the Application 92 2.2.2 Executing the Application 93 2.3 Modifying Your First Java Program 94 2.4 Displaying Text with printf 96 2.5 Another Application: Adding Integers 97 2.5.1 import Declarations 98 2.5.2 Declaring and Creating a Scanner to Obtain User Input from the Keyboard 98 2.5.3 Prompting the User for Input 99 2.5.4 Declaring a Variable to Store an Integer and Obtaining an Integer from the Keyboard 99 2.5.5 Obtaining a Second Integer 100 2.5.6 Using Variables in a Calculation 100 2.5.7 Displaying the Calculation Result 100 2.5.8 Java API Documentation 101 2.5.9 Declaring and Initializing Variables in Separate Statements 101 2.6 Memory Concepts 101 2.7 Arithmetic 102 2.8 Decision Making: Equality and Relational Operators 106 2.9 Wrap-Up 109 3 Control Statements: Part 1; Assignment, ++ and -- Operators 120 3.1 Introduction 121 3.2 Algorithms 121 3.3 Pseudocode 122 3.4 Control Structures 122 3.4.1 Sequence Structure in Java 123 3.4.2 Selection Statements in Java 124 3.4.3 Iteration Statements in Java 124 3.4.4 Summary of Control Statements in Java 124 3.5 if Single-Selection Statement 125 3.6 if…else Double-Selection Statement 126 3.6.1 Nested if…else Statements 127 3.6.2 Dangling-else Problem 128 3.6.3 Blocks 128 3.6.4 Conditional Operator (?:) 129 3.7 while Iteration Statement 129 3.8 Formulating Algorithms: Counter-Controlled Iteration 131 3.9 Formulating Algorithms: Sentinel-Controlled Iteration 135 3.10 Formulating Algorithms: Nested Control Statements 142 3.11 Compound Assignment Operators 146 3.12 Increment and Decrement Operators 147 3.13 Primitive Types 150 3.14 Wrap-Up 150 4 Control Statements: Part 2; Logical Operators 164 4.1 Introduction 165 4.2 Essentials of Counter-Controlled Iteration 165 4.3 for Iteration Statement 166 4.4 Examples Using the for Statement 170 4.4.1 Application: Summing the Even Integers from 2 to 20 171 4.4.2 Application: Compound-Interest Calculations 172 4.5 do…while Iteration Statement 175 4.6 switch Multiple-Selection Statement 176 4.7 break and continue Statements 182 4.7.1 break Statement 182 4.7.2 continue Statement 182 4.8 Logical Operators 183 4.8.1 Conditional AND (&&) Operator 184 4.8.2 Conditional OR (||) Operator 184 4.8.3 Short-Circuit Evaluation of Complex Conditions 185 4.8.4 Boolean Logical AND (&) and Boolean Logical Inclusive OR (|) Operators 185 4.8.5 Boolean Logical Exclusive OR (^) 186 4.8.6 Logical Negation (!) Operator 186 4.8.7 Logical Operators Example 187 4.9 Structured-Programming Summary 189 4.10 Wrap-Up 194 5 Methods 204 5.1 Introduction 205 5.2 Program Units in Java 205 5.3 static Methods, static Variables and Class Math 207 5.4 Declaring Methods 209 5.5 Notes on Declaring and Using Methods 213 5.6 Method-Call Stack and Activation Records 214 5.6.1 Method-Call Stack 214 5.6.2 Stack Frames 214 5.6.3 Local Variables and Stack Frames 215 5.6.4 Stack Overflow 215 5.7 Argument Promotion and Casting 215 5.8 Java API Packages 216 5.9 Case Study: Secure Random-Number Generation 218 5.10 Case Study: A Game of Chance; Introducing enums 223 5.11 Scope of Declarations 227 5.12 Method Overloading 230 5.12.1 Declaring Overloaded Methods 230 5.12.2 Distinguishing Between Overloaded Methods 231 5.12.3 Return Types of Overloaded Methods 231 5.13 Wrap-Up 232 6 Arrays and ArrayLists 245 6.1 Introduction 246 6.2 Primitive Types vs. Reference Types 247 6.3 Arrays 247 6.4 Declaring and Creating Arrays 249 6.5 Examples Using Arrays 250 6.5.1 Creating and Initializing an Array 250 6.5.2 Using an Array Initializer 251 6.5.3 Calculating the Values to Store in an Array 252 6.5.4 Summing the Elements of an Array 253 6.5.5 Using Bar Charts to Display Array Data Graphically 254 6.5.6 Using the Elements of an Array as Counters 256 6.5.7 Using Arrays to Analyze Survey Results 257 6.6 Exception Handling: Processing the Incorrect Response 259 6.6.1 The try Statement 259 6.6.2 Executing the catch Block 259 6.6.3 toString Method of the Exception Parameter 260 6.7 Enhanced for Statement 260 6.8 Passing Arrays to Methods 261 6.9 Pass-By-Value vs. Pass-By-Reference 264 6.10 Multidimensional Arrays 264 6.10.1 Arrays of One-Dimensional Arrays 265 6.10.2 Two-Dimensional Arrays with Rows of Different Lengths 265 6.10.3 Creating Two-Dimensional Arrays with Array-Creation Expressions 266 6.10.4 Two-Dimensional Array Example: Displaying Element Values 266 6.10.5 Common Multidimensional-Array Manipulations Performed with for Statements 267 6.11 Variable-Length Argument Lists 268 6.12 Using Command-Line Arguments 269 6.13 Class Arrays 271 6.14 Introduction to Collections and Class ArrayList 274 6.15 Wrap-Up 278 7 Introduction to Classes and Objects 298 7.1 Introduction 299 7.2 Instance Variables, set Methods and get Methods 300 7.2.1 Account Class with an Instance Variable, and set and get Methods 300 7.2.2 AccountTest Class That Creates and Uses an Object of Class Account 302 7.2.3 Compiling and Executing an App with Multiple Classes 305 7.2.4 Account UML Class Diagram 305 7.2.5 Additional Notes on Class AccountTest 306 7.2.6 Software Engineering with private Instance Variables and public set and get Methods 307 7.3 Default and Explicit Initialization for Instance Variables 308 7.4 Account Class: Initializing Objects with Constructors 309 7.4.1 Declaring an Account Constructor for Custom Object Initialization 309 7.4.2 Class AccountTest: Initializing Account Objects When They’re Created 310 7.5 Account Class with a Balance 312 7.5.1 Account Class with a balance Instance Variable of Type double 312 7.5.2 AccountTest Class to Use Class Account 313 7.6 Case Study: Card Shuffling and Dealing Simulation 316 7.7 Case Study: Class GradeBook Using an Array toStore Grades 320 7.8 Case Study: Class GradeBook Using a Two-Dimensional Array 326 7.9 Wrap-Up 331 8 Classes and Objects: A Deeper Look 339 8.1 Introduction 340 8.2 Time Class Case Study 340 8.3 Controlling Access to Members 345 8.4 Referring to the Current Object’s Members with the this Reference 346 8.5 Time Class Case Study: Overloaded Constructors 348 8.6 Default and No-Argument Constructors 353 8.7 Notes on Set and Get Methods 354 8.8 Composition 355 8.9 enum Types 358 8.10 Garbage Collection 361 8.11 static Class Members 361 8.12 static Import 365 8.13 final Instance Variables 366 8.14 Package Access 367 8.15 Using BigDecimal for Precise Monetary Calculations 368 8.16 (Optional) GUI and Graphics Case Study: Using Objects with Graphics 371 8.17 Wrap-Up 375 9 Object-Oriented Programming: Inheritance 383 9.1 Introduction 384 9.2 Superclasses and Subclasses 385 9.3 protected Members 387 9.4 Relationship Between Superclasses and Subclasses 388 9.4.1 Creating and Using a CommissionEmployee Class 388 9.4.2 Creating and Using a BasePlusCommissionEmployee Class 393 9.4.3 Creating a CommissionEmployee–BasePlusCommissionEmployee Inheritance Hierarchy 398 9.4.4 CommissionEmployee–BasePlusCommissionEmployee Inheritance Hierarchy Using protected Instance Variables 401 9.4.5 CommissionEmployee–BasePlusCommissionEmployee Inheritance Hierarchy Using private Instance Variables 404 9.5 Constructors in Subclasses 408 9.6 Class Object 409 9.7 Designing with Composition vs. Inheritance 410 9.8 Wrap-Up 412 10 Object-Oriented Programming: Polymorphism and Interfaces 417 10.1 Introduction 418 10.2 Polymorphism Examples 420 10.3 Demonstrating Polymorphic Behavior 421 10.4 Abstract Classes and Methods 423 10.5 Case Study: Payroll System Using Polymorphism 426 10.5.1 Abstract Superclass Employee 427 10.5.2 Concrete Subclass SalariedEmployee 429 10.5.3 Concrete Subclass HourlyEmployee 431 10.5.4 Concrete Subclass CommissionEmployee 432 10.5.5 Indirect Concrete Subclass BasePlusCommissionEmployee 434 10.5.6 Polymorphic Processing, Operator instanceof and Downcasting 435 10.6 Allowed Assignments Between Superclass and Subclass Variables 440 10.7 final Methods and Classes 440 10.8 A Deeper Explanation of Issues with Calling Methods from Constructors 441 10.9 Creating and Using Interfaces 442 10.9.1 Developing a Payable Hierarchy 444 10.9.2 Interface Payable 445 10.9.3 Class Invoice 445 10.9.4 Modifying Class Employee to Implement Interface Payable 447 10.9.5 Using Interface Payable to Process Invoices and Employees Polymorphically 449 10.9.6 Some Common Interfaces of the Java API 450 10.10 Java SE 8 Interface Enhancements 451 10.10.1 default Interface Methods 451 10.10.2 static Interface Methods 452 10.10.3 Functional Interfaces 452 10.11 Java SE 9 private Interface Methods 453 10.12 private Constructors 453 10.13 Program to an Interface, Not an Implementation 454 10.13.1 Implementation Inheritance Is Best for Small Numbers of Tightly Coupled Classes 454 10.13.2 Interface Inheritance Is Best for Flexibility 454 10.13.3 Rethinking the Employee Hierarchy 455 10.14 (Optional) GUI and Graphics Case Study: Drawing with Polymorphism 456 10.15 Wrap-Up 458 11 Exception Handling: A Deeper Look 465 11.1 Introduction 466 11.2 Example: Divide by Zero without Exception Handling 467 11.3 Example: Handling ArithmeticExceptions and InputMismatchExceptions 469 11.4 When to Use Exception Handling 475 11.5 Java Exception Hierarchy 475 11.6 finally Block 479 11.7 Stack Unwinding and Obtaining Information from an Exception 483 11.8 Chained Exceptions 486 11.9 Declaring New Exception Types 488 11.10 Preconditions and Postconditions 489 11.11 Assertions 489 11.12 try-with-Resources: Automatic ResourceDeallocation 491 11.13 Wrap-Up 492 12 JavaFX Graphical User Interfaces: Part 1 498 12.1 Introduction 499 12.2 JavaFX Scene Builder 500 12.3 JavaFX App Window Structure 501 12.4 Welcome App—Displaying Text and an Image 502 12.4.1 Opening Scene Builder and Creating the File Welcome.fxml 502 12.4.2 Adding an Image to the Folder Containing Welcome.fxml 503 12.4.3 Creating a VBox Layout Container 503 12.4.4 Configuring the VBox Layout Container 504 12.4.5 Adding and Configuring a Label 504 12.4.6 Adding and Configuring an ImageView 505 12.4.7 Previewing the Welcome GUI 507 12.5 Tip Calculator App—Introduction to Event Handling 507 12.5.1 Test-Driving the Tip Calculator App 508 12.5.2 Technologies Overview 509 12.5.3 Building the App’s GUI 511 12.5.4 TipCalculator Class 518 12.5.5 TipCalculatorController Class 520 12.6 Features Covered in the Other JavaFX Chapters 525 12.7 Wrap-Up 13 JavaFX GUI: Part 2 533 13.1 Introduction 534 13.2 Laying Out Nodes in a Scene Graph 534 13.3 Painter App: RadioButtons, Mouse Events and Shapes 536 13.3.1 Technologies Overview 536 13.3.2 Creating the Painter.fxml File 538 13.3.3 Building the GUI 538 13.3.4 Painter Subclass of Application 541 13.3.5 PainterController Class 542 13.4 Color Chooser App: Property Bindings andProperty Listeners 546 13.4.1 Technologies Overview 546 13.4.2 Building the GUI 547 13.4.3 ColorChooser Subclass of Application 549 13.4.4 ColorChooserController Class 550 13.5 Cover Viewer App: Data-Driven GUIs with JavaFX Collections 552 13.5.1 Technologies Overview 553 13.5.2 Adding Images to the App’s Folder 553 13.5.3 Building the GUI 553 13.5.4 CoverViewer Subclass of Application 555 13.5.5 CoverViewerController Class 555 13.6 Cover Viewer App: Customizing ListView Cells 557 13.6.1 Technologies Overview 558 13.6.2 Copying the CoverViewer App 558 13.6.3 ImageTextCell Custom Cell Factory Class 559 13.6.4 CoverViewerController Class 560 13.7 Additional JavaFX Capabilities 561 13.8 JavaFX 9: Java SE 9 JavaFX Updates 563 13.9 Wrap-Up 565 14 Strings, Characters and Regular Expressions 574 14.1 Introduction 575 14.2 Fundamentals of Characters and Strings 575 14.3 Class String 576 14.3.1 String Constructors 576 14.3.2 String Methods length, charAt and getChars 577 14.3.3 Comparing Strings 579 14.3.4 Locating Characters and Substrings in Strings 583 14.3.5 Extracting Substrings from Strings 585 14.3.6 Concatenating Strings 586 14.3.7 Miscellaneous String Methods 587 14.3.8 String Method valueOf 588 14.4 Class StringBuilder 589 14.4.1 StringBuilder Constructors 590 14.4.2 StringBuilder Methods length, capacity, setLength and ensureCapacity 591 14.4.3 StringBuilder Methods charAt, setCharAt, getChars and reverse 592 14.4.4 StringBuilder append Methods 593 14.4.5 StringBuilder Insertion and Deletion Methods 595 14.5 Class Character 596 14.6 Tokenizing Strings 601 14.7 Regular Expressions, Class Pattern and Class Matcher 602 14.7.1 Replacing Substrings and Splitting Strings 607 14.7.2 Classes Pattern and Matcher 609 14.8 Wrap-Up 611 15 Files, Input/Output Streams, NIO and XML Serialization 622 15.1 Introduction 623 15.2 Files and Streams 623 15.3 Using NIO Classes and Interfaces to Get File and Directory Information 625 15.4 Sequential Text Files 629 15.4.1 Creating a Sequential Text File 629 15.4.2 Reading Data from a Sequential Text File 632 15.4.3 Case Study: A Credit-Inquiry Program 633 15.4.4 Updating Sequential Files 638 15.5 XML Serialization 638 15.5.1 Creating a Sequential File Using XML Serialization 638 15.5.2 Reading and Deserializing Data from a Sequential File 644 15.6 FileChooser and DirectoryChooser Dialogs 645 15.7 (Optional) Additional java.io Classes 651 15.7.1 Interfaces and Classes for Byte-Based Input and Output 651 15.7.2 Interfaces and Classes for Character-Based Input and Output 653 15.8 Wrap-Up 654 16 Generic Collections 662 16.1 Introduction 663 16.2 Collections Overview 663 16.3 Type-Wrapper Classes 665 16.4 Autoboxing and Auto-Unboxing 665 16.5 Interface Collection and Class Collections 665 16.6 Lists 666 16.6.1 ArrayList and Iterator 667 16.6.2 LinkedList 669 16.7 Collections Methods 674 16.7.1 Method sort 675 16.7.2 Method shuffle 678 16.7.3 Methods reverse, fill, copy, max and min 680 16.7.4 Method binarySearch 682 16.7.5 Methods addAll, frequency and disjoint 683 16.8 Class PriorityQueue and Interface Queue 685 16.9 Sets 686 16.10 Maps 689 16.11 Synchronized Collections 693 16.12 Unmodifiable Collections 693 16.13 Abstract Implementations 694 16.14 Java SE 9: Convenience Factory Methods for Immutable Collections 694 16.15 Wrap-Up 698 17 Lambdas and Streams 704 17.1 Introduction 705 17.2 Streams and Reduction 707 17.2.1 Summing the Integers from 1 through 10 with a for Loop 707 17.2.2 External Iteration with for Is Error Prone 708 17.2.3 Summing with a Stream and Reduction 708 17.2.4 Internal Iteration 709 17.3 Mapping and Lambdas 710 17.3.1 Lambda Expressions 711 17.3.2 Lambda Syntax 712 17.3.3 Intermediate and Terminal Operations 713 17.4 Filtering 714 17.5 How Elements Move Through Stream Pipelines 716 17.6 Method References 717 17.6.1 Creating an IntStream of Random Values 718 17.6.2 Performing a Task on Each Stream Element with forEach and a Method Reference 718 17.6.3 Mapping Integers to String Objects with mapToObj 719 17.6.4 Concatenating Strings with collect 719 17.7 IntStream Operations 720 17.7.1 Creating an IntStream and Displaying Its Values 721 17.7.2 Terminal Operations count, min, max, sum and average 721 17.7.3 Terminal Operation reduce 722 17.7.4 Sorting IntStream Values 724 17.8 Functional Interfaces 725 17.9 Lambdas: A Deeper Look 726 17.10 StreamManipulations 727 17.10.1 Creating a Stream 728 17.10.2 Sorting a Stream and Collecting the Results 729 17.10.3 Filtering a Stream and Storing the Results for Later Use 729 17.10.4 Filtering and Sorting a Stream and Collecting the Results 730 17.10.5 Sorting Previously Collected Results 730 17.11 Stream Manipulations 730 17.11.1 Mapping Strings to Uppercase 731 17.11.2 Filtering Strings Then Sorting Them in Case-InsensitiveAscending Order 732 17.11.3 Filtering Strings Then Sorting Them in Case-Insensitive Descending Order 732 17.12 Stream Manipulations 733 17.12.1 Creating and Displaying a List 734 17.12.2 Filtering Employees with Salaries in a Specified Range 735 17.12.3 Sorting Employees By Multiple Fields 738 17.12.4 Mapping Employees to Unique-Last-Name Strings 740 17.12.5 Grouping Employees By Department 741 17.12.6 Counting the Number of Employees in Each Department 742 17.12.7 Summing and Averaging Employee Salaries 743 17.13 Creating a Stream from a File 744 17.14 Streams of Random Values 747 17.15 Infinite Streams 749 17.16 Lambda Event Handlers 751 17.17 Additional Notes on Java SE 8 Interfaces 751 17.18 Wrap-Up 752 18 Recursion 766 18.1 Introduction 767 18.2 Recursion Concepts 768 18.3 Example Using Recursion: Factorials 769 18.4 Reimplementing Class FactorialCalculator Using BigInteger 771 18.5 Example Using Recursion: Fibonacci Series 773 18.6 Recursion and the Method-Call Stack 776 18.7 Recursion vs. Iteration 777 18.8 Towers of Hanoi 779 18.9 Fractals 781 18.9.1 Koch Curve Fractal 782 18.9.2 (Optional) Case Study: Lo Feather Fractal 783 18.9.3 (Optional) Fractal App GUI 785 18.9.4 (Optional) FractalController Class 787 18.10 Recursive Backtracking 792 18.11 Wrap-Up 792 19 Searching, Sorting and Big O 801 19.1 Introduction 802 19.2 Linear Search 803 19.3 Big O Notation 806 19.3.1 O(1) Algorithms 806 19.3.2 O(n) Algorithms 806 19.3.3 O(n2) Algorithms 806 19.3.4 Big O of the Linear Search 807 19.4 Binary Search 807 19.4.1 Binary Search Implementation 808 19.4.2 Efficiency of the Binary Search 811 19.5 Sorting Algorithms 812 19.6 Selection Sort 812 19.6.1 Selection Sort Implementation 813 19.6.2 Efficiency of the Selection Sort 815 19.7 Insertion Sort 815 19.7.1 Insertion Sort Implementation 816 19.7.2 Efficiency of the Insertion Sort 818 19.8 Merge Sort 819 19.8.1 Merge Sort Implementation 819 19.8.2 Efficiency of the Merge Sort 824 19.9 Big O Summary for This Chapter’s Searching and Sorting Algorithms 824 19.10 Massive Parallelism and Parallel Algorithms 825 19.11 Wrap-Up 825 20 Generic Classes and Methods: A Deeper Look 831 20.1 Introduction 832 20.2 Motivation for Generic Methods 832 20.3 Generic Methods: Implementation and Compile-Time Translation 834 20.4 Additional Compile-Time Translation Issues: Methods That Use a Type Parameter as the Return Type 837 20.5 Overloading Generic Methods 840 20.6 Generic Classes 841 20.7 Wildcards in Methods That Accept Type Parameters 848 20.8 Wrap-Up 852 21 Custom Generic Data Structures 856 21.1 Introduction 857 21.2 Self-Referential Classes 858 21.3 Dynamic Memory Allocation 858 21.4 Linked Lists 859 21.4.1 Singly Linked Lists 859 21.4.2 Implementing a Generic List Class 860 21.4.3 Generic Classes ListNode and List 863 21.4.4 Class ListTest 863 21.4.5 List Method insertAtFront 865 21.4.6 List Method insertAtBack 866 21.4.7 List Method removeFromFront 866 21.4.8 List Method removeFromBack 867 21.4.9 List Method print 868 21.4.10 Creating Your Own Packages 868 21.5 Stacks 873 21.6 Queues 876 21.7 Trees 878 21.8 Wrap-Up 885 22 JavaFX Graphics and Multimedia 910 22.1 Introduction 911 22.2 Controlling Fonts with Cascading Style Sheets (CSS) 912 22.2.1 CSS That Styles the GUI 912 22.2.2 FXML That Defines the GUI—Introduction to XML Markup 915 22.2.3 Referencing the CSS File from FXML 918 22.2.4 Specifying the VBox’s Style Class 918 22.2.5 Programmatically Loading CSS 918 22.3 Displaying Two-Dimensional Shapes 919 22.3.1 Defining Two-Dimensional Shapes with FXML 919 22.3.2 CSS That Styles the Two-Dimensional Shapes 922 22.4 Polylines, Polygons and Paths 924 22.4.1 GUI and CSS 925 22.4.2 PolyShapesController Class 926 22.5 Transforms 929 22.6 Playing Video with Media, MediaPlayer and MediaViewer 931 22.6.1 VideoPlayer GUI 932 22.6.2 VideoPlayerController Class 934 22.7 Transition Animations 938 22.7.1 TransitionAnimations.fxml 938 22.7.2 TransitionAnimationsController Class 940 22.8 Timeline Animations 944 22.9 Frame-by-Frame Animation with AnimationTimer 947 22.10 Drawing on a Canvas 949 22.11 Three-Dimensional Shapes 954 22.12 Wrap-Up 958 23 Concurrency 973 23.1 Introduction 974 23.2 Thread States and Life Cycle 976 23.2.1 New and Runnable States 977 23.2.2 Waiting State 977 23.2.3 Timed Waiting State 977 23.2.4 Blocked State 977 23.2.5 Terminated State 977 23.2.6 Operating-System View of the Runnable State 978 23.2.7 Thread Priorities and Thread Scheduling 978 23.2.8 Indefinite Postponement and Deadlock 979 23.3 Creating and Executing Threads with the Executor Framework 979 23.4 Thread Synchronization 983 23.4.1 Immutable Data 984 23.4.2 Monitors 984 23.4.3 Unsynchronized Mutable Data Sharing 985 23.4.4 Synchronized Mutable Data Sharing—Making Operations Atomic 989 23.5 Producer/Consumer Relationship without Synchronization 992 23.6 Producer/Consumer Relationship: ArrayBlockingQueue 1000 23.7 (Advanced) Producer/Consumer Relationship with synchronized, wait, notify and notifyAll 1003 23.8 (Advanced) Producer/Consumer Relationship: Bounded Buffers 1009 23.9 (Advanced) Producer/Consumer Relationship: The Lock and Condition Interfaces 1017 23.10 Concurrent Collections 1024 23.11 Multithreading in JavaFX 1026 23.11.1 Performing Computations in a Worker Thread: Fibonacci Numbers 1027 23.11.2 Processing Intermediate Results: Sieve of Eratosthenes 1032 23.12 sort/parallelSort Timings with the Java SE 8 Date/Time API 1038 23.13 Java SE 8: Sequential vs. Parallel Streams 1041 23.14 (Advanced) Interfaces Callable and Future 1043 23.15 (Advanced) Fork/Join Framework 1048 23.16 Wrap-Up 1048 24 Accessing Databases with JDBC 1060 24.1 Introduction 1061 24.2 Relational Databases 1062 24.3 A books Database 1063 24.4 SQL 1067 24.4.1 Basic SELECT Query 1068 24.4.2 WHERE Clause 1068 24.4.3 ORDER BY Clause 1070 24.4.4 Merging Data from Multiple Tables: INNER JOIN 1072 24.4.5 INSERT Statement 1073 24.4.6 UPDATE Statement 1074 24.4.7 DELETE Statement 1075 24.5 Setting Up a Java DB Database 1076 24.5.1 Creating the Chapter’s Databases on Windows 1077 24.5.2 Creating the Chapter’s Databases on macOS 1078 24.5.3 Creating the Chapter’s Databases on Linux 1078 24.6 Connecting to and Querying a Database 1078 24.6.1 Automatic Driver Discovery 1080 24.6.2 Connecting to the Database 1080 24.6.3 Creating a Statement for Executing Queries 1081 24.6.4 Executing a Query 1081 24.6.5 Processing a Query’s ResultSet 1082 24.7 Querying the books Database 1083 24.7.1 ResultSetTableModel Class 1083 24.7.2 DisplayQueryResults App’s GUI 1090 24.7.3 DisplayQueryResultsController Class 1090 24.8 RowSet Interface 1095 24.9 PreparedStatements 1098 24.9.1 AddressBook App That Uses PreparedStatements 1099 24.9.2 Class Person 1099 24.9.3 Class PersonQueries 1101 24.9.4 AddressBook GUI 1104 24.9.5 Class AddressBookController 1105 24.10 Stored Procedures 1110 24.11 Transaction Processing 1110 24.12 Wrap-Up 1111 25 Introduction to JShell: Java 9’s REPL for Interactive Java 1119 25.1 Introduction 1120 25.2 Installing JDK 9 1122 25.3 Introduction to JShell 1122 25.3.1 Starting a JShell Session 1123 25.3.2 Executing Statements 1123 25.3.3 Declaring Variables Explicitly 1124 25.3.4 Listing and Executing Prior Snippets 1126 25.3.5 Evaluating Expressions and Declaring Variables Implicitly 1128 25.3.6 Using Implicitly Declared Variables 1128 25.3.7 Viewing a Variable’s Value 1129 25.3.8 Resetting a JShell Session 1129 25.3.9 Writing Multiline Statements 1129 25.3.10 Editing Code Snippets 1130 25.3.11 Exiting JShell 1133 25.4 Command-Line Input in JShell 1133 25.5 Declaring and Using Classes 1134 25.5.1 Creating a Class in JShell 1135 25.5.2 Explicitly Declaring Reference-Type Variables 1135 25.5.3 Creating Objects 1136 25.5.4 Manipulating Objects 1136 25.5.5 Creating a Meaningful Variable Name for an Expression 1137 25.5.6 Saving and Opening Code-Snippet Files 1138 25.6 Discovery with JShell Auto-Completion 1138 25.6.1 Auto-Completing Identifiers 1139 25.6.2 Auto-Completing JShell Commands 1140 25.7 Exploring a Class’s Members and Viewing Documentation 1140 25.7.1 Listing Class Math’s static Members 1141 25.7.2 Viewing a Method’s Parameters 1141 25.7.3 Viewing a Method’s Documentation 1142 25.7.4 Viewing a public Field’s Documentation 1142 25.7.5 Viewing a Class’s Documentation 1143 25.7.6 Viewing Method Overloads 1143 25.7.7 Exploring Members of a Specific Object 1144 25.8 Declaring Methods 1146 25.8.1 Forward Referencing an Undeclared Method—Declaring Method displayCubes 1146 25.8.2 Declaring a Previously Undeclared Method 1146 25.8.3 Testing cube and Replacing Its Declaration 1147 25.8.4 Testing Updated Method cube and Method displayCubes 1147 25.9 Exceptions 1148 25.10 Importing Classes and Adding Packages to the CLASSPATH 1149 25.11 Using an External Editor 1151 25.12 Summary of JShell Commands 1153 25.12.1 Getting Help in JShell 1154 25.12.2 /edit Command: Additional Features 1155 25.12.3 /reload Command 1155 25.12.4 /drop Command 1156 25.12.5 Feedback Modes 1156 25.12.6 Other JShell Features Configurable with /set 1158 25.13 Keyboard Shortcuts for Snippet Editing 1159 25.14 How JShell Reinterprets Java for Interactive Use 1159 25.15 IDE JShell Support 1160 25.16 Wrap-Up 1160 Chapters on the Web 1176 A Operator Precedence Chart 1177 B ASCII Character Set 1179 C Keywords and Reserved Words 1180 D Primitive Types 1181 E Using the Debugger 1182 E.1 Introduction 1183 E.2 Breakpoints and the run, stop, cont and print Commands 1183 E.3 The print and set Commands 1187 E.4 Controlling Execution Using the step, step up and next Commands 1189 E.5 The watch Command 1191 E.6 The clear Command 1193 Appendices on the Web 1197 Index 1199 Symbols Numerics A B C D E F G H I J K L M N O P Q R S T U V W X Y Z