top of page

Effective Java

Duration (in days): 

4

Effective Java

Description:

Mastery of Java is not easy. In this course, we have collected best practices and patterns to help Java programmers move from fluency to mastery. 

We cover many of the best practices from Joshua Bloch book, but in addition, we have added examples of patterns and anti-patterns that we and our customers have experienced.

Objectives:

  • Learn how to write effective Java programs

  • Avoid common costly traps

Prerequisites:

Mastery of Java is not easy. In this course, we have collected best practices and patterns to help Java programmers move from fluency to mastery. 

We cover many of the best practices from Joshua Bloch book, but in addition, we have added examples of patterns and anti-patterns that we and our customers have experienced.

Audience

Java programmers

Outline

Creating and destroying objects

  • Static factory methods

  • Builders

  • Singletons

  • How to avoid creating unnecessary objects?

Common object methods

  • Proper use of equals

  • Proper use of hashCode

  • Proper implementation of toString

  • Cloning objects

Mastering classes and interfaces

  • Accesibility of members and classes

  • Accessors vs. fields

  • Composition vs. inheritance

  • Proper use of Interfaces

  • Proper design of class hierarchies

  • Implementation strategies with function objects

Generics

  • Avoiding raw types

  • Facvoring generic colections

  • Creating generic types and metods

  • The rule of PECS

  • Increasing API flexibility

Enumeration

  • Defining enumeration

  • Using annotations

  • Proper use of enumeration and annotations

Mastering methods

  • Designing method signatures

  • Validate paramters

  • Method overloading

  • Overloading, generics, and autoboxing

  • Default methods

  • Using variable lists of arguments

Programming techniques

  • For-each loops

  • Minimizing scope of local variables

  • Working with exact numbers

  • Strings vs. more meaningful classes

  • Interfaces vs. reflection

Working with exceptions

  • Handling exceptional conditions

  • Using standard exceptions

  • Unnecessary checked exceptions

  • Exceptions and abstractions

  • Capture failure information

Java NIO

  • High-speed I/O

  • Buffers

  • Channels

  • Schedulers

  • Proper use of NIO

java.util.concurrent

  • Executors

  • Futures

  • BlockingQueue

  • CountdownLatch

  • Locks

  • Semaphores

  • Exchanges

  • Atomic variables

  • Callable

Java Lambda

  • Lambda syntax

  • Why Lambda?

  • Closures

  • Function composition

  • Monoids

  • Monads

Java Streaming

  • Essential concepts

  • Streaming functions

  • Parallelism and streaming

  • Streaming alternatives


bottom of page