Java for Experienced Developers

Accelerated conversion course for experienced developers moving to Java


This is an intensive course designed to introduce experienced software developers to Java. The course is primarily aimed at developers who will be moving into Java/JEE from other languages, but it can also be used as a refresher or to consolidate knowledge gained through self-study.


Core Concepts

  • Origins and goals of the Java language
  • Bytecode and the Java Virtual Machine
  • The classpath environment variable
  • Packages and dynamic class loading

Basic Java Programming

  • Primitive types and literal values
  • Java syntax for binary and numeric literals
  • The difference between reference and value types
  • Converting between strings and numerical types
  • String parsing with the Scanner class
  • Pretty-printing with the Formatter class
  • Performing iteration and selection in Java
  • Java support for strings in switch statements
  • Equality of primitive and reference types
  • Creating and manipulating arrays
  • The costs of String concatenation

Object Oriented Development Part 1

  • Creating basic Java classes
  • Choosing accessibility levels
  • Overloading and overriding methods
  • Overriding the toString method
  • Comparing references using the instanceof operator
  • Comparing references using java.lang.Class objects
  • Inheriting from a base class
  • Creating abstract and final classes

Object Oriented Development Part 2

  • Writing appropriate class constructors
  • Private constructors and singletons
  • Static and instance initialization blocks
  • Top down class and object initialization
  • Declaring and using interfaces
  • Using inner and anonymous classes
  • Implementing equals and hashCode
  • Cloning and copy constructors


  • Why Java historically lacked enum support
  • The typesafe enumeration design pattern
  • How Java 5 baked the pattern into the language
  • The link between enums and classes
  • The java.lang.Enum base class
  • Extending enums with new members
  • Static methods added to enum types
  • New collections which support enums


  • Adding metadata to Java code
  • The advantages of annotations
  • Annotations vs configuration files
  • Declaring Java annotation types
  • Understanding meta-annotations
  • Adding methods to annotation types
  • Defining default values for methods
  • Discovering annotations with reflection
  • Writing annotation processors in Java 6

Exception Handling in Java

  • Introducing errors, runtime exceptions and checked exceptions
  • Exceptions in constructors and finalizers
  • Implementing an effective exception handling strategy
  • Using finally blocks properly to perform ‘clean-up’ tasks
  • Java 7 improvements to the try…catch syntax
  • The try-with-resources syntax introduced in Java 7

The Collections API

  • Introducing lists, sets and maps
  • Using iterators and enumerations
  • Choosing the most efficient collection class
  • Specialized collections

Generics in Java Part 1

  • The evolution of Generics in Java
  • Generics as a compile time construct
  • Generics vs templates in C++
  • Comparing Generics and inheritance
  • Working with generic collection classes
  • Introducing the java.lang.Class type
  • Support for Generics in the Reflection API

Generics in Java Part 2

  • Declaring generic classes and methods
  • Type inference when creating generic objects
  • Using the wildcard type in utility methods
  • Defining constraints with bounded wildcards
  • Adding generics to existing Java code

Java Concurrency Pt 1 (The Traditional Model)

  • Creating threads by subclassing
  • Creating threads via Runnable
  • Safely interrupting another thread
  • Synchronized methods and blocks
  • Creating and avoiding deadlock
  • Dangers when synchronizing methods

Java Concurrency Pt 2 (The Modern Model)

  • Lock objects as an alternative to the synchronized keyword
  • Creating threads using Executor objects
  • Storing return values in Future objects
  • Making full use of the ‘thread-friendly’ collection classes
  • The ‘fork-join’ framework introduced in Java 7

Java I/O

  • Introducing input and output streams
  • Introducing readers and writers
  • Using File objects to resolve file paths
  • Text based file I/O with buffered streams
  • Binary based file I/O using data streams
  • Serializing Java objects
  • Customizing Java Serialization

Networking in Java

  • Connecting to servers via Socket objects
  • Creating server loops with ServerSocket
  • Building a simple HTTP web server
  • Load balancing using worker threads
  • Load balancing using asynchronous I/O


  • Delegates must be proficient programmers, ideally with several years commercial programming experience

Sign up and stay in the loop

Be the first to know about upcoming workshops, courses, talks and events

Learn more

A great course. I had never done Java before but coming from a C/C++ background it was really easy to learn the way it was presented to us. Looking forward to using these new skills!