Duration:
4 Days
Audience:
Employees of federal, state and local governments; and businesses working with the government.
This is an intermediate level Java SE (JSE) developer course, designed for experienced Java 8 developers. Attendees should have current hands-on experience in developing basic Java 8 applications.
Course Overview
The Advanced Java 8 Programming is a comprehensive hands-on advanced Java training workshop geared for experienced developers who wish to explore specific advanced programming APIs and techniques. “Advanced Java” can encompass many skills and meanings. The agenda below includes common ‘next-level’ Java development tasks beyond a core knowledge base, exploring new features in Java 8 and how to harness and apply them to improve application development efforts and performance.
Our team will collaborate with you to adjust this agenda to target specific challenges or initiatives facing your development team or organization.
Course Objectives
Students who attend Advanced Java 8 Programming will leave this course armed with the required skills to improve their Java applications using sound coding techniques and best practices.
Working within in an engaging, hands-on learning environment, guided by our expert team, attendees will learn to:
- Understand functional programming means and what it brings to the table
- Understand how Lambda expressions and functional interfaces can greatly enhance other aspects of Java
- Use the new Stream constructs to work with Collections and Collectors
- Become familiar with the methods of the Collection API introduced in Java 8
- Work with default methods and pass methods as arguments
- Use the new features to support concurrency in multi-core systems
- Understand and work with the JavaScript engine Nashorn
- Explore the Java Virtual Machine (JVM)
- Work Java and JEE’s version of dependency injection (CDI)
- Work with WebSockets
- Use Java Bean validation
Specific Java 8 features that are covered in the course include:
- Lambda Expressions
- Streams
- Collectors
- Interface methods
- Lambda expressions and Collections
Topics Covered
Session: Introduction to Lambda Expressions
Lesson: Functional Programming
- Functional vs OO Programming
- Anonymous Inner-classes
- Utility Methods
- Lambda Expressions
Lesson: Lambda Expressions and Functional Interface
- Lambda Expression Syntax
- Functional Interfaces
- Type Inference in Java 8
- Method references
Session: Streams
Lesson: Streams
- Processing Collections of data
- The Stream interface
- Reduction and Parallelism
- Filtering collection data
- Sorting Collection data
- Map collection data
- Find elements in Stream
- Numeric Streams
- Create infinite Streams
- Sources for using Streams
Lesson: Collectors
- Creating Collections from a Stream
- Group elements in the Stream
- Multi-level grouping of elements
- Partitioning Streams
Session: Additional Java 8 Enhancements
Lesson: Evolving Interfaces
- Interfaces in Java 8
- Default methods
- Static methods
- Multiple Inheritance?
Lesson: Optional
- Introduce Optional
- Implement Optional attributes
- Lambda expressions and Optional
Lesson: Java 8 Collection Updates
- Introduce the ConcurrentHashMap
- Lambda expressions and Collections
Lesson: Java 8 Concurrency Updates
- The common thread pool
- Atomic variables
- LongAdder and LongAccumulator
- CompletableFuture
- Non-blocking asynchronous tasks
Lesson: Nashorn JavaScript Engine
- Working with JavaScript and Java
- Accessing Nashorn
- Executing JavaScript from Java
- Executing Java from JavaScript
- Implementing a Java Interface
- Alternatives to Nashorn
Session: Best Practices and Performance
Lesson: Java Virtual Machine
- Architecture of the JVM
- Application Execution
Session: Effective Java
Lesson: Objects, Declarations, and Initializations
- Abstraction and Responsibilities
- Low Coupling
- Programming principles
- Inheritance
Lesson: Exceptions
- Proper use of Exceptions
- Managing state in exceptional situations
- Checked vs. Unchecked Exceptions
Session: Java 8 Performance
Lesson: Performance and Java 8
- Performance Across Java Versions
- Tiered Compilation
- Nashorn versus Java 7’s JavaScript Engine
- Lambda Expressions versus Inner Classes
- Impact of Streams versus Collections
- Date/Time Classes
- I/O Stream Recommendations
- Encoding/Decoding
- Strings and Spring Interning
Session: Contexts and Dependency Injection (CDI)
Lesson: Introduction to CDI
- Context Dependency Injection (CDI)
- The @Inject Annotation
- The @Default Annotation
- The @Alternative Annotation
- The @Named Annotation
Lesson: Using CDI
- Qualifiers
- @PostConstruct and @PreDestroy
- The @Produces Annotation
Session: Java API for WebSocket
Lesson: Introduction to WebSocket
- Java API for WebSocket Overview
- Using WebSocket in Java EE
- Endpoint Instances
Lesson: Implementing WebSocket Endpoint
- Annotated Endpoints
- Receiving messages
- Send Response to Client(s)
- JavaScript to Setup a WebSocket Connection
Session: Java Bean Validation (JSR 349)
Lesson: Introduction to Bean Validation
- Bean Validation
- Define Constraints on Object Models
- Core Validation Annotations
- Validate Objects and Object Graphs
Lesson: Bean Validation
- Validate Parameters and Return Values
- Develop Custom Constraints
Session: Additional Topics (Optional)
Lesson: Java I/O
- The Java I/O Mechanism
- Subclasses Accessing Real Data
- Filter Classes
- New File IO – NIO
- NIO Overview