Advanced Java 8 Programming
Learning 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. This “skills-centric” course is about 50% hands-on lab and 50% lecture, designed to train attendees in advanced development skills, coupling the most current, effective techniques with the soundest industry practices. Throughout the course students will be led through a series of progressively advanced topics, where each topic consists of lecture, group discussion, comprehensive hands-on lab exercises, and lab review.
Our engaging instructors and mentors are highly experienced practitioners who bring years of current "on-the-job" experience into every classroom. Working in a 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
- 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)
- Implement a WebSocket endpoint
- 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
Audience & Pre-Requisites
This in an intermediate and beyond level Java development course geared for students experienced with Java 8 programming essentials who wish to quickly get up and running with advanced Java skills. This course does not cover Java programming fundamentals.
Take Before: Students should have practical skills equivalent to or should have received training in the following topic(s) as a pre-requisite:
- TT2100-J8: Introduction to Java 8 Programming for OO Experienced Developers
Outline
Session: Java 8 Review
Lesson: Evolving Interfaces
- Interfaces in Java 8
- Default methods
- Static methods
- Multiple Inheritance?
- Lab: Interfaces
Session: Lambda Expressions; Collections and Streams
Lesson: Introduction to Lambda Expressions
- Functional vs OO Programming
- Anonymous Inner classes
- Lambda Expression Syntax
- Functional Interfaces
- Method references
- Constructor references
Lesson: Java 8 Collection Updates
- Introduce the ConcurrentHashMap
- Lambda expressions and Collections
- Lab: Functional Collections
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
- Lab: Working with Streams
Lesson: Collectors
- Creating Collections from a Stream
- Group elements in the Stream
- Multi-level grouping of elements
- Partitioning Streams
- Lab: Collecting
Session: Additional Java 8 Enhancements
Lesson: Optional
- Introduce Optional
- Implement Optional attributes
- Lambda expressions and Optional
- Lab: Optional
Lesson: Other new Java 8 features
- StringJoiner
- Repeating and Type Annotations
- Parallel Array Sorting
- Improved type inference
- Method parameter reflection
- Updated command line tooling
Lesson: Java 8 Concurrency Updates
- The common thread pool
- Atomic variables
- LongAdder and LongAccumulator
- CompletableFuture
- Non-blocking asynchronous tasks
- Lab: CompletableFuture
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
- Lab: Using JavaScript
Session: Best Practices and Performance
Lesson: Java Virtual Machine
- Architecture of the JVM
- Application Execution
Lesson: Introspection and Reflection
- Reflection classes
- Introspection
- Dynamic invocation of methods
- Using annotations
- Type annotations
- Receiver parameter
- Lab: Introspection and Reflection
- Lab: Reflection Server
Lesson: Reference Objects
- List the kinds of object references available in Java
- Introduce Weak, Soft and PhantomReference
- Explain the ReferenceQueue
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
- Lab: Using CDI
Lesson: Using CDI
- Qualifiers
- @PostConstruct and @PreDestroy
- The @Produces Annotation
- Lab: Using Qualifiers
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
- Lab: Implementing a WebSocket
Lesson: Extending WebSockets
- Manage Client State
- Encoding and Decoding Messages
- Handling Errors
- Lab: Encoding and Decoding Messages
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
- Lab: Bean Validation
Lesson: Bean Validation
- Validate Parameters and Return Values
- Develop Custom Constraints
- Lab: Creating Constraints
Sorry! It looks like we haven’t updated our dates for the class you selected yet. There’s a quick way to find out. Contact us at 502.265.3057 or email info@training4it.com
Request a Date