Java Advanced OCP Training Course

Learn the more advanced topics of Java, and how to apply your knowledge

Pre-requisites

Our Java Beginner (OCA) Training Course, is required for entry into this course

Who will benefit

  • Developers who already know the fundamentals of Java and now wants to know how to apply it
  • Developers who already know the fundamentals of Java and now wants to get Oracle certification in Java

Certification

Attendance : If you have attended 80% of the sessions and completed all the class work, you qualify for the Attendance Certificate. Competency : If you have also completed all the practical projects as described the Outcomes section, you qualify for the Competency Certificate.

What you will learn

  • Create Java technology applications with the latest JDK Technology
  • Develop your object-oriented skills
  • Identify good practices in the use of the language to create robust Java application
  • Use Lambda expressions in Java applications
  • Store and manipulate data using collections
  • Manipulate files, directories and file systems
  • Connect to databases using standard SQL queries through JDBC
  • Create high-performance multi-threaded applications

What do I need?

  • Live Online Training : A laptop, and a stable internet connection. The recommended minimum speed is around 10 Mbps.
  • Classroom Training : A laptop, please notify us if you are not brining your own laptop. Please see the calendar below for the schedule

Day One1.2.3.4

1 Introduction

  • Course Objectives 
  • Introductions 
  • Audience 
  • Prerequisites
  • Course Roadmap
  • Lesson Format
  • Practice Environment
  • How Do You Learn More After the Course? 
  • Additional Resources 

2 Java OOP Review

  • Objectives 
  • Java Language Review 
  • A Simple Java Class: Employee 
  • Encapsulation: Private Data, Public Methods 
  • Subclassing 
  • Constructors in Subclasses 
  • Using super 
  • Using Access Control 
  • Protected Access Control: Example 
  • Inheritance: Accessibility of Overriding Methods 
  • Final Methods 
  • Final Classes
  • Applying Polymorphism 
  • Overriding methods of Object Class 
  • Overriding methods of Object Class: toString Method 
  • Overriding methods of Object Class: equals Method 
  • Overriding methods of Object Class: hashCode Method 
  • Casting Object References 
  • Upward Casting Rules 
  • Downward Casting Rules 
  • Methods Using Variable Arguments 
  • Static Imports 
  • Nested Classes 
  • Example: Member Class 
  • What Are Enums? 
  • Complex Enums 
  • Methods in Enums 
  • Summary 
     

3 Exception Handling and Assertions

  • Objectives 
  • Error Handling 
  • Exception Types 
  • Exception Handling Techniques in Java 
  • Exception Handling Techniques: try Block 
  • Exception Handling Techniques: finally Clause 
  • Exception Handling Techniques: try-with-resources 
  • Exception Handling Techniques: try-with-resources Improvements 
  • Exception Handling Techniques: | operator in a catch block 
  • Exception Handling Techniques: Declaring Exceptions 
  • Creating Custom Exceptions 
  • Assertions 
  • Assertion Syntax 
  • Internal Invariants 
  • Control Flow Invariants 
  • Class Invariants 
  • Controlling Runtime Evaluation of Assertions 
     

4 Java Interfaces

  • Objectives 
  • Java Interfaces 
  • Java SE 7 Interfaces 
  • Implementing Java SE 7 Interface Methods 
  • Example: Implementing abstract Methods 
  • Example: Duplicating Logic 
  • Implementing Methods in Interfaces 
  • Example: Implementing default Methods 
  • Example: Inheriting default Methods 
  • Example: Overriding a default Method 
  • What About the Problems of Multiple Inheritance?
  • Inheritance Rules of default Methods 
  • Interfaces Don't Replace Abstract Classes 
  • What If default Methods Duplicate Logic? 
  • Duplication Between default Methods 
  • The Problem with This Approach 
  • Introducing private Methods in Interfaces 
  • Example: Using private Methods to Reduce Duplication Between
  • default Methods 
  • Types of Methods in Java SE 9 Interfaces 
  • Anonymous Inner Classes 
  • Anonymous Inner Class: Example 
     

Day Two5.6.7.8

