O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Core Java Volume I—Fundamentals, Eleventh Edition

Book Description

Core Java has long been recognized as the leading no-nonsense tutorial and reliable reference. It carefully explains the most important language and library features and shows how to build real-world applications with thoroughly tested examples. The example programs have been carefully crafted to be easy to understand as well as useful in practice, so you can rely on them as the starting point for your own code. All of the code examples have been rewritten to reflect modern Java best practices and code style. The critical new features introduced with Java SE 9 are all thoroughly explored with the depth and completeness that readers expect from this title. Core Java, Volume I--Fundamentals, Eleventh Edition, walks readers through the all details and takes a deep dive into the most critical features of the language and core libraries.

 

This guide will help you

  • Leverage your existing programming knowledge to quickly master core Java syntax
  • Understand how encapsulation, classes, and inheritance work in Java
  • Master interfaces, inner classes, and lambda expressions for functional programming
  • Improve program robustness with exception handling and effective debugging
  • Write safer, more readable programs with generics and strong typing
  • Use pre-built collections to collect multiple objects for later retrieval
  • Master concurrent programming techniques from the ground up
  • Build modern cross-platform GUIs with standard Swing components
  • Deploy configurable applications and applets, and deliver them across the Internet
  • Simplify concurrency and enhance performance with new functional techniques

