Advanced Java : how to create and destroy objects, instance construction, constructors without arguments, static initialization, construction patterns, dependency injection, using methods common to all objects, methods equals and hash code, method to string, useful helper classes, how to design classes and interfaces, functional interfaces, default and static methods, abstract classes, multiple inheritance, encapsulation, final classes and methods, how and when to use generics, generics and interfaces, generics and classes, generics and methods, limitation of generics, accessing generic type parameters, how and when to use enums and annotations, enums as special classes, enums and instance fields, convenient enums methods, specialize collections, how to write methods efficiently, method signatures, method body, method overloading, method overriding, method documentation, general programming guidelines, class fields and local variables, method arguments and local variables, boxing and unboxing, how and when to use exceptions, concurrency best practices, built-in serialization techniques, how to use reflection effectively, dynamic languages support, java compiler api, java annotation processors, java agents, running annotation processors.