5 Collections and Generics

  • Objectives 
  • Type-Wrapper Classes 
  • Autoboxing and Auto-Unboxing 
  • Generic Methods 
  • A Generic Method 
  • Generic Classes 
  • Generic Cache Class 
  • Testing the Generic Cache Class 
  • Generics with Type Inference Diamond Notation 
  • Java SE 9: Diamond Notation with Anonymous Inner Classes 
  • Collections 
  • Collections Framework in Java 
  • Benefits of the Collections Framework 
  • Collection Types 
  • Key Collections Interfaces 
  • ArrayList 
  • ArrayList Without Generics
  • Generic ArrayList 
  • TreeSet: Implementation of Set 
  • Map Interface 
  • TreeMap: Implementation of Map 
  • Stack with Deque: Example 
  • Ordering Collections 
  • Comparable: Example 
  • Comparable Test: Example 
  • Comparator Interface 
  • Comparator: Example 
  • Comparator Test: Example 
  • Wildcards 
  • Wildcards: Upper Bound 
  • Why Use Generics? 
  • Java SE 9: Convenience Methods for Collections 
  • of Convenience Method 
  • Overloading of Method 
  • ofEntries Method for Maps 
  • Features of Convenience Methods 
     

6 Functional Interfaces and Lambda Expressions

  • Objectives 
  • Problem Statement 
  • RoboCall Class
  • RoboCall Every Person 
  • RoboCall Use Case: Eligible Drivers 
  • RoboCall Use Case: Eligible Voters 
  • RoboCall Use Case: Legal Drinking Age 
  • Solution: Parameterization of Values 
  • Solution: Parameterized Methods 
  • Parameters for Age Range 
  • Using Parameters for Age Range 
  • Corrected Use Case 
  • Parameterized Computation 
  • How To Pass a Function in Java? 
  • Prior to Java SE 8: Pass a Function Wrapped in an Object
  • Prior to SE 8: Abstract Behavior With an Interface 
  • Prior to SE 8: Replace Implementation Class with Anonymous Inner Class 
  • Lambda Solution: Replace Anonymous Inner Class with Lambda Expression 
  • Rewriting the Use Cases Using Lambda 
  • What Is a Lambda? 
  • What is a Functional Interface 
  • Which of These Interfaces Are Functional Interfaces? 
  • Lambda Expression 
  • Using Lambdas
  • Which of The Following Are Valid Lambda Expressions? 
  • Lambda Expression: Type Inference 
  • To Create a Lambda Expression 
  • Examples of Lambdas
  • Statement Lambdas: Lambda with Body
  • Examples: Lambda Expression 
  • Lambda Parameters 
  • Local-Variable Syntax for Lambda Parameters
  • Functional Interfaces: Predicate 
  • Using Functional Interfaces 


7 Collections, Streams, and Filters

  • Objectives 
  • Collections, Streams, and Filters 
  • The RoboCall App 
  • Collection Iteration and Lambdas 
  • RoboCallTest07: Stream and Filter 
  • Stream and Filter 
  • RobocallTest08: Stream and Filter Again 
  • SalesTxn Class 
  • Java Streams 
  • The Filter Method 
  • Filter and SalesTxn Method Call 
  • Method References 
  • Method Chaining 
  • Pipeline Defined 


8 Lambda Built-in Functional Interfaces

  • Objectives 
  • Built-in Functional Interfaces 
  • The java.util.function Package 
  • Example Assumptions 
  • Predicate 
  • Predicate: Example 
  • Consumer 
  • Consumer: Example 
  • Function 
  • Function: Example 
  • Supplier 
  • Supplier: Example 
  • Primitive Interface 
  • Return a Primitive Type 
  • Return a Primitive Type: Example 
  • Process a Primitive Type 
  • Process Primitive Type: Example 
  • Binary Types 
  • Binary Type: Example 
  • Unary Operator 
  • UnaryOperator: Example 
  • Wildcard Generics Review 
  • A Closer Look at Consumer
  • Interface List<E> use of forEach method 
  • Example of Range of Valid Parameters 
  • Plant Class Example 
  • TropicalFruit Class Example 
  • Use of Generic Expressions and Wildcards 
  • Consumer andThen method 
  • Using Consumer.andThen method 
     

