Table of contents : 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 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 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 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 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 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 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 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 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 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 File Channel Example wrap() Up Review Questions Code Exercises Advanced Exercises 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 A. Code Examples and IntelliJ IDEA Grabbing the Main Code Examples Importing the Examples 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 and Logging 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 I/O Code Exercises Advanced Exercises Chapter 11: Functional Approaches Code Exercises Advanced Exercises Chapter 12: Desktop Applications Code Exercises Advanced Exercises Chapter 13: Network Programming Code Exercises Advanced Exercises