Java How to Program: An Objects-Natural Approach, Global Edition
Kaup valmöguleikar
The Deitels’ groundbreaking How to Program series explores fundamentals, object-oriented concepts, and intermediate-level topics for further study. Java How to Program: An Objects-Natural Approach is a friendly, code-intensive, case study-oriented introduction to one of the world’s most popular programming languages. It offers real-world examples, early classes and objects, and the authors’ signature live-code approach.
Along with a thorough study of Java fundamentals and algorithm development, you’ll master Java’s basics by immersing yourself in hundreds of complete working code examples with meaningful outputs. The 12th Edition introduces a new objects-natural approach that gives you ample practice using powerful existing classes, helping you to quickly create objects of those classes (typically with 1 line of code) and then tell them to “strut their stuff” with a minimal number of Java statements.
Nánar um bókina
- Pearson International Content
- 9781292488028
- 9781292755786
- ePub
- 12
- Paul Deitel; Harvey Deitel & Associates
- English
- 2026-08-17
- 100
- 2
- 2
Kaflar
- Cover
- Welcome
- Half Title Page
- Recent Deitel Textbooks
- Full Title Page
- Copyright Page
- Dedication
- Preface
- Preface
- An Extraordinary Range of Real-World Java Applications
- Intended Audiences
- Java How to Program: An Objects-Natural Approach, 12/e, GE
- Live-Code Approach
- “Objects-Natural” Approach
- Generative AI (GenAI) Approach
- New and Updated Features
- Teaching Approach and Pedagogy Features
- Tour of the Book
- Thinking Like a Developer—GitHub and StackOverflow
- Computing and Data Science Curricula
- Data Science Overlaps with Computer Science
- Deitel.com and the Deitel Blog
- Instructor Supplements
- Software Used in Java How to Program, 12/e
- Java Documentation Links
- Getting Your Questions Answered
- Join the Deitel & Associates, Inc. Social Media Communities
- College Textbook Digital Formats
- Acknowledgments
- About the Authors
- About Deitel® & Associates, Inc.
- Before You Begin
- Font and Naming Conventions
- Getting the Code Examples
- Java Development Kit (JDK)
- Java Release Cadence
- Java Integrated Development Environments (IDEs)
- JavaFX Software Development Kit (SDK)
- Scene Builder
- Generative AIs
- 1: Intro to Computers, the Internet, Java and Generative AI
- 1: Objectives
- 1.1: Introduction
- 1.1: Introduction
- 1.2: Hardware
- 1.2: Hardware
- 1.2.1: Computer Organization
- 1.2.1: Computer Organization
- 1.2.2: Moore’s Law, Multi-Core Processors and Concurrent Programming
- 1.2.2: Moore’s Law, Multi-Core Processors and Concurrent Programming
- 1.3: Data Hierarchies
- 1.3: Data Hierarchies
- 1.4: Machine Languages, Assembly Languages and High-Level Languages
- 1.4: Machine Languages, Assembly Languages and High-Level Languages
- 1.5: Operating Systems
- 1.5: Operating Systems
- 1.6: Java
- 1.6: Java
- 1.7: C and C++
- 1.7: C and C++
- 1.8: Other Popular Programming Languages
- 1.8: Other Popular Programming Languages
- 1.9: Introduction to Object Orientation
- 1.9: Introduction to Object Orientation
- 1.10: Java Application Programming Interface (API) and Open-Source Libraries
- 1.10: Java Application Programming Interface (API) and Open-Source Libraries
- 1.11: Typical Java Program Development Environment
- 1.11: Typical Java Program Development Environment
- 1.12: Test-Driving a Java Program with the Java Development Kit (JDK)
- 1.12: Test-Driving a Java Program with the Java Development Kit (JDK)
- 1.12.1: Compiling and Running the Program with the javac and java Commands
- 1.12.1: Compiling and Running the Program with the javac and java Commands
- 1.12.2: Running the Program’s Source-Code File Directly with the java Command
- 1.12.2: Running the Program’s Source-Code File Directly with the java Command
- 1.13: Internet, World Wide Web, the Cloud and IoT
- 1.13: Internet, World Wide Web, the Cloud and IoT
- 1.13.1: The Internet: A Network of Networks
- 1.13.1: The Internet: A Network of Networks
- 1.13.2: The World Wide Web: Making the Internet User-Friendly
- 1.13.2: The World Wide Web: Making the Internet User-Friendly
- 1.13.3: The Cloud
- 1.13.3: The Cloud
- 1.13.4: The Internet of Things (IoT)
- 1.13.4: The Internet of Things (IoT)
- 1.13.5: Edge Computing
- 1.13.5: Edge Computing
- 1.13.6: Mashups
- 1.13.6: Mashups
- 1.14: Metaverse
- 1.14: Metaverse
- 1.14.1: Virtual Reality (VR)
- 1.14.1: Virtual Reality (VR)
- 1.14.2: Augmented Reality (AR)
- 1.14.2: Augmented Reality (AR)
- 1.14.3: Mixed Reality
- 1.14.3: Mixed Reality
- 1.14.4: Blockchain
- 1.14.4: Blockchain
- 1.14.5: Bitcoin and Cryptocurrency
- 1.14.5: Bitcoin and Cryptocurrency
- 1.14.6: Ethereum
- 1.14.6: Ethereum
- 1.14.7: Non-Fungible Tokens (NFTs)
- 1.14.7: Non-Fungible Tokens (NFTs)
- 1.14.8: Web3
- 1.14.8: Web3
- 1.15: Software Development Technologies
- 1.15: Software Development Technologies
- 1.16: Data Analytics and Data Science
- 1.16: Data Analytics and Data Science
- 1.17: How Big Is Big Data?
- 1.17: How Big Is Big Data?
- 1.17.1: Big-Data Analytics
- 1.17.1: Big-Data Analytics
- 1.17.2: Data Science and Big Data Are Making a Difference: Use Cases
- 1.17.2: Data Science and Big Data Are Making a Difference: Use Cases
- 1.18: AI—at the Intersection of Computer Science and Data Science
- 1.18: AI—at the Intersection of Computer Science and Data Science
- 1.18.1: Artificial Intelligence (AI)
- 1.18.1: Artificial Intelligence (AI)
- 1.18.2: Artificial General Intelligence (AGI)
- 1.18.2: Artificial General Intelligence (AGI)
- 1.18.3: Artificial Intelligence Milestones
- 1.18.3: Artificial Intelligence Milestones
- 1.18.4: Machine Learning
- 1.18.4: Machine Learning
- 1.18.5: Deep Learning
- 1.18.5: Deep Learning
- 1.18.6: Reinforcement Learning
- 1.18.6: Reinforcement Learning
- 1.19: Generative AI
- 1.19: Generative AI
- 1.20: Wrap-Up
- 1.20: Wrap-Up
- 1: Exercises
- 1: Exercises
- 2: Intro to Java Programming
- 2: Objectives
- 2.1: Introduction
- 2.1: Introduction
- 2.2: Your First Program in Java: Printing a Line of Text
- 2.2: Your First Program in Java: Printing a Line of Text
- 2.2.1: Compiling the Program
- 2.2.1: Compiling the Program
- 2.2.2: Executing the Program
- 2.2.2: Executing the Program
- 2.3: Modifying Your First Program
- 2.3: Modifying Your First Program
- 2.4: Displaying Text with printf
- 2.4: Displaying Text with printf
- 2.5: Another Program: Adding Integers
- 2.5: Another Program: Adding Integers
- 2.6: Memory Concepts
- 2.6: Memory Concepts
- 2.7: Arithmetic
- 2.7: Arithmetic
- 2.8: Decision Making: Equality and Relational Operators
- 2.8: Decision Making: Equality and Relational Operators
- 2.9: Objects-Natural Case Study: Creating and Using Objects of the Java API’s String Class
- 2.9: Objects-Natural Case Study: Creating and Using Objects of the Java API’s String Class
- 2.10: Wrap-Up
- 2.10: Wrap-Up
- 2: Exercises
- 2: Exercises
- 3: Algorithm Development and Control Statements: Part 1
- 3: Objectives
- 3.1: Introduction
- 3.1: Introduction
- 3.2: Algorithms
- 3.2: Algorithms
- 3.3: Pseudocode
- 3.3: Pseudocode
- 3.4: Control Structures
- 3.4: Control Structures
- 3.4.1: Sequence Structure
- 3.4.1: Sequence Structure
- 3.4.2: Selection Statements
- 3.4.2: Selection Statements
- 3.4.3: Iteration Statements
- 3.4.3: Iteration Statements
- 3.4.4: Summary of Control Statements
- 3.4.4: Summary of Control Statements
- 3.5: if Single-Selection Statement
- 3.5: if Single-Selection Statement
- 3.6: if…else Double-Selection Statement
- 3.6: if…else Double-Selection Statement
- 3.6.1: Nested if…else Statements
- 3.6.1: Nested if…else Statements
- 3.6.2: Blocks
- 3.6.2: Blocks
- 3.6.3: Conditional Operator (?:)
- 3.6.3: Conditional Operator (?:)
- 3.7: while Iteration Statement
- 3.7: while Iteration Statement
- 3.8: Formulating Algorithms: Counter-Controlled Iteration
- 3.8: Formulating Algorithms: Counter-Controlled Iteration
- 3.8.1: Pseudocode Algorithm
- 3.8.1: Pseudocode Algorithm
- 3.8.2: Implementing the Algorithm
- 3.8.2: Implementing the Algorithm
- 3.8.3: Integer Division and Truncation
- 3.8.3: Integer Division and Truncation
- 3.8.4: Arithmetic Overflow
- 3.8.4: Arithmetic Overflow
- 3.8.5: Input Validation
- 3.8.5: Input Validation
- 3.9: Formulating Algorithms: Sentinel-Controlled Iteration
- 3.9: Formulating Algorithms: Sentinel-Controlled Iteration
- 3.9.1: Developing the Pseudocode Algorithm with Top-Down, Stepwise Refinement: The Top and First Refinement
- 3.9.1: Developing the Pseudocode Algorithm with Top-Down, Stepwise Refinement: The Top and First Refinement
- 3.9.2: Proceeding to the Second Refinement
- 3.9.2: Proceeding to the Second Refinement
- 3.9.3: Implementing Sentinel-Controlled Iteration
- 3.9.3: Implementing Sentinel-Controlled Iteration
- 3.9.4: Explicitly and Implicitly Converting Between Primitive Types
- 3.9.4: Explicitly and Implicitly Converting Between Primitive Types
- 3.9.5: Formatting Floating-Point Numbers
- 3.9.5: Formatting Floating-Point Numbers
- 3.10: Formulating Algorithms: Nested Control Statements
- 3.10: Formulating Algorithms: Nested Control Statements
- 3.10.1: Problem Statement
- 3.10.1: Problem Statement
- 3.10.2: Top-Down, Stepwise Refinement: Pseudocode Representation of the Top
- 3.10.2: Top-Down, Stepwise Refinement: Pseudocode Representation of the Top
- 3.10.3: Top-Down, Stepwise Refinement: First Refinement
- 3.10.3: Top-Down, Stepwise Refinement: First Refinement
- 3.10.4: Top-Down, Stepwise Refinement: Second Refinement
- 3.10.4: Top-Down, Stepwise Refinement: Second Refinement
- 3.10.5: Complete Second Refinement of Pseudocode
- 3.10.5: Complete Second Refinement of Pseudocode
- 3.10.6: Implementing the Program
- 3.10.6: Implementing the Program
- 3.11: Compound Assignment Operators
- 3.11: Compound Assignment Operators
- 3.12: Increment and Decrement Operators
- 3.12: Increment and Decrement Operators
- 3.13: Primitive Types
- 3.13: Primitive Types
- 3.14: Objects-Natural Case Study: Super-Sized Integers
- 3.14: Objects-Natural Case Study: Super-Sized Integers
- 3.15: Wrap-Up
- 3.15: Wrap-Up
- 3: Exercises
- 3: Exercises
- 4: Control Statements: Part 2
- 4: Objectives
- 4.1: Introduction
- 4.1: Introduction
- 4.2: Essentials of Counter-Controlled Iteration
- 4.2: Essentials of Counter-Controlled Iteration
- 4.3: for Iteration Statement
- 4.3: for Iteration Statement
- 4.4: Examples Using the for Statement
- 4.4: Examples Using the for Statement
- 4.5: Summing the Even Integers from 2 to 20 with the for Statement
- 4.5: Summing the Even Integers from 2 to 20 with the for Statement
- 4.6: Calculating Compound Interest with the for Statement
- 4.6: Calculating Compound Interest with the for Statement
- 4.7: do…while Iteration Statement
- 4.7: do…while Iteration Statement
- 4.8: switch Multiple-Selection Statement
- 4.8: switch Multiple-Selection Statement
- 4.9: break and continue Statements
- 4.9: break and continue Statements
- 4.10: Logical Operators
- 4.10: Logical Operators
- 4.10.1: Conditional AND (&&) Operator
- 4.10.1: Conditional AND (&&) Operator
- 4.10.2: Conditional OR (||) Operator
- 4.10.2: Conditional OR (||) Operator
- 4.10.3: Short-Circuit Evaluation of Complex Conditions
- 4.10.3: Short-Circuit Evaluation of Complex Conditions
- 4.10.4: Boolean Logical AND (&) and Inclusive OR (|) Operators
- 4.10.4: Boolean Logical AND (&) and Inclusive OR (|) Operators
- 4.10.5: Boolean Logical Exclusive OR (^) Operator
- 4.10.5: Boolean Logical Exclusive OR (^) Operator
- 4.10.6: Logical Complement (!) Operator
- 4.10.6: Logical Complement (!) Operator
- 4.10.7: Example: Generating Logical-Operator Truth Tables
- 4.10.7: Example: Generating Logical-Operator Truth Tables
- 4.11: Structured-Programming Summary
- 4.11: Structured-Programming Summary
- 4.12: Objects-Natural Case Study: Precise Monetary Calculations with Java API Class BigDecimal
- 4.12: Objects-Natural Case Study: Precise Monetary Calculations with Java API Class BigDecimal
- 4.13: Wrap-Up
- 4.13: Wrap-Up
- 4: Exercises
- 4: Exercises
- 5: Methods
- 5: Objectives
- 5.1: Introduction
- 5.1: Introduction
- 5.2: Declaring Methods
- 5.2: Declaring Methods
- 5.3: Notes on Declaring and Using Methods
- 5.3: Notes on Declaring and Using Methods
- 5.4: Case Study: Die Rolling Simulation with Random-Number Generation
- 5.4: Case Study: Die Rolling Simulation with Random-Number Generation
- 5.5: Case Study: A Game of Chance; Introducing enums
- 5.5: Case Study: A Game of Chance; Introducing enums
- 5.6: Scope of Declarations
- 5.6: Scope of Declarations
- 5.7: Method Overloading
- 5.7: Method Overloading
- 5.8: Class Math: static Methods and Variables
- 5.8: Class Math: static Methods and Variables
- 5.9: Java API Packages
- 5.9: Java API Packages
- 5.10: Method-Call Stack and Activation Records
- 5.10: Method-Call Stack and Activation Records
- 5.11: Argument Promotion and Casting
- 5.11: Argument Promotion and Casting
- 5.12: Objects-Natural Case Study: Java Date/Time API
- 5.12: Objects-Natural Case Study: Java Date/Time API
- 5.12.1: Data/Time Manipulations
- 5.12.1: Data/Time Manipulations
- 5.12.2: Running the Program for a Different Locale Than Your Own
- 5.12.2: Running the Program for a Different Locale Than Your Own
- 5.13: Wrap-Up
- 5.13: Wrap-Up
- 5: Exercises
- 5: Exercises
- 6: Arrays and ArrayLists
- 6: Objectives
- 6.1: Introduction
- 6.1: Introduction
- 6.2: Primitive Types vs. Reference Types
- 6.2: Primitive Types vs. Reference Types
- 6.3: Arrays
- 6.3: Arrays
- 6.4: Declaring and Creating Arrays
- 6.4: Declaring and Creating Arrays
- 6.5: Creating and Initializing an Array
- 6.5: Creating and Initializing an Array
- 6.6: Array Initializers
- 6.6: Array Initializers
- 6.7: Calculating Array Element Values
- 6.7: Calculating Array Element Values
- 6.8: Totaling Array Elements
- 6.8: Totaling Array Elements
- 6.9: Intro to Visualization: Using a Bar Chart to Display Array Data Graphically
- 6.9: Intro to Visualization: Using a Bar Chart to Display Array Data Graphically
- 6.10: Using Array Elements as Counters
- 6.10: Using Array Elements as Counters
- 6.11: Analyzing Survey Results
- 6.11: Analyzing Survey Results
- 6.12: Exception Handling
- 6.12: Exception Handling
- 6.12.1: The try Statement
- 6.12.1: The try Statement
- 6.12.2: The catch Block
- 6.12.2: The catch Block
- 6.13: Enhanced for Statement: Totaling Array Elements
- 6.13: Enhanced for Statement: Totaling Array Elements
- 6.14: Passing Arrays to Methods
- 6.14: Passing Arrays to Methods
- 6.15: Pass-By-Value vs. Pass-By-Reference
- 6.15: Pass-By-Value vs. Pass-By-Reference
- 6.16: Multidimensional Arrays
- 6.16: Multidimensional Arrays
- 6.17: Variable-Length Argument Lists
- 6.17: Variable-Length Argument Lists
- 6.18: Command-Line Arguments
- 6.18: Command-Line Arguments
- 6.19: Class Arrays
- 6.19: Class Arrays
- 6.20: Objects-Natural Case Study: Intro to Collections and Class ArrayList
- 6.20: Objects-Natural Case Study: Intro to Collections and Class ArrayList
- 6.21: Wrap-Up
- 6.21: Wrap-Up
- 6: Exercises
- 6: Exercises
- 7: Strings, NLP and Regex: Generative AI Foundations
- 7: Objectives
- 7.1: Introduction
- 7.1: Introduction
- 7.2: Fundamentals of Characters and Strings
- 7.2: Fundamentals of Characters and Strings
- 7.3: Class String
- 7.3: Class String
- 7.3.1: Creating String Objects
- 7.3.1: Creating String Objects
- 7.3.2: String Methods length, charAt and getChars
- 7.3.2: String Methods length, charAt and getChars
- 7.3.3: Comparing Strings
- 7.3.3: Comparing Strings
- 7.3.4: Locating Characters and Substrings in Strings
- 7.3.4: Locating Characters and Substrings in Strings
- 7.3.5: Extracting Substrings from Strings
- 7.3.5: Extracting Substrings from Strings
- 7.3.6: Concatenating Strings
- 7.3.6: Concatenating Strings
- 7.3.7: Miscellaneous String Methods
- 7.3.7: Miscellaneous String Methods
- 7.3.8: String Method valueOf
- 7.3.8: String Method valueOf
- 7.4: Class StringBuilder
- 7.4: Class StringBuilder
- 7.4.1: Creating StringBuilder Objects
- 7.4.1: Creating StringBuilder Objects
- 7.4.2: Methods length, capacity, setLength and ensureCapacity
- 7.4.2: Methods length, capacity, setLength and ensureCapacity
- 7.4.3: Methods charAt, setCharAt, getChars and reverse
- 7.4.3: Methods charAt, setCharAt, getChars and reverse
- 7.4.4: append Methods
- 7.4.4: append Methods
- 7.4.5: Insertion and Deletion Methods
- 7.4.5: Insertion and Deletion Methods
- 7.5: Class Character
- 7.5: Class Character
- 7.5.1: Character Testing and Case Conversion Methods
- 7.5.1: Character Testing and Case Conversion Methods
- 7.5.2: Character/Digit Conversions
- 7.5.2: Character/Digit Conversions
- 7.5.3: Other Character Methods
- 7.5.3: Other Character Methods
- 7.6: Tokenizing Strings
- 7.6: Tokenizing Strings
- 7.7: Intro to Natural Language Processing (NLP)—at the Root of Generative AI
- 7.7: Intro to Natural Language Processing (NLP)—at the Root of Generative AI
- 7.8: Objects-Natural Case Study: Intro to Regular Expressions in NLP
- 7.8: Objects-Natural Case Study: Intro to Regular Expressions in NLP
- 7.8.1: Matching Complete Strings to Patterns
- 7.8.1: Matching Complete Strings to Patterns
- 7.8.2: Replacing Substrings
- 7.8.2: Replacing Substrings
- 7.8.3: Searching for Matches with Classes Pattern and Matcher
- 7.8.3: Searching for Matches with Classes Pattern and Matcher
- 7.8.4: Simple Data Wrangling Steps Used to Prepare Text for Training NLP and Generative AI Models
- 7.8.4: Simple Data Wrangling Steps Used to Prepare Text for Training NLP and Generative AI Models
- 7.9: Objects-Natural Security Case Study: pMa5tfEKwk59dTvC04Ft1IFQz9mEXnkfYXZwxk4ujGE=
- 7.9: Objects-Natural Security Case Study: pMa5tfEKwk59dTvC04Ft1IFQz9mEXnkfYXZwxk4ujGE=
- 7.10: Wrap-Up
- 7.10: Wrap-Up
- 7: Exercises
- 7: Exercises
- 8: Real-World Modeling with Custom Classes
- 8: Objectives
- 8.1: Introduction
- 8.1: Introduction
- 8.2: Instance Variables, set Methods and get Methods
- 8.2: Instance Variables, set Methods and get Methods
- 8.2.1: Account Class with an Instance Variable, and set and get Methods
- 8.2.1: Account Class with an Instance Variable, and set and get Methods
- 8.2.2: AccountTest Class That Creates and Uses an Account Object
- 8.2.2: AccountTest Class That Creates and Uses an Account Object
- 8.2.3: Compiling and Executing a Program with Multiple Classes
- 8.2.3: Compiling and Executing a Program with Multiple Classes
- 8.2.4: Account UML Class Diagram
- 8.2.4: Account UML Class Diagram
- 8.2.5: Notes on Class AccountTest
- 8.2.5: Notes on Class AccountTest
- 8.2.6: Software Engineering with private Instance Variables and public set and get Methods
- 8.2.6: Software Engineering with private Instance Variables and public set and get Methods
- 8.3: Default and Explicit Instance Variable Initialization
- 8.3: Default and Explicit Instance Variable Initialization
- 8.4: Account Class: Initializing Objects with Constructors
- 8.4: Account Class: Initializing Objects with Constructors
- 8.4.1: Declaring an Account Constructor for Custom Object Initialization
- 8.4.1: Declaring an Account Constructor for Custom Object Initialization
- 8.4.2: Class AccountTest: Initializing New Account Objects
- 8.4.2: Class AccountTest: Initializing New Account Objects
- 8.5: Account Class with a Balance
- 8.5: Account Class with a Balance
- 8.5.1: Account Class with a BigDecimal balance Instance Variable
- 8.5.1: Account Class with a BigDecimal balance Instance Variable
- 8.5.2: AccountTest Class
- 8.5.2: AccountTest Class
- 8.6: Case Study: Card Shuffling and Dealing Simulation
- 8.6: Case Study: Card Shuffling and Dealing Simulation
- 8.7: Case Study: Time Class
- 8.7: Case Study: Time Class
- 8.8: Controlling Access to Members
- 8.8: Controlling Access to Members
- 8.9: Referring to the Current Object’s Members with the this Reference
- 8.9: Referring to the Current Object’s Members with the this Reference
- 8.10: Case Study: Time Class Overloaded Constructors
- 8.10: Case Study: Time Class Overloaded Constructors
- 8.11: Default and No-Argument Constructors
- 8.11: Default and No-Argument Constructors
- 8.12: Notes on Set and Get Methods
- 8.12: Notes on Set and Get Methods
- 8.13: Composition
- 8.13: Composition
- 8.14: enum Types
- 8.14: enum Types
- 8.15: Garbage Collection
- 8.15: Garbage Collection
- 8.16: static Class Members
- 8.16: static Class Members
- 8.17: static Import
- 8.17: static Import
- 8.18: final Instance Variables
- 8.18: final Instance Variables
- 8.19: Package Access
- 8.19: Package Access
- 8.20: record Classes
- 8.20: record Classes
- 8.20.1: Pattern Matching for switch Expressions
- 8.20.1: Pattern Matching for switch Expressions
- 8.20.2: Decomposing records in switch Expressions
- 8.20.2: Decomposing records in switch Expressions
- 8.21: Wrap-Up
- 8.21: Wrap-Up
- 8: Exercises
- 8: Exercises
- 9: Real-World Modeling with Inheritance, Polymorphism & Interfaces
- 9: Objectives
- 9.1: Introduction
- 9.1: Introduction
- 9.2: Superclasses and Subclasses
- 9.2: Superclasses and Subclasses
- 9.3: Relationship Between Superclasses and Subclasses
- 9.3: Relationship Between Superclasses and Subclasses
- 9.3.1: Creating and Using a SalariedEmployee Class
- 9.3.1: Creating and Using a SalariedEmployee Class
- 9.3.2: Creating a SalariedEmployee/SalariedCommissionEmployee Inheritance Hierarchy
- 9.3.2: Creating a SalariedEmployee/SalariedCommissionEmployee Inheritance Hierarchy
- 9.4: Class Object
- 9.4: Class Object
- 9.5: Intro to Polymorphism: Polymorphic Video Game
- 9.5: Intro to Polymorphism: Polymorphic Video Game
- 9.6: Demonstrating Polymorphic Behavior
- 9.6: Demonstrating Polymorphic Behavior
- 9.7: abstract Classes and Methods
- 9.7: abstract Classes and Methods
- 9.8: Case Study: Payroll System Using Polymorphism
- 9.8: Case Study: Payroll System Using Polymorphism
- 9.8.1: abstract Superclass Employee
- 9.8.1: abstract Superclass Employee
- 9.8.2: Concrete Subclass SalariedEmployee
- 9.8.2: Concrete Subclass SalariedEmployee
- 9.8.3: Concrete Subclass CommissionEmployee
- 9.8.3: Concrete Subclass CommissionEmployee
- 9.8.4: Polymorphic Processing, Operator instanceof and Downcasting
- 9.8.4: Polymorphic Processing, Operator instanceof and Downcasting
- 9.9: final Methods and Classes
- 9.9: final Methods and Classes
- 9.10: Issues with Constructors Calling Instance Methods
- 9.10: Issues with Constructors Calling Instance Methods
- 9.11: Creating and Using Interfaces
- 9.11: Creating and Using Interfaces
- 9.11.1: Developing a Payable Hierarchy
- 9.11.1: Developing a Payable Hierarchy
- 9.11.2: Interface Payable
- 9.11.2: Interface Payable
- 9.11.3: Class Invoice
- 9.11.3: Class Invoice
- 9.11.4: Modifying Class Employee to Implement Interface Payable
- 9.11.4: Modifying Class Employee to Implement Interface Payable
- 9.11.5: Using Interface Payable to Process Invoices and Employees Polymorphically
- 9.11.5: Using Interface Payable to Process Invoices and Employees Polymorphically
- 9.11.6: Some Common Java API Interfaces
- 9.11.6: Some Common Java API Interfaces
- 9.12: Other Interface Features
- 9.12: Other Interface Features
- 9.12.1: default Interface Methods
- 9.12.1: default Interface Methods
- 9.12.2: static Interface Methods
- 9.12.2: static Interface Methods
- 9.12.3: Functional Interfaces
- 9.12.3: Functional Interfaces
- 9.12.4: private Interface Methods
- 9.12.4: private Interface Methods
- 9.13: Program to an Interface, Not an Implementation
- 9.13: Program to an Interface, Not an Implementation
- 9.13.1: CompensationModel Interface
- 9.13.1: CompensationModel Interface
- 9.13.2: An Employee Has a CompensationModel—Composition and Dependency Injection
- 9.13.2: An Employee Has a CompensationModel—Composition and Dependency Injection
- 9.13.3: CompensationModel Implementations
- 9.13.3: CompensationModel Implementations
- 9.13.4: Testing the CompensationModel Hierarchy
- 9.13.4: Testing the CompensationModel Hierarchy
- 9.13.5: Dependency Injection Design Benefits
- 9.13.5: Dependency Injection Design Benefits
- 9.13.6: interfaces vs. abstract Classes
- 9.13.6: interfaces vs. abstract Classes
- 9.14: sealed Classes and Interfaces
- 9.14: sealed Classes and Interfaces
- 9.15: private Constructors
- 9.15: private Constructors
- 9.16: protected Members
- 9.16: protected Members
- 9.17: Wrap-Up
- 9.17: Wrap-Up
- 9: Exercises
- 9: Exercises
- 10: Exception Handling: A Deeper Look
- 10: Objectives
- 10.1: Introduction
- 10.1: Introduction
- 10.2: Example: Divide by Zero without Exception Handling
- 10.2: Example: Divide by Zero without Exception Handling
- 10.3: Example: Handling ArithmeticExceptions and InputMismatchExceptions
- 10.3: Example: Handling ArithmeticExceptions and InputMismatchExceptions
- 10.4: Java Exception Hierarchy
- 10.4: Java Exception Hierarchy
- 10.5: Checked vs. Unchecked Exceptions
- 10.5: Checked vs. Unchecked Exceptions
- 10.6: finally Block
- 10.6: finally Block
- 10.7: Stack Unwinding and Obtaining Information from an Exception
- 10.7: Stack Unwinding and Obtaining Information from an Exception
- 10.8: Chained Exceptions
- 10.8: Chained Exceptions
- 10.9: Declaring Custom Exceptions
- 10.9: Declaring Custom Exceptions
- 10.10: Preconditions and Postconditions
- 10.10: Preconditions and Postconditions
- 10.11: Assertions
- 10.11: Assertions
- 10.12: try-with-Resources Statement: Automatic Resource Deallocation
- 10.12: try-with-Resources Statement: Automatic Resource Deallocation
- 10.13: Unnamed Variables in catch Handlers
- 10.13: Unnamed Variables in catch Handlers
- 10.14: Wrap-Up
- 10.14: Wrap-Up
- 10: Exercises
- 10: Exercises
- 11: Files, I/O Streams, JSON Serialization & CSV Files
- 11: Objectives
- 11.1: Introduction
- 11.1: Introduction
- 11.2: Files and Streams
- 11.2: Files and Streams
- 11.3: Using NIO Classes and Interfaces to Get File and Directory Information
- 11.3: Using NIO Classes and Interfaces to Get File and Directory Information
- 11.4: Sequential Text Files
- 11.4: Sequential Text Files
- 11.4.1: Creating a Sequential Text File
- 11.4.1: Creating a Sequential Text File
- 11.4.2: Reading Data from a Sequential Text File
- 11.4.2: Reading Data from a Sequential Text File
- 11.4.3: Updating Sequential Files
- 11.4.3: Updating Sequential Files
- 11.5: Case Study: JavaScript Object Notation (JSON) Serialization
- 11.5: Case Study: JavaScript Object Notation (JSON) Serialization
- 11.5.1: Serializing a List‹Account›
- 11.5.1: Serializing a List‹Account›
- 11.5.2: Deserializing a List‹Account›
- 11.5.2: Deserializing a List‹Account›
- 11.6: Case Study: Processing a JSON Response from a Web Service
- 11.6: Case Study: Processing a JSON Response from a Web Service
- 11.7: Case Study: Creating and Reading CSV Files
- 11.7: Case Study: Creating and Reading CSV Files
- 11.7.1: Creating a CSV File
- 11.7.1: Creating a CSV File
- 11.7.2: Reading a CSV File
- 11.7.2: Reading a CSV File
- 11.8: Case Study: Reading and Analyzing a CSV File Containing the Titanic Disaster Dataset
- 11.8: Case Study: Reading and Analyzing a CSV File Containing the Titanic Disaster Dataset
- 11.9: Objects-Natural Security Case Study: RSA Public-Key Cryptography
- 11.9: Objects-Natural Security Case Study: RSA Public-Key Cryptography
- 11.10: Wrap-Up
- 11.10: Wrap-Up
- 11: Exercises
- 11: Exercises
- 12: Generic Collections
- 12: Objectives
- 12.1: Introduction
- 12.1: Introduction
- 12.2: Collections Overview
- 12.2: Collections Overview
- 12.3: Type-Wrapper Classes
- 12.3: Type-Wrapper Classes
- 12.4: Boxing and Unboxing
- 12.4: Boxing and Unboxing
- 12.5: Lists
- 12.5: Lists
- 12.5.1: ArrayList and Iterator
- 12.5.1: ArrayList and Iterator
- 12.5.2: LinkedList
- 12.5.2: LinkedList
- 12.5.3: Views into Collections and Arrays Method asList
- 12.5.3: Views into Collections and Arrays Method asList
- 12.6: Collections Methods
- 12.6: Collections Methods
- 12.6.1: Method sort
- 12.6.1: Method sort
- 12.6.2: Method shuffle
- 12.6.2: Method shuffle
- 12.6.3: Methods reverse, fill, copy, max and min
- 12.6.3: Methods reverse, fill, copy, max and min
- 12.6.4: Method binarySearch
- 12.6.4: Method binarySearch
- 12.6.5: Methods addAll, frequency and disjoint
- 12.6.5: Methods addAll, frequency and disjoint
- 12.7: Class PriorityQueue and Interface Queue
- 12.7: Class PriorityQueue and Interface Queue
- 12.8: Computer Science Thinking: A Brief Intro to Hash Tables
- 12.8: Computer Science Thinking: A Brief Intro to Hash Tables
- 12.9: Sets
- 12.9: Sets
- 12.10: Maps
- 12.10: Maps
- 12.11: Convenience Factory Methods for Creating Immutable Collections
- 12.11: Convenience Factory Methods for Creating Immutable Collections
- 12.12: Concurrent Collections
- 12.12: Concurrent Collections
- 12.13: Wrap-Up
- 12.13: Wrap-Up
- 12: Exercises
- 12: Exercises
- 12: Special Section: Systems Software Case Study—Building Your Own Compiler
- 12: Special Section: Systems Software Case Study—Building Your Own Compiler
- 13: Generic Classes and Methods: A Deeper Look
- 13: Objectives
- 13.1: Introduction
- 13.1: Introduction
- 13.2: Motivation for Generic Methods
- 13.2: Motivation for Generic Methods
- 13.3: Generic Methods: Implementation and Compile-Time Translation
- 13.3: Generic Methods: Implementation and Compile-Time Translation
- 13.3.1: Generic Method printArray
- 13.3.1: Generic Method printArray
- 13.3.2: Type Parameter Section of a Generic Method
- 13.3.2: Type Parameter Section of a Generic Method
- 13.3.3: Testing the Generic Method
- 13.3.3: Testing the Generic Method
- 13.3.4: Erasure at Compilation Time
- 13.3.4: Erasure at Compilation Time
- 13.4: Additional Compile-Time Translation Issues: Methods That Use a Type Parameter as the Return Type
- 13.4: Additional Compile-Time Translation Issues: Methods That Use a Type Parameter as the Return Type
- 13.5: Overloading Generic Methods
- 13.5: Overloading Generic Methods
- 13.6: Generic Classes
- 13.6: Generic Classes
- 13.6.1: Parameterized Types
- 13.6.1: Parameterized Types
- 13.6.2: Implementing a Generic Stack Class
- 13.6.2: Implementing a Generic Stack Class
- 13.6.3: Testing the Generic Stack Class
- 13.6.3: Testing the Generic Stack Class
- 13.6.4: Refactoring the Test Program to Manipulate Stack‹E› Objects with Generic Methods
- 13.6.4: Refactoring the Test Program to Manipulate Stack‹E› Objects with Generic Methods
- 13.7: Wildcards in Methods That Accept Type Parameters
- 13.7: Wildcards in Methods That Accept Type Parameters
- 13.7.1: Summing a List‹Number›
- 13.7.1: Summing a List‹Number›
- 13.7.2: Reimplementing Method sum with a Wildcard Type Argument in Its Parameter
- 13.7.2: Reimplementing Method sum with a Wildcard Type Argument in Its Parameter
- 13.8: Wrap-Up
- 13.8: Wrap-Up
- 13: Self-Review Exercises
- 13: Self-Review Exercises
- 13: Exercises
- 13: Exercises
- 14: Functional Programming with Lambdas & Streams
- 14: Objectives
- 14.1: Introduction
- 14.1: Introduction
- 14.2: Streams and Reduction
- 14.2: Streams and Reduction
- 14.2.1: Summing the Integers from 1 through 10 with a for Loop
- 14.2.1: Summing the Integers from 1 through 10 with a for Loop
- 14.2.2: External Iteration with for Is Error Prone
- 14.2.2: External Iteration with for Is Error Prone
- 14.2.3: Summing with a Stream and Reduction
- 14.2.3: Summing with a Stream and Reduction
- 14.2.4: Internal Iteration
- 14.2.4: Internal Iteration
- 14.3: Mapping and Lambdas
- 14.3: Mapping and Lambdas
- 14.3.1: Lambda Expressions
- 14.3.1: Lambda Expressions
- 14.3.2: Lambda Syntax
- 14.3.2: Lambda Syntax
- 14.3.3: Intermediate and Terminal Operations
- 14.3.3: Intermediate and Terminal Operations
- 14.4: Filtering
- 14.4: Filtering
- 14.5: How Elements Move Through Stream Pipelines
- 14.5: How Elements Move Through Stream Pipelines
- 14.6: Method References
- 14.6: Method References
- 14.6.1: Creating an IntStream of Random Values
- 14.6.1: Creating an IntStream of Random Values
- 14.6.2: Performing a Task on Each Stream Element with forEach and a Method Reference
- 14.6.2: Performing a Task on Each Stream Element with forEach and a Method Reference
- 14.6.3: Mapping Integers to String Objects with mapToObj
- 14.6.3: Mapping Integers to String Objects with mapToObj
- 14.6.4: Concatenating Strings with collect
- 14.6.4: Concatenating Strings with collect
- 14.7: IntStream Operations
- 14.7: IntStream Operations
- 14.7.1: Creating an IntStream and Displaying Its Values
- 14.7.1: Creating an IntStream and Displaying Its Values
- 14.7.2: Terminal Operations count, min, max, sum and average
- 14.7.2: Terminal Operations count, min, max, sum and average
- 14.7.3: Terminal Operation reduce
- 14.7.3: Terminal Operation reduce
- 14.7.4: Sorting IntStream Values
- 14.7.4: Sorting IntStream Values
- 14.8: Functional Interfaces
- 14.8: Functional Interfaces
- 14.9: Lambdas: A Deeper Look
- 14.9: Lambdas: A Deeper Look
- 14.10: Stream‹Integer› Manipulations
- 14.10: Stream‹Integer› Manipulations
- 14.10.1: Creating a Stream‹Integer›, Sorting It and Collecting the Results
- 14.10.1: Creating a Stream‹Integer›, Sorting It and Collecting the Results
- 14.10.2: Filtering a Stream and Storing the Results for Later Use
- 14.10.2: Filtering a Stream and Storing the Results for Later Use
- 14.10.3: Filtering and Sorting a Stream and Collecting the Results
- 14.10.3: Filtering and Sorting a Stream and Collecting the Results
- 14.10.4: Sorting Previously Collected Results
- 14.10.4: Sorting Previously Collected Results
- 14.11: Stream‹String› Manipulations
- 14.11: Stream‹String› Manipulations
- 14.11.1: Mapping Strings to Uppercase
- 14.11.1: Mapping Strings to Uppercase
- 14.11.2: Filtering Strings Then Sorting Them in Case-Insensitive Ascending Order
- 14.11.2: Filtering Strings Then Sorting Them in Case-Insensitive Ascending Order
- 14.11.3: Filtering Strings Then Sorting Them in Case-Insensitive Descending Order
- 14.11.3: Filtering Strings Then Sorting Them in Case-Insensitive Descending Order
- 14.12: Stream‹Employee› Manipulations
- 14.12: Stream‹Employee› Manipulations
- 14.12.1: Creating and Displaying a List‹Employee›
- 14.12.1: Creating and Displaying a List‹Employee›
- 14.12.2: Filtering Employees with Salaries in a Specified Range
- 14.12.2: Filtering Employees with Salaries in a Specified Range
- 14.12.3: Sorting Employees By Multiple Fields
- 14.12.3: Sorting Employees By Multiple Fields
- 14.12.4: Mapping Employees to Unique-Last-Name Strings
- 14.12.4: Mapping Employees to Unique-Last-Name Strings
- 14.12.5: Grouping Employees By Department
- 14.12.5: Grouping Employees By Department
- 14.12.6: Counting the Number of Employees in Each Department
- 14.12.6: Counting the Number of Employees in Each Department
- 14.12.7: Summing and Averaging Employee Salaries
- 14.12.7: Summing and Averaging Employee Salaries
- 14.13: Creating a Stream‹String› from a File
- 14.13: Creating a Stream‹String› from a File
- 14.14: Streams of Random Values
- 14.14: Streams of Random Values
- 14.15: Infinite Streams
- 14.15: Infinite Streams
- 14.16: Additional Notes on Interfaces
- 14.16: Additional Notes on Interfaces
- 14.17: Wrap-Up
- 14.17: Wrap-Up
- 14: Self-Review Exercises
- 14: Self-Review Exercises
- 14: Exercises
- 14: Exercises
- 15: JavaFX Graphical User Interfaces: Part 1
- 15: Objectives
- 15.1: Introduction
- 15.1: Introduction
- 15.2: JavaFX Scene Builder
- 15.2: JavaFX Scene Builder
- 15.3: JavaFX Application Window Structure
- 15.3: JavaFX Application Window Structure
- 15.4: Welcome Application: Displaying Text and an Image
- 15.4: Welcome Application: Displaying Text and an Image
- 15.4.1: Opening Scene Builder and Creating the File Welcome.fxml
- 15.4.1: Opening Scene Builder and Creating the File Welcome.fxml
- 15.4.2: Adding an Image to the Folder Containing Welcome.fxml
- 15.4.2: Adding an Image to the Folder Containing Welcome.fxml
- 15.4.3: Creating a VBox Layout Container
- 15.4.3: Creating a VBox Layout Container
- 15.4.4: Configuring the VBox Layout Container
- 15.4.4: Configuring the VBox Layout Container
- 15.4.5: Adding and Configuring a Label
- 15.4.5: Adding and Configuring a Label
- 15.4.6: Adding and Configuring an ImageView
- 15.4.6: Adding and Configuring an ImageView
- 15.4.7: Previewing the Welcome GUI
- 15.4.7: Previewing the Welcome GUI
- 15.5: Tip Calculator Application: Intro to Event Handling
- 15.5: Tip Calculator Application: Intro to Event Handling
- 15.5.1: Test-Driving the Tip Calculator
- 15.5.1: Test-Driving the Tip Calculator
- 15.5.2: Technologies Overview
- 15.5.2: Technologies Overview
- 15.5.3: Building the Application’s GUI
- 15.5.3: Building the Application’s GUI
- 15.5.4: TipCalculator Class
- 15.5.4: TipCalculator Class
- 15.5.5: TipCalculatorController Class; Implementing an Event Handler with a Lambda
- 15.5.5: TipCalculatorController Class; Implementing an Event Handler with a Lambda
- 15.6: Features Covered in the Other JavaFX Chapters
- 15.6: Features Covered in the Other JavaFX Chapters
- 15.7: Wrap-Up
- 15.7: Wrap-Up
- 15: Exercises
- 15: Exercises
- 16: JavaFX GUI: Part 2
- 16: Objectives
- 16.1: Introduction
- 16.1: Introduction
- 16.2: Laying Out Nodes in a Scene Graph
- 16.2: Laying Out Nodes in a Scene Graph
- 16.3: Painter Application: RadioButtons, Mouse Events and Shapes
- 16.3: Painter Application: RadioButtons, Mouse Events and Shapes
- 16.3.1: Technologies Overview
- 16.3.1: Technologies Overview
- 16.3.2: Creating the Painter.fxml File
- 16.3.2: Creating the Painter.fxml File
- 16.3.3: Building the GUI
- 16.3.3: Building the GUI
- 16.3.4: Painter Subclass of Application
- 16.3.4: Painter Subclass of Application
- 16.3.5: PainterController Class
- 16.3.5: PainterController Class
- 16.4: Color Chooser Application: Property Bindings and Property Listeners
- 16.4: Color Chooser Application: Property Bindings and Property Listeners
- 16.4.1: Technologies Overview
- 16.4.1: Technologies Overview
- 16.4.2: Building the GUI
- 16.4.2: Building the GUI
- 16.4.3: ColorChooser Subclass of Application
- 16.4.3: ColorChooser Subclass of Application
- 16.4.4: ColorChooserController Class
- 16.4.4: ColorChooserController Class
- 16.5: Cover Viewer Application: Data-Driven GUIs with JavaFX Collections
- 16.5: Cover Viewer Application: Data-Driven GUIs with JavaFX Collections
- 16.5.1: Technologies Overview
- 16.5.1: Technologies Overview
- 16.5.2: Building the GUI
- 16.5.2: Building the GUI
- 16.5.3: CoverViewer Subclass of Application
- 16.5.3: CoverViewer Subclass of Application
- 16.5.4: CoverViewerController Class
- 16.5.4: CoverViewerController Class
- 16.6: Cover Viewer Application: Customizing ListView Cells
- 16.6: Cover Viewer Application: Customizing ListView Cells
- 16.6.1: Technologies Overview
- 16.6.1: Technologies Overview
- 16.6.2: Copying the CoverViewer Application
- 16.6.2: Copying the CoverViewer Application
- 16.6.3: ImageTextCell Custom ListView Cell Layout
- 16.6.3: ImageTextCell Custom ListView Cell Layout
- 16.6.4: CoverViewerController Class
- 16.6.4: CoverViewerController Class
- 16.7: FileChooser and DirectoryChooser Dialogs
- 16.7: FileChooser and DirectoryChooser Dialogs
- 16.8: Other JavaFX Capabilities and JavaFX Accessibility
- 16.8: Other JavaFX Capabilities and JavaFX Accessibility
- 16.9: JavaFX Updates
- 16.9: JavaFX Updates
- 16.10: JavaFX Resources and Libraries
- 16.10: JavaFX Resources and Libraries
- 16.11: Wrap-Up
- 16.11: Wrap-Up
- 16: Exercises
- 16: Exercises
- 17: JavaFX Graphics and Multimedia
- 17: Objectives
- 17.1: Introduction
- 17.1: Introduction
- 17.2: Controlling Fonts with Cascading Style Sheets (CSS)
- 17.2: Controlling Fonts with Cascading Style Sheets (CSS)
- 17.2.1: CSS That Styles the GUI
- 17.2.1: CSS That Styles the GUI
- 17.2.2: FXML That Defines the GUI—Introduction to XML Markup
- 17.2.2: FXML That Defines the GUI—Introduction to XML Markup
- 17.2.3: Referencing the CSS File from FXML
- 17.2.3: Referencing the CSS File from FXML
- 17.2.4: Specifying the VBox’s Style Class
- 17.2.4: Specifying the VBox’s Style Class
- 17.2.5: Programmatically Loading CSS
- 17.2.5: Programmatically Loading CSS
- 17.3: Displaying Two-Dimensional Shapes
- 17.3: Displaying Two-Dimensional Shapes
- 17.3.1: Defining Two-Dimensional Shapes with FXML
- 17.3.1: Defining Two-Dimensional Shapes with FXML
- 17.3.2: CSS That Styles the Two-Dimensional Shapes
- 17.3.2: CSS That Styles the Two-Dimensional Shapes
- 17.4: Polylines, Polygons and Paths
- 17.4: Polylines, Polygons and Paths
- 17.4.1: GUI and CSS
- 17.4.1: GUI and CSS
- 17.4.2: PolyShapesController Class
- 17.4.2: PolyShapesController Class
- 17.5: Transforms
- 17.5: Transforms
- 17.6: Playing Video with Media, MediaPlayer and MediaView
- 17.6: Playing Video with Media, MediaPlayer and MediaView
- 17.6.1: VideoPlayer GUI
- 17.6.1: VideoPlayer GUI
- 17.6.2: VideoPlayerController Class
- 17.6.2: VideoPlayerController Class
- 17.7: Transition Animations
- 17.7: Transition Animations
- 17.7.1: TransitionAnimations.fxml
- 17.7.1: TransitionAnimations.fxml
- 17.7.2: TransitionAnimationsController Class
- 17.7.2: TransitionAnimationsController Class
- 17.8: Timeline Animations
- 17.8: Timeline Animations
- 17.9: Frame-by-Frame Animation with AnimationTimer
- 17.9: Frame-by-Frame Animation with AnimationTimer
- 17.10: CSS Transitions
- 17.10: CSS Transitions
- 17.11: Drawing on a Canvas
- 17.11: Drawing on a Canvas
- 17.12: Three-Dimensional Shapes
- 17.12: Three-Dimensional Shapes
- 17.13: FXGL: A Brief Intro to Game Programming with JavaFX
- 17.13: FXGL: A Brief Intro to Game Programming with JavaFX
- 17.14: Wrap-Up
- 17.14: Wrap-Up
- 17: Self-Review Exercises
- 17: Self-Review Exercises
- 17: Exercises
- 17: Exercises
- 18: Concurrency: Platform Threads to Virtual Threads
- 18: Objectives
- 18.1: Introduction
- 18.1: Introduction
- 18.2: sort/parallelSort Timings with the Date/Time API
- 18.2: sort/parallelSort Timings with the Date/Time API
- 18.3: Sequential vs. Parallel Streams
- 18.3: Sequential vs. Parallel Streams
- 18.4: Creating and Executing Platform Threads with the Executor Framework
- 18.4: Creating and Executing Platform Threads with the Executor Framework
- 18.5: Project Loom Overview
- 18.5: Project Loom Overview
- 18.6: Creating and Executing Virtual Threads with the Executor Framework
- 18.6: Creating and Executing Virtual Threads with the Executor Framework
- 18.6.1: Launching Virtual Threads with a Thread-Per-Task Executor
- 18.6.1: Launching Virtual Threads with a Thread-Per-Task Executor
- 18.6.2: Other Ways to Launch Virtual Threads
- 18.6.2: Other Ways to Launch Virtual Threads
- 18.7: Profiling Platform vs. Virtual Threads
- 18.7: Profiling Platform vs. Virtual Threads
- 18.7.1: Future and Callable Interfaces
- 18.7.1: Future and Callable Interfaces
- 18.7.2: Threading Approaches We’ll Use
- 18.7.2: Threading Approaches We’ll Use
- 18.7.3: Launching and Timing Large Numbers of Concurrent Tasks
- 18.7.3: Launching and Timing Large Numbers of Concurrent Tasks
- 18.7.4: Testing the Threading Approaches
- 18.7.4: Testing the Threading Approaches
- 18.7.5: Performance Analysis
- 18.7.5: Performance Analysis
- 18.8: Structured Concurrency and Scoped Values
- 18.8: Structured Concurrency and Scoped Values
- 18.9: Thread Synchronization Overview
- 18.9: Thread Synchronization Overview
- 18.10: Producer/Consumer Relationship with ArrayBlockingQueue
- 18.10: Producer/Consumer Relationship with ArrayBlockingQueue
- 18.10.1: Synchronization and State Dependence
- 18.10.1: Synchronization and State Dependence
- 18.10.2: Class ArrayBlockingQueue
- 18.10.2: Class ArrayBlockingQueue
- 18.10.3: Overview of the Producer/Consumer Example
- 18.10.3: Overview of the Producer/Consumer Example
- 18.10.4: Interface Buffer
- 18.10.4: Interface Buffer
- 18.10.5: Class BlockingBuffer
- 18.10.5: Class BlockingBuffer
- 18.10.6: Class BlockingBufferTest
- 18.10.6: Class BlockingBufferTest
- 18.10.7: Bounded Buffers
- 18.10.7: Bounded Buffers
- 18.10.8: Other Concurrent Collections
- 18.10.8: Other Concurrent Collections
- 18.11: Multithreading in JavaFX
- 18.11: Multithreading in JavaFX
- 18.11.1: Performing Computations in a Worker Thread: Fibonacci Numbers
- 18.11.1: Performing Computations in a Worker Thread: Fibonacci Numbers
- 18.11.2: Processing Intermediate Results: Sieve of Eratosthenes
- 18.11.2: Processing Intermediate Results: Sieve of Eratosthenes
- 18.12: Wrap-Up
- 18.12: Wrap-Up
- 18: Exercises
- 18: Exercises
- 19: Building API-Based Java Generative AI Applications
- 19: Objectives
- 19.1: Introduction
- 19.1: Introduction
- 19.2: OpenAI APIs
- 19.2: OpenAI APIs
- 19.2.1: Some of OpenAI’s Models
- 19.2.1: Some of OpenAI’s Models
- 19.2.2: OpenAI API Capabilities
- 19.2.2: OpenAI API Capabilities
- 19.2.3: Get an OpenAI Developer Account
- 19.2.3: Get an OpenAI Developer Account
- 19.2.4: OpenAI Developer API Key
- 19.2.4: OpenAI Developer API Key
- 19.3: Setting Up a Java Environment
- 19.3: Setting Up a Java Environment
- 19.3.1: Simple-OpenAI Open Source Library: Connecting to OpenAI from Java
- 19.3.1: Simple-OpenAI Open Source Library: Connecting to OpenAI from Java
- 19.3.2: IntelliJ Maven-Based Java Project
- 19.3.2: IntelliJ Maven-Based Java Project
- 19.4: Text Generation Via Chat Completions
- 19.4: Text Generation Via Chat Completions
- 19.4.1: Text Summarization
- 19.4.1: Text Summarization
- 19.4.2: Sentiment Analysis
- 19.4.2: Sentiment Analysis
- 19.4.3: Accessible Image Descriptions
- 19.4.3: Accessible Image Descriptions
- 19.4.4: Language Detection and Translation
- 19.4.4: Language Detection and Translation
- 19.4.5: Code Generation
- 19.4.5: Code Generation
- 19.4.6: Named Entity Recognition (NER) and Structured Outputs
- 19.4.6: Named Entity Recognition (NER) and Structured Outputs
- 19.5: Speech Synthesis and Speech Recognition
- 19.5: Speech Synthesis and Speech Recognition
- 19.5.1: English Speech-to-Text for Audio Transcription
- 19.5.1: English Speech-to-Text for Audio Transcription
- 19.5.2: Text-to-Speech
- 19.5.2: Text-to-Speech
- 19.6: Image Generation
- 19.6: Image Generation
- 19.7: Video
- 19.7: Video
- 19.7.1: Generating Video Closed Captions
- 19.7.1: Generating Video Closed Captions
- 19.7.2: Sora
- 19.7.2: Sora
- 19.7.3: Other Video GenAIs
- 19.7.3: Other Video GenAIs
- 19.8: Moderation
- 19.8: Moderation
- 19.9: Class OpenAIUtilities
- 19.9: Class OpenAIUtilities
- 19.9.1: Builder Design Pattern
- 19.9.1: Builder Design Pattern
- 19.9.2: package and import Statements
- 19.9.2: package and import Statements
- 19.9.3: Nested record Class Message
- 19.9.3: Nested record Class Message
- 19.9.4: SimpleOpenAI Client Object
- 19.9.4: SimpleOpenAI Client Object
- 19.9.5: chat Method
- 19.9.5: chat Method
- 19.9.6: Helper Method makeChatMessages
- 19.9.6: Helper Method makeChatMessages
- 19.9.7: describeImage Method
- 19.9.7: describeImage Method
- 19.9.8: translate Method
- 19.9.8: translate Method
- 19.9.9: chatWithStructuredOutput Method
- 19.9.9: chatWithStructuredOutput Method
- 19.9.10: speechToText Method
- 19.9.10: speechToText Method
- 19.9.11: textToSpeech Method
- 19.9.11: textToSpeech Method
- 19.9.12: image Method
- 19.9.12: image Method
- 19.9.13: speechToVTT Method
- 19.9.13: speechToVTT Method
- 19.9.14: checkPrompt Method
- 19.9.14: checkPrompt Method
- 19.10: Wrap-Up
- 19.10: Wrap-Up
- 19: Exercises
- 19: Exercises
- 20: Accessing Databases with JDBC and SQLite
- 20: Objectives
- 20.1: Introduction
- 20.1: Introduction
- 20.2: Relational Databases
- 20.2: Relational Databases
- 20.3: Setting Up the SQLite RDBMS
- 20.3: Setting Up the SQLite RDBMS
- 20.4: A books Database
- 20.4: A books Database
- 20.4.1: SELECT Queries
- 20.4.1: SELECT Queries
- 20.4.2: WHERE Clause
- 20.4.2: WHERE Clause
- 20.4.3: ORDER BY Clause
- 20.4.3: ORDER BY Clause
- 20.4.4: Merging Data from Multiple Tables with INNER JOIN
- 20.4.4: Merging Data from Multiple Tables with INNER JOIN
- 20.4.5: INSERT INTO Statement
- 20.4.5: INSERT INTO Statement
- 20.4.6: UPDATE Statement
- 20.4.6: UPDATE Statement
- 20.4.7: DELETE FROM Statement
- 20.4.7: DELETE FROM Statement
- 20.5: Connecting to and Querying a Database with JDBC
- 20.5: Connecting to and Querying a Database with JDBC
- 20.5.1: Automatic Driver Discovery
- 20.5.1: Automatic Driver Discovery
- 20.5.2: Connecting to the Database
- 20.5.2: Connecting to the Database
- 20.5.3: Creating a Statement for Executing Queries
- 20.5.3: Creating a Statement for Executing Queries
- 20.5.4: Executing a Query
- 20.5.4: Executing a Query
- 20.5.5: Processing a Query’s ResultSet
- 20.5.5: Processing a Query’s ResultSet
- 20.6: Querying the books Database
- 20.6: Querying the books Database
- 20.6.1: DisplayQueryResults App’s GUI
- 20.6.1: DisplayQueryResults App’s GUI
- 20.6.2: DisplayQueryResultsController Class
- 20.6.2: DisplayQueryResultsController Class
- 20.7: PreparedStatements
- 20.7: PreparedStatements
- 20.7.1: AddressBook App That Uses PreparedStatements
- 20.7.1: AddressBook App That Uses PreparedStatements
- 20.7.2: record Class Person
- 20.7.2: record Class Person
- 20.7.3: Class PersonQueries
- 20.7.3: Class PersonQueries
- 20.7.4: AddressBook GUI
- 20.7.4: AddressBook GUI
- 20.7.5: Class AddressBookController
- 20.7.5: Class AddressBookController
- 20.8: Stored Procedures
- 20.8: Stored Procedures
- 20.9: Transaction Processing
- 20.9: Transaction Processing
- 20.10: Wrap-Up
- 20.10: Wrap-Up
- 20: Exercises
- 20: Exercises
- 21: Java Platform Module System (JPMS)
- 21: Objectives
- 21.1: Introduction
- 21.1: Introduction
- 21.2: Module Declarations
- 21.2: Module Declarations
- 21.2.1: requires
- 21.2.1: requires
- 21.2.2: requires transitive—Implied Readability
- 21.2.2: requires transitive—Implied Readability
- 21.2.3: exports and exports…to
- 21.2.3: exports and exports…to
- 21.2.4: uses
- 21.2.4: uses
- 21.2.5: provides…with
- 21.2.5: provides…with
- 21.2.6: open, opens and opens…to
- 21.2.6: open, opens and opens…to
- 21.2.7: Restricted Keywords
- 21.2.7: Restricted Keywords
- 21.3: Modularized Welcome App
- 21.3: Modularized Welcome App
- 21.3.1: Welcome App’s Structure
- 21.3.1: Welcome App’s Structure
- 21.3.2: Class Welcome
- 21.3.2: Class Welcome
- 21.3.3: module-info.java
- 21.3.3: module-info.java
- 21.3.4: Module-Dependency Graph
- 21.3.4: Module-Dependency Graph
- 21.3.5: Compiling a Module
- 21.3.5: Compiling a Module
- 21.3.6: Running an App from a Module’s Exploded Folders
- 21.3.6: Running an App from a Module’s Exploded Folders
- 21.3.7: Packaging a Module into a Modular JAR File
- 21.3.7: Packaging a Module into a Modular JAR File
- 21.3.8: Running the Welcome App from a Modular JAR File
- 21.3.8: Running the Welcome App from a Modular JAR File
- 21.3.9: Aside: Classpath vs. Module Path
- 21.3.9: Aside: Classpath vs. Module Path
- 21.4: Creating and Using a Custom Module
- 21.4: Creating and Using a Custom Module
- 21.4.1: Exporting a Package for Use in Other Modules
- 21.4.1: Exporting a Package for Use in Other Modules
- 21.4.2: Using a Class from a Package in Another Module
- 21.4.2: Using a Class from a Package in Another Module
- 21.4.3: Compiling and Running the Example
- 21.4.3: Compiling and Running the Example
- 21.4.4: Packaging the App into Modular JAR Files
- 21.4.4: Packaging the App into Modular JAR Files
- 21.4.5: Strong Encapsulation and Accessibility
- 21.4.5: Strong Encapsulation and Accessibility
- 21.5: Module-Dependency Graphs: A Deeper Look
- 21.5: Module-Dependency Graphs: A Deeper Look
- 21.5.1: java.sql
- 21.5.1: java.sql
- 21.5.2: java.se
- 21.5.2: java.se
- 21.5.3: Error: Module Graph with a Cycle
- 21.5.3: Error: Module Graph with a Cycle
- 21.6: Migrating Code to Modules
- 21.6: Migrating Code to Modules
- 21.6.1: Unnamed Module
- 21.6.1: Unnamed Module
- 21.6.2: Automatic Modules
- 21.6.2: Automatic Modules
- 21.6.3: jdeps Tool for Java Dependency Analysis
- 21.6.3: jdeps Tool for Java Dependency Analysis
- 21.7: Resources in Modules
- 21.7: Resources in Modules
- 21.7.1: Requiring Multiple Modules
- 21.7.1: Requiring Multiple Modules
- 21.7.2: Opening a Module for Reflection
- 21.7.2: Opening a Module for Reflection
- 21.7.3: Compiling the Module
- 21.7.3: Compiling the Module
- 21.7.4: Running a Modularized App
- 21.7.4: Running a Modularized App
- 21.7.5: Module-Dependency Graph
- 21.7.5: Module-Dependency Graph
- 21.8: Creating Custom Runtimes with jlink
- 21.8: Creating Custom Runtimes with jlink
- 21.8.1: Custom Runtime Containing Only java.base
- 21.8.1: Custom Runtime Containing Only java.base
- 21.8.2: Creating a Custom Runtime for the Welcome App
- 21.8.2: Creating a Custom Runtime for the Welcome App
- 21.8.3: Executing the Welcome App Using a Custom Runtime
- 21.8.3: Executing the Welcome App Using a Custom Runtime
- 21.8.4: Using the Module Resolver on a Custom Runtime
- 21.8.4: Using the Module Resolver on a Custom Runtime
- 21.9: Services and ServiceLoader
- 21.9: Services and ServiceLoader
- 21.9.1: Service-Provider Interface
- 21.9.1: Service-Provider Interface
- 21.9.2: Loading and Consuming Service Providers
- 21.9.2: Loading and Consuming Service Providers
- 21.9.3: uses Module Directive and Service Consumers
- 21.9.3: uses Module Directive and Service Consumers
- 21.9.4: Running the App with No Service Providers
- 21.9.4: Running the App with No Service Providers
- 21.9.5: Implementing a Service Provider
- 21.9.5: Implementing a Service Provider
- 21.9.6: provides…with Module Directive and Declaring a Service Provider
- 21.9.6: provides…with Module Directive and Declaring a Service Provider
- 21.9.7: Running the App with One Service Provider
- 21.9.7: Running the App with One Service Provider
- 21.9.8: Implementing a Second Service Provider
- 21.9.8: Implementing a Second Service Provider
- 21.9.9: Running the App with Two Service Providers
- 21.9.9: Running the App with Two Service Providers
- 21.10: Wrap-Up
- 21.10: Wrap-Up
- 21: Exercises
- 21: Exercises
- 22: Computer Science Thinking: Recursion, Searching, Sorting, Big O
- 22: Objectives
- 22.1: Introduction
- 22.1: Introduction
- 22.2: Recursion Concepts
- 22.2: Recursion Concepts
- 22.3: Recursion Example: Factorials
- 22.3: Recursion Example: Factorials
- 22.4: Recursion Example: Fibonacci Series
- 22.4: Recursion Example: Fibonacci Series
- 22.5: Recursion vs. Iteration
- 22.5: Recursion vs. Iteration
- 22.6: Towers of Hanoi
- 22.6: Towers of Hanoi
- 22.7: Fractals
- 22.7: Fractals
- 22.7.1: Koch Curve Fractal
- 22.7.1: Koch Curve Fractal
- 22.7.2: (Optional) Case Study: Lo Feather Fractal
- 22.7.2: (Optional) Case Study: Lo Feather Fractal
- 22.7.3: (Optional) Fractal App GUI
- 22.7.3: (Optional) Fractal App GUI
- 22.7.4: (Optional) FractalController Class
- 22.7.4: (Optional) FractalController Class
- 22.8: Recursive Backtracking
- 22.8: Recursive Backtracking
- 22.9: Linear Search
- 22.9: Linear Search
- 22.10: Big O Notation
- 22.10: Big O Notation
- 22.10.1: O(1) Algorithms
- 22.10.1: O(1) Algorithms
- 22.10.2: O(n) Algorithms
- 22.10.2: O(n) Algorithms
- 22.10.3: O(n2) Algorithms
- 22.10.3: O(n2) Algorithms
- 22.10.4: Big O of the Linear Search
- 22.10.4: Big O of the Linear Search
- 22.11: Binary Search
- 22.11: Binary Search
- 22.11.1: Binary Search Implementation
- 22.11.1: Binary Search Implementation
- 22.11.2: Efficiency of the Binary Search
- 22.11.2: Efficiency of the Binary Search
- 22.12: Sorting Algorithms
- 22.12: Sorting Algorithms
- 22.13: Selection Sort
- 22.13: Selection Sort
- 22.13.1: Selection Sort Implementation
- 22.13.1: Selection Sort Implementation
- 22.13.2: Efficiency of the Selection Sort
- 22.13.2: Efficiency of the Selection Sort
- 22.14: Insertion Sort
- 22.14: Insertion Sort
- 22.14.1: Insertion Sort Implementation
- 22.14.1: Insertion Sort Implementation
- 22.14.2: Efficiency of the Insertion Sort
- 22.14.2: Efficiency of the Insertion Sort
- 22.15: Merge Sort
- 22.15: Merge Sort
- 22.15.1: Merge Sort Implementation
- 22.15.1: Merge Sort Implementation
- 22.15.2: Efficiency of the Merge Sort
- 22.15.2: Efficiency of the Merge Sort
- 22.16: Big O Summary for This Chapter’s Searching and Sorting Algorithms
- 22.16: Big O Summary for This Chapter’s Searching and Sorting Algorithms
- 22.17: Wrap-Up
- 22.17: Wrap-Up
- 22: Self-Review Exercises
- 22: Self-Review Exercises
- 22: Exercises
- 22: Exercises
- A: Introduction to JShell for Interactive Java
- A: Objectives
- A.1: Introduction
- A.1: Introduction
- A.2: Introduction to JShell
- A.2: Introduction to JShell
- A.2.1: Starting a JShell Session
- A.2.1: Starting a JShell Session
- A.2.2: Executing Statements
- A.2.2: Executing Statements
- A.2.3: Declaring Variables Explicitly
- A.2.3: Declaring Variables Explicitly
- A.2.4: Listing and Executing Prior Snippets
- A.2.4: Listing and Executing Prior Snippets
- A.2.5: Evaluating Expressions and Declaring Variables Implicitly
- A.2.5: Evaluating Expressions and Declaring Variables Implicitly
- A.2.6: Using Implicitly Declared Variables
- A.2.6: Using Implicitly Declared Variables
- A.2.7: Viewing a Variable’s Value
- A.2.7: Viewing a Variable’s Value
- A.2.8: Resetting a JShell Session
- A.2.8: Resetting a JShell Session
- A.2.9: Writing Multiline Statements
- A.2.9: Writing Multiline Statements
- A.2.10: Editing Code Snippets
- A.2.10: Editing Code Snippets
- A.2.11: Exiting JShell
- A.2.11: Exiting JShell
- A.3: Command-Line Input in JShell
- A.3: Command-Line Input in JShell
- A.4: Declaring and Using Classes
- A.4: Declaring and Using Classes
- A.4.1: Creating a Class in JShell
- A.4.1: Creating a Class in JShell
- A.4.2: Explicitly Declaring Reference-Type Variables
- A.4.2: Explicitly Declaring Reference-Type Variables
- A.4.3: Creating Objects
- A.4.3: Creating Objects
- A.4.4: Manipulating Objects
- A.4.4: Manipulating Objects
- A.4.5: Creating a Meaningful Variable Name for an Expression
- A.4.5: Creating a Meaningful Variable Name for an Expression
- A.4.6: Saving and Opening Code-Snippet Files
- A.4.6: Saving and Opening Code-Snippet Files
- A.5: Discovery with JShell Auto-Completion
- A.5: Discovery with JShell Auto-Completion
- A.5.1: Auto-Completing Identifiers
- A.5.1: Auto-Completing Identifiers
- A.5.2: Auto-Completing JShell Commands
- A.5.2: Auto-Completing JShell Commands
- A.6: Exploring a Class’s Members and Viewing Documentation
- A.6: Exploring a Class’s Members and Viewing Documentation
- A.6.1: Listing Class Math’s static Members
- A.6.1: Listing Class Math’s static Members
- A.6.2: Viewing a Method’s Parameters
- A.6.2: Viewing a Method’s Parameters
- A.6.3: Viewing a Method’s Documentation
- A.6.3: Viewing a Method’s Documentation
- A.6.4: Viewing a public Field’s Documentation
- A.6.4: Viewing a public Field’s Documentation
- A.6.5: Viewing a Class’s Documentation
- A.6.5: Viewing a Class’s Documentation
- A.6.6: Viewing Method Overloads
- A.6.6: Viewing Method Overloads
- A.6.7: Exploring Members of a Specific Object
- A.6.7: Exploring Members of a Specific Object
- A.7: Declaring Methods
- A.7: Declaring Methods
- A.7.1: Forward Referencing an Undeclared Method—Declaring Method displayCubes
- A.7.1: Forward Referencing an Undeclared Method—Declaring Method displayCubes
- A.7.2: Declaring a Previously Undeclared Method
- A.7.2: Declaring a Previously Undeclared Method
- A.7.3: Testing cube and Replacing Its Declaration
- A.7.3: Testing cube and Replacing Its Declaration
- A.7.4: Testing Updated Method cube and Method displayCubes
- A.7.4: Testing Updated Method cube and Method displayCubes
- A.8: Exceptions
- A.8: Exceptions
- A.9: Importing Classes and Adding Packages to the CLASSPATH
- A.9: Importing Classes and Adding Packages to the CLASSPATH
- A.10: Using an External Editor
- A.10: Using an External Editor
- A.11: Summary of JShell Commands
- A.11: Summary of JShell Commands
- A.11.1: Getting Help in JShell
- A.11.1: Getting Help in JShell
- A.11.2: /edit Command: Additional Features
- A.11.2: /edit Command: Additional Features
- A.11.3: /reload Command
- A.11.3: /reload Command
- A.11.4: /drop Command
- A.11.4: /drop Command
- A.11.5: Feedback Modes
- A.11.5: Feedback Modes
- A.11.6: Other JShell Features Configurable with /set
- A.11.6: Other JShell Features Configurable with /set
- A.12: Keyboard Shortcuts for Snippet Editing
- A.12: Keyboard Shortcuts for Snippet Editing
- A.13: How JShell Reinterprets Java for Interactive Use
- A.13: How JShell Reinterprets Java for Interactive Use
- A.14: IDE JShell Support
- A.14: IDE JShell Support
- A.15: Wrap-Up
- A.15: Wrap-Up
- A: Self-Review Exercises with Answers
- A: Self-Review Exercises with Answers
- B: Formatted Output
- B: Objectives
- B.1: Introduction
- B.1: Introduction
- B.2: Output with printf
- B.2: Output with printf
- B.3: Integer Formatting
- B.3: Integer Formatting
- B.4: Floating-Point Number Formatting
- B.4: Floating-Point Number Formatting
- B.5: String and Character Formatting
- B.5: String and Character Formatting
- B.6: Other Conversion Characters
- B.6: Other Conversion Characters
- B.7: Field Widths and Precisions
- B.7: Field Widths and Precisions
- B.8: Formatting Flags
- B.8: Formatting Flags
- B.9: Argument Indices for Explicit Positioning in Format Strings
- B.9: Argument Indices for Explicit Positioning in Format Strings
- B.10: Escape Sequences
- B.10: Escape Sequences
- B.11: Formatting Strings in Memory
- B.11: Formatting Strings in Memory
- B.12: Wrap-Up
- B.12: Wrap-Up
- B: Generative AI Exercises
- B: Generative AI Exercises
- C: Number Systems
- C: Objectives
- C.1: Introduction
- C.1: Introduction
- C.2: Abbreviating Binary Numbers as Octal and Hexadecimal Numbers
- C.2: Abbreviating Binary Numbers as Octal and Hexadecimal Numbers
- C.3: Converting Octal and Hexadecimal Numbers to Binary Numbers
- C.3: Converting Octal and Hexadecimal Numbers to Binary Numbers
- C.4: Converting from Binary, Octal or Hexadecimal to Decimal
- C.4: Converting from Binary, Octal or Hexadecimal to Decimal
- C.5: Converting from Decimal to Binary, Octal or Hexadecimal
- C.5: Converting from Decimal to Binary, Octal or Hexadecimal
- C.6: Negative Binary Numbers: Two’s Complement Notation
- C.6: Negative Binary Numbers: Two’s Complement Notation
- Student Supplemental Materials
- Student Supplemental Materials
- Footnotes
- Glossary