Day Three9.10.11.12

9 Lambda Operations

  • Objectives 
  • Streams API 
  • Types of Operations 
  • Extracting Data with Map 
  • Taking a Peek 
  • Search Methods: Overview 
  • Search Methods 
  • Optional Class 
  • Short-Circuiting Example 
  • Stream Data Methods 
  • Performing Calculations 
  • Sorting 
  • Comparator Updates 
  • Saving Data from a Stream 
  • Collectors Class 
  • Quick Streams with Stream.of
  • Flatten Data with flatMap 
  • flatMap in Action 


10 The Module System

  • Objectives 
  • Module System 
  • Module System: Advantages 
  • Java Modular Applications 
  • What Is a Module? 
  • A Modular Java Application 
  • Issues with Access Across Nonmodular JARs 
  • Dependencies Across Modules 
  • What Is a Module? 
  • Module Dependencies with requires 
  • Module Package Availability with exports 
  • Module Graph 1 
  • Module Graph 2 
  • Transitive Dependencies 
  • Access to Types via Reflection 
  • Example Hello World Modular Application Code 
  • Example Hello World Modular File Structure 
  • Compiling a Modular Application
  • Single Module Compilation Example 
  • Multi Module Compilation Example 
  • Creating a Modular JAR 
  • Running a Modular Application
  • The Modular JDK 
  • Java SE Modules
  • The Base Module
  • Finding the Right Platform Module
  • Illegal Access to JDK Internals in JDK 9
  • What Is a Custom Runtime Image?
  • Link Time 
  • Using jlink to Create a Runtime Image 
  • Example: Using jlink to Create a Runtime Image 
  • Examining the Generated Image 
  • Modules Resolved in a Custom Runtime Image 
  • Advantages of a Custom Runtime Image 
  • JIMAGE Format 
  • Running the Application 
     

11 Migrating to a Modular Application

  • Objectives 
  • Topics 
  • The League Application 
  • Run the Application
  • The Unnamed Module 
  • Topics 
  • Top-down Migration and Automatic Modules 
  • Automatic Module 
  • Top-Down Migration 
  • Creating module-info.java—Determining Dependencies
  • Check Dependencies 
  • Library JAR to Automatic Module 
  • Typical Application Modularized 
  • Topics 
  • Bottom-up Migration 
  • Bottom-Up Migration 
  • Modularized Library 
  • Run Bottom-Up Migrated Application 
  • Fully Modularized Application 
  • Module Resolution 
  • Topics 
  • More About Libraries 
  • Run Application with Jackson Libraries 
  • Open Soccer to Reflection from Jackson Libraries 
  • Topics 
  • Split Packages 
  • Splitting a Java 8 Application into Modules 
  • Java SE 8 Application Poorly Designed with Split Packages 
  • Migration of Split Package JARs to Java SE 9 
  • Addressing Split Packages
  • Topics 
  • Cyclic Dependencies 
  • Addressing Cyclic Dependency 1 
  • Addressing Cyclic Dependency 2 
  • Top-down or Bottom-up Migration Summary 
12 Services in a Modular Application

  • Objectives
  • Topics 
  • Modules and Services 
  • Components of a Service 
  • Produce and Consume Services 
  • Module Dependencies Without Services 
  • Service Relationships 
  • Expressing Service Relationships 
  • Topics 
  • Using the Service Type in competition 
  • Choosing a Provider Class 
  • Module Dependencies and Services 1 
  • Module Dependencies and Services 2
  • Module Dependencies and Services 3 
  • Designing a Service Type 
  • Topics 
  • TeamGameManager Application with Additional Services 
  • module-info.java for competition module 
  • module-info.java for league and knockout modules 
  • module-info.java for soccer and basketball modules 

Day Four13.14.15.16


