Why Modules?
- Module System
- Levels of a Typical Application
- How Does Java SE 8 Address Maintainability and Reliability?
- Classes, Subclasses, Interfaces
- Class Level Unit of Reuse (Java SE 8)
- Packages
- JARs
- JAR Files and Distribution Issues
Working with the Module System
- Projects Before Modularization
- module-info.java: Introduction
- Creating a Truly Modular Project
- Compiling Modular JAR Files
- Accessibility Between Classes
- Readability Between Modules
- What Is Readable from the competition Module?
- The Effects of Exporting
Modular JDK
- Modular Development in JDK 9
- The JDK
- The Modular JDK
- Modules in JDK 9
- Java SE Modules
- The Module Graph of Java SE
- The Base Module
- Finding the Right Platform Module
Creating Custom Runtime Images
- What Is a Custom Runtime Image?
- Link Time
- Using jlink to Create a Custom Runtime Image
- Modules Resolved in a Custom Runtime Image
- Advantages of a Custom Runtime Image
- JIMAGE Format
- Footprint of a Custom Runtime Image
- jlink Resolves Transitive Dependencies
Migration
- Typical Application
- The League Application
- Run the Application
- The Unnamed Module
- Top-Down Migration
- Dependencies
- Check Dependencies
- Typical Application Modularized
Services
- Module Dependencies
- Service Relationships
- Expressing Service Relationships
- Using the Service Type in competition
- Choosing a Provider Class
- Module Dependencies and Services
- Designing a Service Type
- TeamGameManager Application with Additional Services
Multi-release JAR files
- Packaging an Application for Different JDKs
- Packaging an Application for Different JDK Versions
- The Solution: A Multi-Release JAR file
- What Is a Multi-Release JAR File?
- Structure of a JAR File
- Structure of a Multi-Release JAR File
- Search Process in an MRJAR
- Creating a Multi-Release JAR File
Private Interface Methods
- Private Methods in Interfaces
- Java SE 7 Interfaces
- Implementing Java SE 7 Interface Methods
- Implementing Methods in Interfaces
- What About the Problems of Multiple Inheritance?
- Inheritance Rules of default Methods
- Interfaces Don't Replace Abstract Classes
Enhancements to the Stream API
- One More Benefit of Default Methods
- Changing a Java Interface
- Why Enhance the Stream API?
- An Ordered List
- takeWhile Provides a Solution
- The Effects and Benefits of takeWhile
- An Unordered List
- filter vs takeWhile
JShell
- Has This Happened to You?
- A Million Test Classes and Main Methods
- JShell Provides a Solution
- Comparing Normal Execution with REPL
- Getting Started with JShell and REPL
- Scratch Variables
- Declaring Traditional Variables
- Code Snippets
Convenience Methods for Collections
- What Are Convenience Methods?
- Many Convenience Methods in Java SE 9
- Key Collections Interfaces
- Overloading the of Convenience Method
- Why Overload the of Method?
- Growing a Collection
- ofEntries() Method for Maps
- Immutability
Convenience Methods for Arrays
- Arrays
- Modeling DNA Strands
- Working with DNA Strands
- Working with DNA Strands by Using a for Loop
- Convenience Methods in the Arrays Class
- Equating DNA Strands
- DNA Subsequences
- Equating Subsequences of DNA
Enhanced Deprecations for APIs
- What Is Deprecation?
- What Is Enhanced Deprecation?
- How Do You Deprecate an API?
- Using @deprecated
- Enhancements to the @Deprecated Annotation in JDK 9
- Using the @Deprecated Annotation
- Notifications and Warnings
- Compiler Deprecation Warnings