Ideal for working programmers new to Java, this best-selling book guides you through the language features and APIs of Java 21. Through fun, compelling, and realistic examples, authors Marc Loy, Patrick Niemeyer, and Dan Leuck introduce you to Java's fundamentals, including its class libraries, programming techniques, and idioms, with an eye toward building real applications. This updated sixth edition expands the content to continue covering lambdas and streams, and shows you how to use a functional paradigm in Java. You'll learn about the latest Java features introduced since the book's fifth edition, from JDK 15 through 21. You'll also take a deep dive into virtual threads (introduced as Project Loom in Java 19). This guide helps you: • Learn the structure of the Java language and Java applications • Write, compile, and execute Java applications • Understand the basics of Java threading and concurrent programming • Learn Java I/O basics, including local files and network resources • Create compelling interfaces with an eye toward usability • Learn how functional features have been integrated in Java • Keep up with Java developments as new versions are released Copyright Table of Contents Preface Who Should Read This Book New Developments New in This Edition (Java 15, 16, 17, 18, 19, 20, 21) Using This Book Online Resources Conventions Used in This Book Using Code Examples O’Reilly Online Learning How to Contact Us Acknowledgments Chapter 1. A Modern Language Enter Java Java’s Origins Growing Up A Virtual Machine Java Compared with Other Languages Safety of Design Simplify, Simplify, Simplify... Type Safety and Method Binding Incremental Development Dynamic Memory Management Error Handling Threads Scalability Safety of Implementation The Verifier Class Loaders Application and User-Level Security A Java Road Map The Past: Java 1.0–Java 20 The Present: Java 21 The Future Exercises Chapter 2. A First Application Java Tools and Environment Installing the JDK Installing IntelliJ IDEA and Creating a Project Running the Project Grabbing the Examples HelloJava Classes The main() Method Classes and Objects Variables and Class Types HelloComponent Inheritance The JComponent Class Relationships and Finger-Pointing Packages and Imports The paintComponent() Method HelloJava2: The Sequel Instance Variables Constructors Events The repaint() Method Interfaces Goodbye and Hello Again Review Questions Code Exercises Chapter 3. Tools of the Trade JDK Environment The Java VM Running Java Applications System Properties The Classpath CLASSPATH on Unix and macOS CLASSPATH on Windows CLASSPATH Wildcards Modules The Java Compiler Trying Java JAR Files The jar Utility Tool Wrap-Up Review Questions Code Exercises Advanced Code Exercises Chapter 4. The Java Language Text Encoding Comments Javadoc Comments Annotations Variables and Constants Types Primitive Types Reference Types A Word About Strings Statements and Expressions Statements Expressions Arrays Array Types Array Creation and Initialization Using Arrays Anonymous Arrays Multidimensional Arrays Types and Classes and Arrays, Oh My! Review Questions Code Exercises Advanced Exercises Chapter 5. Objects in Java Classes Declaring and Instantiating Classes Accessing Fields and Methods Static Members Methods Local Variables Shadowing Static Methods Initializing Local Variables Argument Passing and References Wrappers for Primitive Types Method Overloading Object Creation Constructors Working with Overloaded Constructors Object Destruction Garbage Collection Packages Importing Classes Custom Packages Member Visibility and Access Compiling with Packages Advanced Class Design Subclassing and Inheritance Abstract Classes and Methods Interfaces Inner Classes Anonymous Inner Classes Organizing Content and Planning for Failure Review Questions Code Exercises Advanced Exercises Chapter 6. Error Handling Exceptions Exceptions and Error Classes Exception Handling Bubbling Up Stack Traces Checked and Unchecked Exceptions Throwing Exceptions try Creep The finally Clause try with Resources Performance Issues Assertions Enabling and Disabling Assertions Using Assertions Real-World Exceptions Review Questions Code Exercises Advanced Exercises Chapter 7. Collections and Generics Collections The Collection Interface Collection Types The Map Interface Type Limitations Containers: Building a Better Mousetrap Can Containers Be Fixed? Enter Generics Talking About Types “There Is No Spoon” Erasure Raw Types Parameterized Type Relationships Why Isn’t a List a List ? Casts Converting Between Collections and Arrays Iterator A Closer Look: The sort() Method Application: Trees on the Field Useful Features Review Questions Code Exercises Advanced Exercises Chapter 8. Text and Core Utilities Strings Constructing Strings Strings from Things Comparing Strings Searching String Method Summary Things from Strings Parsing Primitive Numbers Tokenizing Text Regular Expressions Regex Notation The java.util.regex API Math Utilities The java.lang.Math Class Big/Precise Numbers Dates and Times Local Dates and Times Comparing and Manipulating Dates and Times Time Zones Parsing and Formatting Dates and Times Formatting Dates and Times Timestamps Other Useful Utilities Review Questions Code Exercises Chapter 9. Threads Introducing Threads The Thread Class and the Runnable Interface Controlling Threads Revisiting Animation with Threads Death of a Thread Virtual Threads Preview Feature Tangent A Quick Comparison Synchronization Serializing Access to Methods Accessing Class and Instance Variables from Multiple Threads Scheduling and Priority Thread State Time-Slicing Priorities Thread Performance The Cost of Synchronization Thread Resource Consumption Virtual Thread Performance Concurrency Utilities Upgrading Our Queue Demo Structured Concurrency So Many Threads to Pull Review Questions Code Exercises Chapter 10. File Input and Output Streams Basic I/O Character Streams Stream Wrappers The java.io.File Class File Streams RandomAccessFile The New I/O File API FileSystem and Path NIO File Operations The NIO Package Asynchronous I/O Performance Mapped and Locked Files Channels Buffers Character Encoders and Decoders FileChannel FileChannel Example wrap() Up Review Questions Code Exercises Advanced Exercises Chapter 11. Functional Approaches in Java Functions 101 Lambdas Lambda Expressions Functional Interfaces Method References Practical Lambdas: Sorting Streams Sources and Operations Filtering Streams Mapping Streams Flatmaps Reducing and Collecting Using Lambdas Directly Next Steps Review Questions Code Exercises Advanced Exercises Chapter 12. Desktop Applications Buttons and Sliders and Text Fields, Oh My! Component Hierarchies Model View Controller Architecture Labels and Buttons Text Components Other Components Containers and Layouts Frames and Windows JPanel Layout Managers Events Mouse Events Action Events Change Events Other Events Threading Considerations SwingUtilities and Component Updates Timers But Wait, There’s More Menus Modals and Pop-Ups User Interface and User Experience Review Questions Code Exercises Advanced Exercises Chapter 13. Network Programming in Java Uniform Resource Locators The URL Class Stream Data Getting the Content as an Object Managing Connections Talking to Web Applications Using the GET Method Using the POST Method The HttpURLConnection SSL and Secure Web Communications Network Programming Sockets Clients and Servers The DateAtHost Client A Distributed Game Much More to Explore Review Questions Code Exercises Advanced Exercises Appendix A. Code Examples and IntelliJ IDEA Grabbing the Main Code Examples Importing the Examples Appendix B. Exercise Answers Chapter 1: A Modern Language Chapter 2: A First Application Code Exercises Chapter 3: Tools of the Trade Code Exercises Chapter 4: The Java Language Code Exercises Advanced Exercises Chapter 5: Objects in Java Code Exercises Advanced Exercises Chapter 6: Error Handling Code Exercises Advanced Exercises Chapter 7: Collections and Generics Code Exercises Advanced Exercises Chapter 8: Text and Core Utilities Code Exercises Chapter 9: Threads Code Exercises Chapter 10: File Input and Output Code Exercises Advanced Exercises Chapter 11: Functional Approaches in Java Code Exercises Advanced Exercises Chapter 12: Desktop Applications Code Exercises Advanced Exercises Chapter 13: Network Programming in Java Code Exercises Advanced Exercises Glossary Index About the Authors Colophon