This course is aimed at existing Java developers who wish to obtain a deeper understanding of advanced Java programming techniques. The course also explores the features introduced in the latest releases of Java SE.
Delegates will learn:
Java SE and Java API latest techniques
Advanced file handling, NIO2, and JDBC
Localization and resource bundles
Reflection
Networking using sockets and RMI
Interfacing with native code using JNI
Multithreading, concurrency, and concurrent collections
Synchronizers. locks, and the Executor framework
Unit testing, mocking, and multithreaded testing
Tuning garbage collection
Overview of Java EE
Audience>
This course takes a deeper look into some of the advanced techniques and APIs available in contemporary Java, focussing specifically on Java 8 through Java 12. You'll learn all about the new modular approach introduced in Java 9, as well as a thorough investigation of functional programming techniques via lambdas, functional interfaces, and streams. The course also covers important parts of the API including concurrency, data manipulation, and security.
Prerequisites>
Delegates should have at least 6 months solid Java experience.
Outline>
Going Further with the Java Language
Autoboxing and unboxing
Varargs
Type-safe enumerations
Static imports
Java SE Features
Strings in switch
Binary integral literals
Underscores in numeric literals
Multi-catch and precise rethrow
Improved type inference for generic instance creation
try-with-resources statement
Simplified varargs method invocation
Java API Techniques
The Console class
The StringBuilder class
Formatting techniques
Regular expressions
File Handling
Working with files
Text files
Binary files
Serialization
NIO
XML files
Java properties files
NIO2
Overview of NIO2
Basic operations
File visitors
Directory watching
File attributes
Advanced JDBC Techniques
DataSources
Metadata
JDBC escape syntax
Transaction management
Additional techniques
Localization and Resource Bundles
Locales
Resource bundles
Locale-specific formatting and parsing
Reflection
Dynamic retrieval of information using reflection
Creating instances of extensibility objects
Class fields, methods and constructors
Remote Method Invocation (RMI)
Distributed Java applications
Stub and skeleton layer
Naming remote objects
Callbacks
Dynamic class loading
Distribution of RMI classes
Serialization of remote objects
Untrusted code
Managing security policies
Securing applications and applets
RMI vs. sockets and object serialization
Sockets
Introduction to sockets
Implementing a socket server
Implementing a socket client
Java Native Interface (JNI)
Getting started with JNI
Defining native methods in Java
Implementing native code in C/C++
Multithreading Techniques
Java synchronization language features
Designing thread-safe classes
Recommendations for synchronizing resource access
Additional Multithreading Issues
Using concurrent collections
Using synchronizers and locks
Thread pooling techniques
Using the executor framework
Using pooling effectively
TDD and Unit Testing
Principles of unit testing
Using JUnit effectively
Dependency injection and mocking
Testing Multithreaded Code
Correctness tests
Liveness tests
Performance tests
Techniques for testing multiple threads
Tuning Garbage Collection
Essential concepts
Understanding object lifetimes
Generational collectors
Heap organization
Garbage collection options
Garbage collection monitoring and tuning
Overview of Java EE
Java EE architecture
Web technologies
Enterprise JavaBeans
Messaging
Our Clients
Our clients have included prestigious national organisations such as Oxford University Press, multi-national private corporations such as JP Morgan and HSBC, as well
as public sector institutions such as the Department of Defence and the Department of Health.