13 Concurrency

  • Objectives 
  • Task Scheduling 
  • Legacy Thread and Runnable 
  • Extending Thread 
  • Implementing Runnable 
  • The java.util.concurrent Package 
  • Recommended Threading Classes 
  • java.util.concurrent.ExecutorService 
  • Example ExecutorService 
  • Shutting Down an ExecutorService 
  • java.util.concurrent.Callable 
  • Example Callable Task 
  • java.util.concurrent.Future 
  • Example 
  • Threading Concerns 
  • Shared Data 
  • Problems with Shared Data 
  • Nonshared Data 
  • Atomic Operations 
  • Out-of-Order Execution 
  • The synchronized Keyword 
  • synchronized Methods 
  • synchronized Blocks 
  • Object Monitor Locking 
  • Threading Performance 
  • Performance Issue: Examples 
  • java.util.concurrent Classes and Packages 
  • The java.util.concurrent.atomic Package 
  • java.util.concurrent.CyclicBarrier 
  • Thread-Safe Collections 
  • CopyOnWriteArrayList: Example 


14 Parallel Streams

  • Objectives
  • Streams Review 
  • Old Style Collection Processing 
  • New Style Collection Processing 
  • Stream Pipeline: Another Look 
  • Styles Compared 
  • Parallel Stream 
  • Using Parallel Streams: Collection 
  • Using Parallel Streams: From a Stream 
  • Pipelines Fine Print
  • Embrace Statelessness 
  • Avoid Statefulness 
  • Streams Are Deterministic for Most Part 
  • Some Are Not Deterministic 
  • Reduction 
  • Reduction Fine Print 
  • Reduction: Example
  • A Look Under the Hood 
  • Illustrating Parallel Execution 
  • Performance
  • A Simple Performance Model 


15 Terminal Operations: Collectors

  • Objectives 
  • Agenda 
  • Streams and Collectors Versus Imperative Code 
  • Predefined Collectors 
  • A Simple Collector 
  • A More Complex Collector
  • Agenda 
  • The Three Argument collect Method of Stream 
  • The collect Method Used with a Sequential Stream 
  • The collect Method Used with a Parallel Stream 
  • The collect Method: Collect to an ArrayList Example 
  • Agenda 
  • The Single Argument collect Method of Stream 
  • Using Predefined Collectors From the Collectors Class 
  • List of Predefined Collectors 
  • Stand-Alone Collectors 
  • Stand-Alone Collector:List all Elements 
  • maxBy() Example 
  • Adapting Collector: filtering() 
  • Composing Collectors : groupingBy() 
  • Composing Collectors: Using Mapping 
  • toMap() and Duplicate Keys 
  • Agenda
  • groupingBy and partitioningBy Collectors 
  • Stand-Alone groupingBy: Person Elements By City 
  • Stream Operations Or Equivalent Collectors? 
  • Stream Operations Or Equivalent Collectors with groupingBy 
  • Stream.count(), Collectors.counting and groupingBy 
  • Composing Collectors: Tallest in Each City 
  • groupingBy: Additional Processing with entrySet() 
  • Agenda
  • Nested Values 
  • Data Organization of ComplexSalesTxn 
  • Displaying Nested Values: Listing Line Items in Each Transaction 
  • Displaying Nested Values: Listing Line items 
  • Displaying Nested Values: Grouping LineItem elements 
  • groupingBy Examples for ComplexSalesTxn 
  • Group Items by Salesperson 
  • Agenda 
  • Complex Custom Collectors 
  • The collect Method: Using a Custom Collector 
  • Creating a Custom Collector: Methods to Implement 
  • Custom Example MyCustomCollector 
  • Finisher Example MyCustomCollector
  • A More Complex Collector 
  • A More Complex Collector CustomGroupingBy 