Table of Contents

  1. Cover Page
  2. Title Page
  3. Contents
  4. Preface
  5. Chapter 1: An Introduction to Java
    1. 1.1 Java as a Programming Platform
    2. 1.2 The Java “White Paper” Buzzwords
      1. 1.2.1 Simple
      2. 1.2.2 Object-Oriented
      3. 1.2.3 Distributed
      4. 1.2.4 Robust
      5. 1.2.5 Secure
      6. 1.2.6 Architecture-Neutral
      7. 1.2.7 Portable
      8. 1.2.8 Interpreted
      9. 1.2.9 High-Performance
      10. 1.2.10 Multithreaded
      11. 1.2.11 Dynamic
    3. 1.3 Java Applets and the Internet
    4. 1.4 A Short History of Java
    5. 1.5 Common Misconceptions about Java
  6. Chapter 2: The Java Programming Environment
    1. 2.1 Installing the Java Development Kit
      1. 2.1.1 Downloading the JDK
      2. 2.1.2 Setting up the JDK
      3. 2.1.3 Installing Source Files and Documentation
    2. 2.2 Using the Command-Line Tools
    3. 2.3 Using an Integrated Development Environment
    4. 2.4 JShell
  7. Chapter 3: Fundamental Programming Structures in Java
    1. 3.1 A Simple Java Program
    2. 3.2 Comments
    3. 3.3 Data Types
      1. 3.3.1 Integer Types
      2. 3.3.2 Floating-Point Types
      3. 3.3.3 The char Type
      4. 3.3.4 Unicode and the char Type
      5. 3.3.5 The boolean Type
    4. 3.4 Variables and Constants
      1. 3.4.1 Declaring Variables
      2. 3.4.2 Initializing Variables
      3. 3.4.3 Constants
      4. 3.4.4 Enumerated Types
    5. 3.5 Operators
      1. 3.5.1 Arithmetic Operators
      2. 3.5.2 Mathematical Functions and Constants
      3. 3.5.3 Conversions between Numeric Types
      4. 3.5.4 Casts
      5. 3.5.5 Combining Assignment with Operators
      6. 3.5.6 Increment and Decrement Operators
      7. 3.5.7 Relational and boolean Operators
      8. 3.5.8 Bitwise Operators
      9. 3.5.9 Parentheses and Operator Hierarchy
    6. 3.6 Strings
      1. 3.6.1 Substrings
      2. 3.6.2 Concatenation
      3. 3.6.3 Strings Are Immutable
      4. 3.6.4 Testing Strings for Equality
      5. 3.6.5 Empty and Null Strings
      6. 3.6.6 Code Points and Code Units
      7. 3.6.7 The String API
      8. 3.6.8 Reading the Online API Documentation
      9. 3.6.9 Building Strings
    7. 3.7 Input and Output
      1. 3.7.1 Reading Input
      2. 3.7.2 Formatting Output
      3. 3.7.3 File Input and Output
    8. 3.8 Control Flow
      1. 3.8.1 Block Scope
      2. 3.8.2 Conditional Statements
      3. 3.8.3 Loops
      4. 3.8.4 Determinate Loops
      5. 3.8.5 Multiple Selections—The switch Statement
      6. 3.8.6 Statements That Break Control Flow
    9. 3.9 Big Numbers
    10. 3.10 Arrays
      1. 3.10.1 Declaring Arrays
      2. 3.10.2 Accessing Array Elements
      3. 3.10.3 The “for each” Loop
      4. 3.10.4 Array Copying
      5. 3.10.5 Command-Line Parameters
      6. 3.10.6 Array Sorting
      7. 3.10.7 Multidimensional Arrays
      8. 3.10.8 Ragged Arrays
  8. Chapter 4: Objects and Classes
    1. 4.1 Introduction to Object-Oriented Programming
      1. 4.1.1 Classes
      2. 4.1.2 Objects
      3. 4.1.3 Identifying Classes
      4. 4.1.4 Relationships between Classes
    2. 4.2 Using Predefined Classes
      1. 4.2.1 Objects and Object Variables
      2. 4.2.2 The LocalDate Class of the Java Library
      3. 4.2.3 Mutator and Accessor Methods
    3. 4.3 Defining Your Own Classes
      1. 4.3.1 An Employee Class
      2. 4.3.2 Use of Multiple Source Files
      3. 4.3.3 Dissecting the Employee Class
      4. 4.3.4 First Steps with Constructors
      5. 4.3.5 Declaring Local Variables with var
      6. 4.3.6 Working with null References
      7. 4.3.7 Implicit and Explicit Parameters
      8. 4.3.8 Benefits of Encapsulation
      9. 4.3.9 Class-Based Access Privileges
      10. 4.3.10 Private Methods
      11. 4.3.11 Final Instance Fields
    4. 4.4 Static Fields and Methods
      1. 4.4.1 Static Fields
      2. 4.4.2 Static Constants
      3. 4.4.3 Static Methods
      4. 4.4.4 Factory Methods
      5. 4.4.5 The main Method
    5. 4.5 Method Parameters
    6. 4.6 Object Construction
      1. 4.6.1 Overloading
      2. 4.6.2 Default Field Initialization
      3. 4.6.3 The Constructor with No Arguments
      4. 4.6.4 Explicit Field Initialization
      5. 4.6.5 Parameter Names
      6. 4.6.6 Calling Another Constructor
      7. 4.6.7 Initialization Blocks
      8. 4.6.8 Object Destruction and the finalize Method
    7. 4.7 Packages
      1. 4.7.1 Package Names
      2. 4.7.2 Class Importation
      3. 4.7.3 Static Imports
      4. 4.7.4 Addition of a Class into a Package
      5. 4.7.5 Package Access
      6. 4.7.6 The Class Path
      7. 4.7.7 Setting the Class Path
    8. 4.8 JAR Files
      1. 4.8.1 Creating JAR files
      2. 4.8.2 The Manifest
      3. 4.8.3 Executable JAR Files
      4. 4.8.4 Multi-Release JAR Files
      5. 4.8.5 A Note About Command-Line Options
    9. 4.9 Documentation Comments
      1. 4.9.1 Comment Insertion
      2. 4.9.2 Class Comments
      3. 4.9.3 Method Comments
      4. 4.9.4 Field Comments
      5. 4.9.5 General Comments
      6. 4.9.6 Package Comments
      7. 4.9.7 Comment Extraction
    10. 4.10 Class Design Hints
  9. Chapter 5: Inheritance
    1. 5.1 Classes, Superclasses, and Subclasses
      1. 5.1.1 Defining Subclasses
      2. 5.1.2 Overriding Methods
      3. 5.1.3 Subclass Constructors
      4. 5.1.4 Inheritance Hierarchies
      5. 5.1.5 Polymorphism
      6. 5.1.6 Understanding Method Calls
      7. 5.1.7 Preventing Inheritance: Final Classes and Methods
      8. 5.1.8 Casting
      9. 5.1.9 Abstract Classes
      10. 5.1.10 Protected Access
    2. 5.2 Object: The Cosmic Superclass
      1. 5.2.1 Variables of Type Object
      2. 5.2.2 The equals Method
      3. 5.2.3 Equality Testing and Inheritance
      4. 5.2.4 The hashCode Method
      5. 5.2.5 The toString Method
    3. 5.3 Generic Array Lists
      1. 5.3.1 Declaring Array Lists
      2. 5.3.2 Accessing Array List Elements
      3. 5.3.3 Compatibility between Typed and Raw Array Lists
    4. 5.4 Object Wrappers and Autoboxing
    5. 5.5 Methods with a Variable Number of Parameters
    6. 5.6 Enumeration Classes
    7. 5.7 Reflection
      1. 5.7.1 The Class Class
      2. 5.7.2 A Primer on Declaring Exceptions
      3. 5.7.3 Resources
      4. 5.7.4 Using Reflection to Analyze the Capabilities of Classes
      5. 5.7.5 Using Reflection to Analyze Objects at Runtime
      6. 5.7.6 Using Reflection to Write Generic Array Code
      7. 5.7.7 Invoking Arbitrary Methods and Constructors
    8. 5.8 Design Hints for Inheritance
  10. Chapter 6: Interfaces, Lambda Expressions, and Inner Classes
    1. 6.1 Interfaces
      1. 6.1.1 The Interface Concept
      2. 6.1.2 Properties of Interfaces
      3. 6.1.3 Interfaces and Abstract Classes
      4. 6.1.4 Static and Private Methods
      5. 6.1.5 Default Methods
      6. 6.1.6 Resolving Default Method Conflicts
      7. 6.1.7 Interfaces and Callbacks
      8. 6.1.8 The Comparator Interface
      9. 6.1.9 Object Cloning
    2. 6.2 Lambda Expressions
      1. 6.2.1 Why Lambdas?
      2. 6.2.2 The Syntax of Lambda Expressions
      3. 6.2.3 Functional Interfaces
      4. 6.2.4 Method References
      5. 6.2.5 Constructor References
      6. 6.2.6 Variable Scope
      7. 6.2.7 Processing Lambda Expressions
      8. 6.2.8 More about Comparators
    3. 6.3 Inner Classes
      1. 6.3.1 Use of an Inner Class to Access Object State
      2. 6.3.2 Special Syntax Rules for Inner Classes
      3. 6.3.3 Are Inner Classes Useful? Actually Necessary? Secure?
      4. 6.3.4 Local Inner Classes
      5. 6.3.5 Accessing Variables from Outer Methods
      6. 6.3.6 Anonymous Inner Classes
      7. 6.3.7 Static Inner Classes
    4. 6.4 Service Loaders
    5. 6.5 Proxies
      1. 6.5.1 When to Use Proxies
      2. 6.5.2 Creating Proxy Objects
      3. 6.5.3 Properties of Proxy Classes
  11. Chapter 7: Exceptions, Assertions, and Logging
    1. 7.1 Dealing with Errors
      1. 7.1.1 The Classification of Exceptions
      2. 7.1.2 Declaring Checked Exceptions
      3. 7.1.3 How to Throw an Exception
      4. 7.1.4 Creating Exception Classes
    2. 7.2 Catching Exceptions
      1. 7.2.1 Catching an Exception
      2. 7.2.2 Catching Multiple Exceptions
      3. 7.2.3 Rethrowing and Chaining Exceptions
      4. 7.2.4 The finally Clause
      5. 7.2.5 The Try-with-Resources Statement
      6. 7.2.6 Analyzing Stack Trace Elements
    3. 7.3 Tips for Using Exceptions
    4. 7.4 Using Assertions
      1. 7.4.1 The Assertion Concept
      2. 7.4.2 Assertion Enabling and Disabling
      3. 7.4.3 Using Assertions for Parameter Checking
      4. 7.4.4 Using Assertions for Documenting Assumptions
    5. 7.5 Logging
      1. 7.5.1 Basic Logging
      2. 7.5.2 Advanced Logging
      3. 7.5.3 Changing the Log Manager Configuration
      4. 7.5.4 Localization
      5. 7.5.5 Handlers
      6. 7.5.6 Filters
      7. 7.5.7 Formatters
      8. 7.5.8 A Logging Recipe
    6. 7.6 Debugging Tips
  12. Chapter 8: Generic Programming
    1. 8.1 Why Generic Programming?
      1. 8.1.1 The Advantage of Type Parameters
      2. 8.1.2 Who Wants to Be a Generic Programmer?
    2. 8.2 Defining a Simple Generic Class
    3. 8.3 Generic Methods
    4. 8.4 Bounds for Type Variables
    5. 8.5 Generic Code and the Virtual Machine
      1. 8.5.1 Type Erasure
      2. 8.5.2 Translating Generic Expressions
      3. 8.5.3 Translating Generic Methods
      4. 8.5.4 Calling Legacy Code
    6. 8.6 Restrictions and Limitations
      1. 8.6.1 Type Parameters Cannot Be Instantiated with Primitive Types
      2. 8.6.2 Runtime Type Inquiry Only Works with Raw Types
      3. 8.6.3 You Cannot Create Arrays of Parameterized Types
      4. 8.6.4 Varargs Warnings
      5. 8.6.5 You Cannot Instantiate Type Variables
      6. 8.6.6 You Cannot Construct a Generic Array
      7. 8.6.7 Type Variables Are Not Valid in Static Contexts of Generic Classes
      8. 8.6.8 You Cannot Throw or Catch Instances of a Generic Class
      9. 8.6.9 You Can Defeat Checked Exception Checking
      10. 8.6.10 Beware of Clashes after Erasure
    7. 8.7 Inheritance Rules for Generic Types
    8. 8.8 Wildcard Types
      1. 8.8.1 The Wildcard Concept
      2. 8.8.2 Supertype Bounds for Wildcards
      3. 8.8.3 Unbounded Wildcards
      4. 8.8.4 Wildcard Capture
    9. 8.9 Reflection and Generics
      1. 8.9.1 The Generic Class Class
      2. 8.9.2 Using Class<T> Parameters for Type Matching
      3. 8.9.3 Generic Type Information in the Virtual Machine
      4. 8.9.4 Type Literals
  13. Chapter 9: Collections
    1. 9.1 The Java Collections Framework
      1. 9.1.1 Separating Collection Interfaces and Implementation
      2. 9.1.2 The Collection Interface
      3. 9.1.3 Iterators
      4. 9.1.4 Generic Utility Methods
    2. 9.2 Interfaces in the Collections Framework
    3. 9.3 Concrete Collections
      1. 9.3.1 Linked Lists
      2. 9.3.2 Array Lists
      3. 9.3.3 Hash Sets
      4. 9.3.4 Tree Sets
      5. 9.3.5 Queues and Deques
      6. 9.3.6 Priority Queues
    4. 9.4 Maps
      1. 9.4.1 Basic Map Operations
      2. 9.4.2 Updating Map Entries
      3. 9.4.3 Map Views
      4. 9.4.4 Weak Hash Maps
      5. 9.4.5 Linked Hash Sets and Maps
      6. 9.4.6 Enumeration Sets and Maps
      7. 9.4.7 Identity Hash Maps
    5. 9.5 Views and Wrappers
      1. 9.5.1 Small Collections
      2. 9.5.2 Subranges
      3. 9.5.3 Unmodifiable Views
      4. 9.5.4 Synchronized Views
      5. 9.5.5 Checked Views
      6. 9.5.6 A Note on Optional Operations
    6. 9.6 Algorithms
      1. 9.6.1 Why Generic Algorithms?
      2. 9.6.2 Sorting and Shuffling
      3. 9.6.3 Binary Search
      4. 9.6.4 Simple Algorithms
      5. 9.6.5 Bulk Operations
      6. 9.6.6 Converting between Collections and Arrays
      7. 9.6.7 Writing Your Own Algorithms
    7. 9.7 Legacy Collections
      1. 9.7.1 The Hashtable Class
      2. 9.7.2 Enumerations
      3. 9.7.3 Property Maps
      4. 9.7.4 Stacks
      5. 9.7.5 Bit Sets
  14. Chapter 10: Graphical User Interface Programming
    1. 10.1 A History of Java User Interface Toolkits
    2. 10.2 Displaying Frames
      1. 10.2.1 Creating a Frame
      2. 10.2.2 Frame Properties
    3. 10.3 Displaying Information in a Component
      1. 10.3.1 Working with 2D Shapes
      2. 10.3.2 Using Color
      3. 10.3.3 Using Fonts
      4. 10.3.4 Displaying Images
    4. 10.4 Event Handling
      1. 10.4.1 Basic Event Handling Concepts
      2. 10.4.2 Example: Handling a Button Click
      3. 10.4.3 Specifying Listeners Concisely
      4. 10.4.4 Adapter Classes
      5. 10.4.5 Actions
      6. 10.4.6 Mouse Events
      7. 10.4.7 The AWT Event Hierarchy
    5. 10.5 The Preferences API
  15. Chapter 11: User Interface Components with Swing
    1. 11.1 Swing and the Model-View-Controller Design Pattern
    2. 11.2 Introduction to Layout Management
      1. 11.2.1 Layout Managers
      2. 11.2.2 Border Layout
      3. 11.2.3 Grid Layout
    3. 11.3 Text Input
      1. 11.3.1 Text Fields
      2. 11.3.2 Labels and Labeling Components
      3. 11.3.3 Password Fields
      4. 11.3.4 Text Areas
      5. 11.3.5 Scroll Panes
    4. 11.4 Choice Components
      1. 11.4.1 Checkboxes
      2. 11.4.2 Radio Buttons
      3. 11.4.3 Borders
      4. 11.4.4 Combo Boxes
      5. 11.4.5 Sliders
    5. 11.5 Menus
      1. 11.5.1 Menu Building
      2. 11.5.2 Icons in Menu Items
      3. 11.5.3 Checkbox and Radio Button Menu Items
      4. 11.5.4 Pop-Up Menus
      5. 11.5.5 Keyboard Mnemonics and Accelerators
      6. 11.5.6 Enabling and Disabling Menu Items
      7. 11.5.7 Toolbars
      8. 11.5.8 Tooltips
    6. 11.6 Sophisticated Layout Management
      1. 11.6.1 The Grid Bag Layout
      2. 11.6.2 Custom Layout Managers
    7. 11.7 Dialog Boxes
      1. 11.7.1 Option Dialogs
      2. 11.7.2 Creating Dialogs
      3. 11.7.3 Data Exchange
      4. 11.7.4 File Dialogs
  16. Chapter 12: Concurrency
    1. 12.1 What Are Threads?
    2. 12.2 Thread States
      1. 12.2.1 New Threads
      2. 12.2.2 Runnable Threads
      3. 12.2.3 Blocked and Waiting Threads
      4. 12.2.4 Terminated Threads
    3. 12.3 Thread Properties
      1. 12.3.1 Interrupting Threads
      2. 12.3.2 Daemon Threads
      3. 12.3.3 Thread Names
      4. 12.3.4 Handlers for Uncaught Exceptions
      5. 12.3.5 Thread Priorities
    4. 12.4 Synchronization
      1. 12.4.1 An Example of a Race Condition
      2. 12.4.2 The Race Condition Explained
      3. 12.4.3 Lock Objects
      4. 12.4.4 Condition Objects
      5. 12.4.5 The synchronized Keyword
      6. 12.4.6 Synchronized Blocks
      7. 12.4.7 The Monitor Concept
      8. 12.4.8 Volatile Fields
      9. 12.4.9 Final Variables
      10. 12.4.10 Atomics
      11. 12.4.11 Deadlocks
      12. 12.4.12 Thread-Local Variables
      13. 12.4.13 Why the stop and suspend Methods Are Deprecated
    5. 12.5 Thread-Safe Collections
      1. 12.5.1 Blocking Queues
      2. 12.5.2 Efficient Maps, Sets, and Queues
      3. 12.5.3 Atomic Update of Map Entries
      4. 12.5.4 Bulk Operations on Concurrent Hash Maps
      5. 12.5.5 Concurrent Set Views
      6. 12.5.6 Copy on Write Arrays
      7. 12.5.7 Parallel Array Algorithms
      8. 12.5.8 Older Thread-Safe Collections
    6. 12.6 Tasks and Thread Pools
      1. 12.6.1 Callables and Futures
      2. 12.6.2 Executors
      3. 12.6.3 Controlling Groups of Tasks
      4. 12.6.4 The Fork-Join Framework
    7. 12.7 Asynchronous Computations
      1. 12.7.1 Completable Futures
      2. 12.7.2 Composing Completable Futures
      3. 12.7.3 Long-Running Tasks in User Interface Callbacks
    8. 12.8 Processes
      1. 12.8.1 Building a Process
      2. 12.8.2 Running a Process
      3. 12.8.3 Process Handles
  17. Appendix