Java How to program Early Object, Eleventh Edition
By Paul Deitel and Harvey Deitel
Contents:
Foreword 25
Preface 27
Before You Begin 47
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 Introduction to Object Technology 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 Methopd 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 Introduction to Classes, Objects, Methods
and Strings 120
3.1 Introduction 121
3.2 Instance Variables, set Methods and get Methods 122
3.2.1 Account Class with an Instance Variable, and set and get Methods 122
3.2.2 AccountTest Class That Creates and Uses an Object of
Class Account 125
3.2.3 Compiling and Executing an App with Multiple Classes 128
3.2.4 Account UML Class Diagram 128
3.2.5 Additional Notes on Class AccountTest 130
3.2.6 Software Engineering with private Instance Variables and
public set and get Methods 130
3.3 Account Class: Initializing Objects with Constructors 131
3.3.1 Declaring an Account Constructor for Custom Object Initialization 132
3.3.2 Class AccountTest: Initializing Account Objects When
They’re Created 133
3.4 Account Class with a Balance; Floating-Point Numbers 134
3.4.1 Account Class with a balance Instance Variable of Type double 135
3.4.2 AccountTest Class to Use Class Account 137
3.5 Primitive Types vs. Reference Types 140
3.6 (Optional) GUI and Graphics Case Study: A Simple GUI 140
3.6.1 What Is a Graphical User Interface? 142
3.6.2 JavaFX Scene Builder and FXML 142
3.6.3 Welcome App—Displaying Text and an Image 142
3.6.4 Opening Scene Builder and Creating the File Welcome.fxml 142
3.6.5 Adding an Image to the Folder Containing Welcome.fxml 144
3.6.6 Creating a VBox Layout Container 144
3.6.7 Configuring the VBox 144
3.6.8 Adding and Configuring a Label 144
3.6.9 Adding and Configuring an ImageView 146
3.6.10 Previewing the Welcome GUI 147
3.7 Wrap-Up 148
4 Control Statements: Part 1; Assignment, ++
and — Operators 156
4.1 Introduction 157
4.2 Algorithms 157
4.3 Pseudocode 158
4.4 Control Structures 158
4.4.1 Sequence Structure in Java 159
4.4.2 Selection Statements in Java 160
4.4.3 Iteration Statements in Java 160
4.4.4 Summary of Control Statements in Java 160
4.5 if Single-Selection Statement 161
4.6 if…else Double-Selection Statement 162
4.6.1 Nested if…else Statements 163
4.6.2 Dangling-else Problem 164
4.6.3 Blocks 164
4.6.4 Conditional Operator (?:) 165
4.7 Student Class: Nested if…else Statements 165
4.8 while Iteration Statement 168
4.9 Formulating Algorithms: Counter-Controlled Iteration 170
6.4 Methods with Multiple Parameters 269
6.5 Notes on Declaring and Using Methods 273
6.6 Method-Call Stack and Activation Records 274
6.6.1 Method-Call Stack 274
6.6.2 Stack Frames 274
6.6.3 Local Variables and Stack Frames 274
6.6.4 Stack Overflow 275
6.7 Argument Promotion and Casting 275
6.8 Java API Packages 276
6.9 Case Study: Secure Random-Number Generation 278
6.10 Case Study: A Game of Chance; Introducing enum Types 283
6.11 Scope of Declarations 288
6.12 Method Overloading 290
6.12.1 Declaring Overloaded Methods 290
6.12.2 Distinguishing Between Overloaded Methods 291
6.12.3 Return Types of Overloaded Methods 292
6.13 (Optional) GUI and Graphics Case Study: Colors and Filled Shapes 292
6.14Wrap-Up 295
7 Arrays and ArrayLists 309
7.1 Introduction 310
7.2 Arrays 311
7.3 Declaring and Creating Arrays 312
7.4 Examples Using Arrays 314
7.4.1 Creating and Initializing an Array 314
7.4.2 Using an Array Initializer 315
7.4.3 Calculating the Values to Store in an Array 316
7.4.4 Summing the Elements of an Array 317
7.4.5 Using Bar Charts to Display Array Data Graphically 317
7.4.6 Using the Elements of an Array as Counters 319
7.4.7 Using Arrays to Analyze Survey Results 320
7.5 Exception Handling: Processing the Incorrect Response 322
7.5.1 The try Statement 322
7.5.2 Executing the catch Block 322
7.5.3 toString Method of the Exception Parameter 323
7.6 Case Study: Card Shuffling and Dealing Simulation 323
7.7 Enhanced for Statement 328
7.8 Passing Arrays to Methods 329
7.9 Pass-By-Value vs. Pass-By-Reference 331
7.10 Case Study: Class GradeBook Using an Array to Store Grades 332
7.11 Multidimensional Arrays 337
7.11.1 Arrays of One-Dimensional Arrays 338
7.11.2 Two-Dimensional Arrays with Rows of Different Lengths 338
7.11.3 Creating Two-Dimensional Arrays with Array-Creation
Expressions 339
7.11.4 Two-Dimensional Array Example: Displaying Element Values 339
7.11.5 Common Multidimensional-Array Manipulations Performed
with for Statements 340
7.12 Case Study: Class GradeBook Using a Two-Dimensional Array 341
7.13 Variable-Length Argument Lists 347
7.14 Using Command-Line Arguments 348
7.15 Class Arrays 350
7.16 Introduction to Collections and Class ArrayList 353
7.17 (Optional) GUI and Graphics Case Study: Drawing Arcs 357
7.18 Wrap-Up 360
8 Classes and Objects: A Deeper Look 381
8.1 Introduction 382
8.2 Time Class Case Study 382
8.3 Controlling Access to Members 387
8.4 Referring to the Current Object’s Members with the this Reference 388
8.5 Time Class Case Study: Overloaded Constructors 390
8.6 Default and No-Argument Constructors 395
8.7 Notes on Set and Get Methods 396
8.8 Composition 397
8.9 enum Types 400
8.10 Garbage Collection 403
8.11 static Class Members 403
8.12 static Import 407
8.13 final Instance Variables 408
8.14 Package Access 409
8.15 Using BigDecimal for Precise Monetary Calculations 410
8.16 (Optional) GUI and Graphics Case Study: Using Objects with Graphics 413
8.17Wrap-Up 417
9 Object-Oriented Programming: Inheritance 425
9.1 Introduction 426
9.2 Superclasses and Subclasses 427
9.3 protected Members 429
9.4 Relationship Between Superclasses and Subclasses 430
9.4.1 Creating and Using a CommissionEmployee Class 430
9.4.2 Creating and Using a BasePlusCommissionEmployee Class 435
9.4.3 Creating a CommissionEmployee–BasePlusCommissionEmployee
Inheritance Hierarchy 440
9.4.4 CommissionEmployee–BasePlusCommissionEmployee
Inheritance Hierarchy Using protected Instance Variables 443
9.4.5 CommissionEmployee–BasePlusCommissionEmployee Inheritance
Hierarchy Using private Instance Variables 446
9.5 Constructors in Subclasses 450
9.6 Class Object 451
9.7 Designing with Composition vs. Inheritance 452
9.8 Wrap-Up 454
10 Object-Oriented Programming: Polymorphism
and Interfaces 459
10.1 Introduction 460
10.2 Polymorphism Examples 462
10.3 Demonstrating Polymorphic Behavior 463
10.4 Abstract Classes and Methods 465
10.5 Case Study: Payroll System Using Polymorphism 468
10.5.1 Abstract Superclass Employee 469
10.5.2 Concrete Subclass SalariedEmployee 471
10.5.3 Concrete Subclass HourlyEmployee 473
10.5.4 Concrete Subclass CommissionEmployee 474
10.5.5 Indirect Concrete Subclass BasePlusCommissionEmployee 476
10.5.6 Polymorphic Processing, Operator instanceof and Downcasting 477
10.6 Allowed Assignments Between Superclass and Subclass Variables 482
10.7 final Methods and Classes 482
10.8 A Deeper Explanation of Issues with Calling Methods from Constructors 483
10.9 Creating and Using Interfaces 484
10.9.1 Developing a Payable Hierarchy 486
10.9.2 Interface Payable 487
10.9.3 Class Invoice 487
10.9.4 Modifying Class Employee to Implement Interface Payable 489
10.9.5 Using Interface Payable to Process Invoices and Employees
Polymorphically 491
10.9.6 Some Common Interfaces of the Java API 492
10.10 Java SE 8 Interface Enhancements 493
10.10.1 default Interface Methods 493
10.10.2 static Interface Methods 494
10.10.3 Functional Interfaces 494
10.11 Java SE 9 private Interface Methods 495
10.12 private Constructors 495
10.13 Program to an Interface, Not an Implementation 496
10.13.1 Implementation Inheritance Is Best for Small Numbers of
Tightly Coupled Classes 496
10.13.2 Interface Inheritance Is Best for Flexibility 496
10.13.3 Rethinking the Employee Hierarchy 497
10.14 (Optional) GUI and Graphics Case Study: Drawing with Polymorphism 498
10.15 Wrap-Up 500
11 Exception Handling: A Deeper Look 507
11.1 Introduction 508
11.2 Example: Divide by Zero without Exception Handling 509
11.3 Example: Handling ArithmeticExceptions and
InputMismatchExceptions 511
11.4 When to Use Exception Handling 517
11.5 Java Exception Hierarchy 517
11.6 finally Block 521
11.7 Stack Unwinding and Obtaining Information from an Exception 525
11.8 Chained Exceptions 528
11.9 Declaring New Exception Types 530
11.10 Preconditions and Postconditions 531
11.11 Assertions 531
11.12 try-with-Resources: Automatic Resource Deallocation 533
11.13 Wrap-Up 534
12 JavaFX Graphical User Interfaces: Part 1 540
12.1 Introduction 541
12.2 JavaFX Scene Builder 542
12.3 JavaFX App Window Structure 543
12.4 Welcome App—Displaying Text and an Image 544
12.4.1 Opening Scene Builder and Creating the File Welcome.fxml 544
12.4.2 Adding an Image to the Folder Containing Welcome.fxml 545
12.4.3 Creating a VBox Layout Container 545
12.4.4 Configuring the VBox Layout Container 546
12.4.5 Adding and Configuring a Label 546
12.4.6 Adding and Configuring an ImageView 547
12.4.7 Previewing the Welcome GUI 549
12.5 Tip Calculator App—Introduction to Event Handling 549
12.5.1 Test-Driving the Tip Calculator App 550
12.5.2 Technologies Overview 551
12.5.3 Building the App’s GUI 553
12.5.4 TipCalculator Class 560
12.5.5 TipCalculatorController Class 562
12.6 Features Covered in the Other JavaFX Chapters 567
12.7Wrap-Up 567
13 JavaFX GUI: Part 2 575
13.1 Introduction 576
13.2 Laying Out Nodes in a Scene Graph 576
13.3 Painter App: RadioButtons, Mouse Events and Shapes 578
13.3.1 Technologies Overview 578
13.3.2 Creating the Painter.fxml File 580
13.3.3 Building the GUI 580
13.3.4 Painter Subclass of Application 583
13.3.5 PainterController Class 584
13.4 Color Chooser App: Property Bindings and Property Listeners 588
13.4.1 Technologies Overview 588
13.4.2 Building the GUI 589
13.4.3 ColorChooser Subclass of Application 591
13.4.4 ColorChooserController Class 592
13.5 Cover Viewer App: Data-Driven GUIs with JavaFX Collections 594
13.5.1 Technologies Overview 595
13.5.2 Adding Images to the App’s Folder 595
13.5.3 Building the GUI 595
13.5.4 CoverViewer Subclass of Application 597
13.5.5 CoverViewerController Class 597
13.6 Cover Viewer App: Customizing ListView Cells 599
13.6.1 Technologies Overview 600
13.6.2 Copying the CoverViewer App 600
13.6.3 ImageTextCell Custom Cell Factory Class 601
13.6.4 CoverViewerController Class 602
13.7 Additional JavaFX Capabilities 603
13.8 JavaFX 9: Java SE 9 JavaFX Updates 605
13.9Wrap-Up 607
14 Strings, Characters and Regular Expressions 616
14.1 Introduction 617
14.2 Fundamentals of Characters and Strings 617
14.3 Class String 618
14.3.1 String Constructors 618
14.3.2 String Methods length, charAt and getChars 619
14.3.3 Comparing Strings 621
14.3.4 Locating Characters and Substrings in Strings 625
14.3.5 Extracting Substrings from Strings 627
14.3.6 Concatenating Strings 628
14.3.7 Miscellaneous String Methods 629
14.3.8 String Method valueOf 630
14.4 Class StringBuilder 631
14.4.1 StringBuilder Constructors 632
14.4.2 StringBuilder Methods length, capacity, setLength and
ensureCapacity 633
14.4.3 StringBuilder Methods charAt, setCharAt, getChars and
reverse 634
14.4.4 StringBuilder append Methods 635
14.4.5 StringBuilder Insertion and Deletion Methods 637
14.5 Class Character 638
14.6 Tokenizing Strings 643
14.7 Regular Expressions, Class Pattern and Class Matcher 644
14.7.1 Replacing Substrings and Splitting Strings 649
14.7.2 Classes Pattern and Matcher 651
14.8Wrap-Up 653
15 Files, Input/Output Streams, NIO and
XML Serialization 664
15.1 Introduction 665
15.2 Files and Streams 665
15.3 Using NIO Classes and Interfaces to Get File and
Directory Information 667
15.4 Sequential Text Files 671
15.4.1 Creating a Sequential Text File 671
15.4.2 Reading Data from a Sequential Text File 674
15.4.3 Case Study: A Credit-Inquiry Program 675
15.4.4 Updating Sequential Files 680
15.5 XML Serialization 680
15.5.1 Creating a Sequential File Using XML Serialization 680
15.5.2 Reading and Deserializing Data from a Sequential File 686
15.6 FileChooser and DirectoryChooser Dialogs 687
15.7 (Optional) Additional java.io Classes 693
15.7.1 Interfaces and Classes for Byte-Based Input and Output 693
15.7.2 Interfaces and Classes for Character-Based Input and Output 695
15.8Wrap-Up 696
16 Generic Collections 704
16.1 Introduction 705
16.2 Collections Overview 705
16.3 Type-Wrapper Classes 707
16.4 Autoboxing and Auto-Unboxing 707
16.5 Interface Collection and Class Collections 707
16.6Lists 708
16.6.1 ArrayList and Iterator 709
16.6.2 LinkedList 711
16.7 Collections Methods 716
16.7.1 Method sort 716
16.7.2 Method shuffle 720
16.7.3 Methods reverse, fill, copy, max and min 722
16.7.4 Method binarySearch 724
16.7.5 Methods addAll, frequency and disjoint 725
16.8 Class PriorityQueue and Interface Queue 727
16.9 Sets 728
16.10 Maps 731
16.11 Synchronized Collections 735
16.12 Unmodifiable Collections 735
16.13 Abstract Implementations 736
16.14 Java SE 9: Convenience Factory Methods for
Immutable Collections 736
16.15 Wrap-Up 740
17.13 Creating a Stream<String> from a File 786
17.14 Streams of Random Values 789
17.15 Infinite Streams 791
17.16 Lambda Event Handlers 793
17.17 Additional Notes on Java SE 8 Interfaces 793
17.18 Wrap-Up 794
18Recursion 808
18.1 Introduction 809
18.2 Recursion Concepts 810
18.3 Example Using Recursion: Factorials 811
18.4 Reimplementing Class FactorialCalculator Using BigInteger 813
18.5 Example Using Recursion: Fibonacci Series 815
18.6 Recursion and the Method-Call Stack 818
18.7 Recursion vs. Iteration 819
18.8 Towers of Hanoi 821
18.9 Fractals 823
18.9.1 Koch Curve Fractal 824
18.9.2 (Optional) Case Study: Lo Feather Fractal 825
18.9.3 (Optional) Fractal App GUI 827
18.9.4 (Optional) FractalController Class 829
18.10 Recursive Backtracking 834
18.11 Wrap-Up 834
19 Searching, Sorting and Big O 843
19.1 Introduction 844
19.2 Linear Search 845
19.3 Big O Notation 848
19.3.1 O(1) Algorithms 848
19.3.2 O(n) Algorithms 848
19.3.3 O(n2) Algorithms 848
19.3.4 Big O of the Linear Search 849
19.4 Binary Search 849
19.4.1 Binary Search Implementation 850
19.4.2 Efficiency of the Binary Search 853
19.5 Sorting Algorithms 854
19.6 Selection Sort 854
19.6.1 Selection Sort Implementation 855
19.6.2 Efficiency of the Selection Sort 857
19.7 Insertion Sort 857
19.7.1 Insertion Sort Implementation 858
19.7.2 Efficiency of the Insertion Sort 860
19.8 Merge Sort 861
19.8.1 Merge Sort Implementation 861
19.8.2 Efficiency of the Merge Sort 866
19.9 Big O Summary for This Chapter’s Searching and Sorting Algorithms 866
19.10 Massive Parallelism and Parallel Algorithms 867
19.11 Wrap-Up 867
20 Generic Classes and Methods: A Deeper Look 873
20.1 Introduction 874
20.2 Motivation for Generic Methods 874
20.3 Generic Methods: Implementation and Compile-Time Translation 876
20.4 Additional Compile-Time Translation Issues: Methods That Use a Type
Parameter as the Return Type 879
20.5 Overloading Generic Methods 882
20.6 Generic Classes 883
20.7 Wildcards in Methods That Accept Type Parameters 890
20.8Wrap-Up 894
21 Custom Generic Data Structures 898
21.1 Introduction 899
21.2 Self-Referential Classes 900
21.3 Dynamic Memory Allocation 900
21.4 Linked Lists 901
21.4.1 Singly Linked Lists 901
21.4.2 Implementing a Generic List Class 902
21.4.3 Generic Classes ListNode and List 905
21.4.4 Class ListTest 905
21.4.5 List Method insertAtFront 907
21.4.6 List Method insertAtBack 908
21.4.7 List Method removeFromFront 908
21.4.8 List Method removeFromBack 909
21.4.9 List Method print 910
21.4.10 Creating Your Own Packages 910
21.5 Stacks 915
21.6 Queues 918
21.7 Trees 920
21.8Wrap-Up 927
22 JavaFX Graphics and Multimedia 952
22.1 Introduction 953
22.2 Controlling Fonts with Cascading Style Sheets (CSS) 954
22.2.1 CSS That Styles the GUI 954
22.2.2 FXML That Defines the GUI—Introduction to XML Markup 957
22.2.3 Referencing the CSS File from FXML 960
22.2.4 Specifying the VBox’s Style Class 960
22.2.5 Programmatically Loading CSS 960
22.3 Displaying Two-Dimensional Shapes 961
22.3.1 Defining Two-Dimensional Shapes with FXML 961
22.3.2 CSS That Styles the Two-Dimensional Shapes 964
22.4 Polylines, Polygons and Paths 966
22.4.1 GUI and CSS 967
22.4.2 PolyShapesController Class 968
22.5 Transforms 971
22.6 Playing Video with Media, MediaPlayer and MediaViewer 973
22.6.1 VideoPlayer GUI 974
22.6.2 VideoPlayerController Class 976
22.7 Transition Animations 980
22.7.1 TransitionAnimations.fxml 980
22.7.2 TransitionAnimationsController Class 982
22.8 Timeline Animations 986
22.9 Frame-by-Frame Animation with AnimationTimer 989
22.10 Drawing on a Canvas 991
22.11 Three-Dimensional Shapes 996
22.12 Wrap-Up 999
23Concurrency 1015
23.1 Introduction 1016
23.2 Thread States and Life Cycle 1018
23.2.1 New and Runnable States 1019
23.2.2 Waiting State 1019
23.2.3 Timed Waiting State 1019
23.2.4 Blocked State 1019
23.2.5 Terminated State 1019
23.2.6 Operating-System View of the Runnable State 1020
23.2.7 Thread Priorities and Thread Scheduling 1020
23.2.8 Indefinite Postponement and Deadlock 1021
23.3 Creating and Executing Threads with the Executor Framework 1021
23.4 Thread Synchronization 1025
23.4.1 Immutable Data 1026
23.4.2 Monitors 1026
23.4.3 Unsynchronized Mutable Data Sharing 1027
23.4.4 Synchronized Mutable Data Sharing—Making Operations Atomic 1031
23.5 Producer/Consumer Relationship without Synchronization 1034
23.6 Producer/Consumer Relationship: ArrayBlockingQueue 1042
23.7 (Advanced) Producer/Consumer Relationship with synchronized,
wait, notify and notifyAll 1045
23.8 (Advanced) Producer/Consumer Relationship: Bounded Buffers 1051
23.9 (Advanced) Producer/Consumer Relationship: The Lock and
Condition Interfaces 1059
23.10 Concurrent Collections 1066
23.11 Multithreading in JavaFX 1068
23.11.1 Performing Computations in a Worker Thread:
Fibonacci Numbers 1069
23.11.2 Processing Intermediate Results: Sieve of Eratosthenes 1074
23.12 sort/parallelSort Timings with the Java SE 8 Date/Time API 1080
23.13 Java SE 8: Sequential vs. Parallel Streams 1083
23.14 (Advanced) Interfaces Callable and Future 1085
23.15 (Advanced) Fork/Join Framework 1090
23.16 Wrap-Up 1090
24 Accessing Databases with JDBC 1102
24.1 Introduction 1103
24.2 Relational Databases 1104
24.3 A books Database 1105
24.4 SQL 1109
24.4.1 Basic SELECT Query 1110
24.4.2 WHERE Clause 1110
24.4.3 ORDER BY Clause 1112
24.4.4 Merging Data from Multiple Tables: INNER JOIN 1114
24.4.5 INSERT Statement 1115
24.4.6 UPDATE Statement 1116
24.4.7 DELETE Statement 1117
24.5 Setting Up a Java DB Database 1118
24.5.1 Creating the Chapter’s Databases on Windows 1119
24.5.2 Creating the Chapter’s Databases on macOS 1120
24.5.3 Creating the Chapter’s Databases on Linux 1120
24.6 Connecting to and Querying a Database 1120
24.6.1 Automatic Driver Discovery 1122
24.6.2 Connecting to the Database 1122
24.6.3 Creating a Statement for Executing Queries 1123
24.6.4 Executing a Query 1123
24.6.5 Processing a Query’s ResultSet 1124
24.7 Querying the books Database 1125
24.7.1 Result Set Table Model Class 1125
24.7.2 Display Query Results App’s GUI 1132
24.7.3 Display Query Results Controller Class 1132
24.8 Row Set Interface 1137
24.9 Prepared Statements 1140
24.9.1 Address Book App That Uses Prepared Statements 1141
24.9.2 Class Person 1141
24.9.3 Class Person Queries 1143
24.9.4 AddressBook GUI 1146
24.9.5 Class Address Book Controller 1147
24.10 Stored Procedures 1152
24.11 Transaction Processing 1152
24.12 Wrap-Up 1153
25 Introduction to JShell: Java 9’s REPL 1161
25.1 Introduction 1162
25.2 Installing JDK 9 1164
25.3 Introduction to JShell 1164
25.3.1 Starting a JShell Session 1165
25.3.2 Executing Statements 1165
25.3.3 Declaring Variables Explicitly 1166
25.3.4 Listing and Executing Prior Snippets 1168
25.3.5 Evaluating Expressions and Declaring Variables Implicitly 1170
25.3.6 Using Implicitly Declared Variables 1170
25.3.7 Viewing a Variable’s Value 1171
25.3.8 Resetting a JShell Session 1171
25.3.9 Writing Multiline Statements 1171
25.3.10 Editing Code Snippets 1172
25.3.11 Exiting JShell 1175
25.4 Command-Line Input in JShell 1175
25.5 Declaring and Using Classes 1176
25.5.1 Creating a Class in JShell 1177
25.5.2 Explicitly Declaring Reference-Type Variables 1177
25.5.3 Creating Objects 1178
25.5.4 Manipulating Objects 1178
25.5.5 Creating a Meaningful Variable Name for an Expression 1179
25.5.6 Saving and Opening Code-Snippet Files 1180
25.6 Discovery with JShell Auto-Completion 1180
25.6.1 Auto-Completing Identifiers 1181
25.6.2 Auto-Completing JShell Commands 1182
25.7 Exploring a Class’s Members and Viewing Documentation 1182
25.7.1 Listing Class Math’s static Members 1183
25.7.2 Viewing a Method’s Parameters 1183
25.7.3 Viewing a Method’s Documentation 1184
25.7.4 Viewing a public Field’s Documentation 1184
25.7.5 Viewing a Class’s Documentation 1185
25.7.6 Viewing Method Overloads 1185
25.7.7 Exploring Members of a Specific Object 1186
25.8 Declaring Methods 1188
25.8.1 Forward Referencing an Undeclared Method—Declaring
Method display Cubes 1188
25.8.2 Declaring a Previously Undeclared Method 1188
25.8.3 Testing cube and Replacing Its Declaration 1189
25.8.4 Testing Updated Method cube and Method display Cubes 1189
25.9 Exceptions 1190
25.10 Importing Classes and Adding Packages to the CLASSPATH 1191
25.11 Using an External Editor 1193
25.12 Summary of JShell Commands 1195
25.12.1 Getting Help in JShell 1196
25.12.2 /edit Command: Additional Features 1197
25.12.3 /reload Command 1197
25.12.4 /drop Command 1198
25.12.5 Feedback Modes 1198
25.12.6 Other JShell Features Configurable with /set 1200
25.13 Keyboard Shortcuts for Snippet Editing 1201
25.14 How JShell Reinterprets Java for Interactive Use 1201
25.15 IDE JShell Support 1202
25.16 Wrap-Up 1202
Chapters on the Web 1218
A Operator Precedence Chart 1219
B ASCII Character Set 1221
C Keywords and Reserved Words 1222
D Primitive Types 1223
E Using the Debugger 1224
E.1 Introduction 1225
E.2 Breakpoints and the run, stop, cont and print Commands 1225
E.3 The print and set Commands 1229
E.4 Controlling Execution Using the step, step up and next Commands 1231
E.5 The watch Command 1233
E.6 The clear Command 1235
E.7 Wrap-Up 1238
Appendices on the Web 1239
Index 1241