16 Creating Custom Streams

  • Objectives 
  • Topics 
  • Performance: Intuition and Measurement 
  • Parallel Versus Sequential Example 
  • Spliterator 
  • Decomposition with trySplit() 
  • Integration with Streams
  • Modifying LongStream Spliterator 
  • Spliterator TestSpliterator 
  • Using TestSpliterator 
  • Topics
  • Creating a Custom Spliterator 
  • Is a Custom Spliterator Needed for a Game Engine? 
  • A Tic-Tac-Toe Engine Using the map Method of Stream 
  • A Custom Spliterator Example for a Custom Collection 
  • Custom N-ary Tree 
  • Possible Implementation for NaryTreeSpliterator 
  • Stream<Node> in Use 
  • Implementing Parallel Processing 
  • Stream<Node> in Use 
  • Summary of NTreeAsListSpliterator 

Day Five17.18.19.20


17 Java I/O Fundamentals and File I/O (NIO.2)

  • Objectives 
  • Java I/O Basics 
  • I/O Streams 
  • I/O Application 
  • Data Within Streams 
  • Byte Stream InputStream Methods 
  • Byte Stream: Example 
  • Character Stream Methods 
  • Character Stream: Example 
  • I/O Stream Chaining 
  • Chained Streams: Example 
  • Console I/O 
  • Writing to Standard Output 
  • Reading from Standard Input 
  • Channel I/O 
  • Persistence 
  • Serialization and Object Graphs 
  • Transient Fields and Objects 
  • Transient: Example 
  • Serial Version UID 
  • Serialization: Example 
  • Writing and Reading an Object Stream 
  • Serialization Methods 
  • readObject: Example 
  • New File I/O API (NIO.2) 
  • Limitations of java.io.File 
  • File Systems, Paths, Files 
  • Relative Path Versus Absolute Path 
  • Java NIO.2 Concepts 
  • Path Interface 
  • Path Interface Features 
  • Path: Example 
  • Removing Redundancies from a Path 
  • Creating a Subpath 
  • Joining Two Paths 
  • Symbolic Links 
  • Working with Links 
  • File Operations
  • BufferedReader File Stream 
  • NIO File Stream 
  • Read File into ArrayList 
  • Managing Metadata 


18 Secure Coding Guidelines

  • Objectives 
  • Java SE Security Overview 
  • Secure Coding Guidelines 
  • Vulnerabilities 
  • Secure Coding Antipatterns 
  • Antipatterns in Java 
  • Fundamentals 
  • Fundamentals: Why Should I Care? 
  • Denial of Service 
  • Confidential Information 
  • Injection and Inclusion 
  • Accessibility and Extensibility 
  • Input Validation 
  • Mutability 
  • Object Construction 
  • Serialization and Deserialization 


19 Building Database Applications with JDBC

  • Objectives 
  • What Is the JDBC API? 
  • What Is JDBC Driver? 
  • Connecting to a Database 
  • Obtaining a JDBC Driver 
  • Register the JDBC driver with the DriverManager 
  • Constructing a Connection URL 
  • Establishing a Connection 
  • Using the JDBC API 
  • Key JDBC API Components 
  • Writing Queries and Getting Results 
  • Using a ResultSet Object 
  • CRUD Operations Using JDBC API: Retrieve 
  • CRUD Operations Using JDBC: Retrieve 
  • CRUD Operations Using JDBC API: Create 
  • CRUD Operations Using JDBC API: Update 
  • CRUD Operations Using JDBC API: Delete 
  • SQLException Class 
  • Closing JDBC Objects 
  • try-with-resources Construct 
  • Using PreparedStatement 
  • Using PreparedStatement: Setting Parameters 
  • Executing PreparedStatement 
  • PreparedStatement:Using a Loop to Set Values 
  • Using CallableStatement 


20 Localization

  • Objectives 
  • Why Localize? 
  • A Sample Application 
  • Locale 
  • Properties 
  • Loading and Using a Properties File 
  • Loading Properties from the Command Line 
  • Resource Bundle 
  • Resource Bundle File 
  • Sample Resource Bundle Files 
  • Initializing the Sample Application 
  • Sample Application: Main Loop
  • The printMenu Method 
  • Changing the Locale
  • Sample Interface with French 
  • Format Date and Currency 
  • Displaying Currency 
  • Formatting Currency with NumberFormat 
  • Displaying Dates 2
  • Displaying Dates with DateTimeFormatter 
  • Format Styles 
Back to top