Effective Java

During this course, the participants will receive knowledge and skills needed for effective and efficient development on the Java SE platform. We will cover 12 modules, examining the effective and optimal usage of Java features in practice, from basic ones introduced in the first versions up to those coming after Java 9.
  • duration 30 hours
  • Language English
  • format Online
duration
30 hours
location
Online
Language
English
Code
JVA-017
price
€ 750 *

Available sessions

To be determined



Training for 7-8 or more people?
Customize trainings for your specific needs

Description

Welcome to "Effective Java," a course meticulously designed to provide participants with the advanced knowledge and skills necessary for effective and efficient development on the Java SE platform. This course delves into the nuances of Java programming, ensuring that developers can write clearer, more correct, robust, and reusable code. Covering a broad range of topics from foundational features to the latest advancements post-Java 9, this course is essential for anyone looking to deepen their understanding of Java and enhance their coding practices.

 

Throughout this course, participants will:

  Gain a deeper understanding of Java programming language features and best practices.

  Explore new design patterns and language idioms to write more efficient and maintainable code.

  Learn to leverage advanced Java features such as generics, enums, annotations, and autoboxing.

  Understand the evolution of Java features and how to optimally use them in modern development.

 

Key Topics

  • Creating and Destroying Objects
  • Methods Common to All Objects
  • Classes and Interfaces
  • Generics
  • Enums and Annotations
  • Methods
  • General Programming
  • Exceptions
  • Concurrency
  • Serialization
  • Lambdas and Streams
  • From Java 9 and beyond

 

By the end of this course, participants will:

Master Java Language Features:

  • Develop a deep understanding of both foundational and advanced Java features.
  • Write code that is clear, correct, robust, and reusable.

Implement Design Patterns:

  • Utilize modern design patterns and idioms to simplify and improve coding practices.
  • Enhance the efficiency and maintainability of Java applications.

Optimize Use of Java Features:

  • Make the most of advanced features like generics, enums, annotations, and autoboxing.
  • Apply best practices for using these features in real-world scenarios.

Leverage Java Post-9 Enhancements:

  • Understand and utilize the features introduced after Java 9.
  • Integrate these new features into current development practices for improved performance.

 

Each chapter in the course consists of standalone essays providing specific advice and outstanding code examples. The comprehensive descriptions and explanations for each item illuminate what to do, what not to do, and why.

Join us in the "Effective Java" course to master the intricacies of Java programming and elevate your development skills. Whether you're an experienced developer aiming to refine your coding practices or a newcomer eager to learn advanced Java techniques, this course offers valuable insights and practical guidance to enhance your proficiency in Java.

After completing the course, a certificate is issued on the Luxoft Training form

Objectives

Improve Java development skills by discussion and analysis of practical cases.


Target Audience

Junior and intermediate Java developers


Roadmap

1 [Theory – 1h: Practice – 2h] Creating and Destroying Objects

Item 1: Consider static factory methods instead of constructors

Item 2: Consider a builder when faced with many constructor parameters

Item 3: Enforce the singleton property with a private constructor or an enum type

Item 4: Enforce non-instantiability with a private constructor

Item 5: Avoid creating unnecessary objects

Item 6: Eliminate obsolete object references

Item 7: Prefer dependency injection to hardwiring

2 [Theory – 1h: Practice – 1.5h] Methods Common to All Objects

Item 8: Obey the general contract when overriding equals

Item 9: Always override hashCode when you override equals

Item 10: Always override toString

Item 11: Override a clone judiciously

Item 12: Consider implementing Comparable

3 [Theory – 1.5h: Practice – 2.5h] Classes and Interfaces

Item 13: Minimize the accessibility of classes and members

Item 14: In public classes, use accessor methods, not public fields

Item 15: Minimize mutability

Item 16: Favor composition over inheritance

Item 17: Design and document for inheritance or else prohibit it

Item 18: Prefer interfaces to abstract classes

Item 19: Use interfaces only to define types

Item 20: Prefer class hierarchies to tagged classes

Item 21: Use function objects to represent strategies

Item 22: Replace Anonymous Classes with Lambda Expressions

Item 23: Consider using method references

Item 24: Favor static member classes over nonstatic

4 [Theory – 1h: Practice – 2h] Generics

Item 25: Don’t use raw types in new code

Item 26: Eliminate unchecked warnings

Item 27: Prefer lists to arrays

Item 28: Favor generic types

Item 29: Favor generic methods

Item 30: Use bounded wildcards to increase API flexibility

Item 31: Consider typesafe heterogeneous containers

Item 32: Use the diamond operator for type inference

5 [Theory – 1h: Practice – 1.5h] Enums and Annotations

Item 33: Use enums instead of int constants

Item 34: Use instance fields instead of ordinals

Item 35: Use EnumSet instead of bit fields

Item 36: Use EnumMap instead of ordinal indexing

Item 37: Emulate extensible enums with interfaces

Item 38: Prefer annotations to naming patterns

Item 39: Consistently use the Override annotation

Item 40: Use marker interfaces to define types

6 [Theory – 1h: Practice – 0.5h] Methods

Item 41: Check parameters for validity

Item 42: Make defensive copies when needed

Item 43: Design method signatures carefully

Item 44: Use overloading judiciously

Item 45: Use varargs judiciously

Item 46: Return empty arrays or collections, not nulls

7 [Theory – 2h: Practice – 1.5h] General Programming

Item 47: Minimize the scope of local variables

Item 48: Prefer for-each loops to traditional for loops

Item 49: Know and use the libraries

Item 50: Avoid float and double if exact answers are required

Item 51: Prefer primitive types to boxed primitives

Item 52: Avoid strings where other types are more appropriate

Item 53: Beware the performance of string concatenation

Item 54: Refer to objects by their interfaces

Item 55: Prefer interfaces to reflection

Item 56: Adhere to generally accepted naming conventions

Item 57: Use underscores in Numeric Literals

Item 58: Use switch on Strings

Item 59: Use streams for map/filter/reduce operations

8 [Theory – 1.5h: Practice – 1.5h] Exceptions

Item 60: Use exceptions only for exceptional conditions

Item 61: Use checked exceptions for recoverable conditions and runtime exceptions for programming errors

Item 62: Decide about try-catch/throws use for checked exceptions

Item 63: Favor the use of standard exceptions

Item 64: Throw exceptions appropriate to the abstraction

Item 65: Include failure-capture information in detail messages

Item 66: Strive for failure atomicity

Item 67: Don’t ignore exceptions

Item 68: Use multiple exception types catching

Item 69: Use try with resources

9 [Theory – 1h: Practice – 1h] Concurrency

Item 70: Synchronize access to shared mutable data

Item 71: Avoid excessive synchronization

Item 72: Prefer executors and tasks to threads

Item 73: Prefer concurrency utilities to wait and notify

Item 74: Document thread safety

10 [Theory – 1h: Practice – 0.5h]Serialization

Item 75: Write readObject methods defensively

Item 76: Implement Serializable judiciously

11 [Theory – 1h: Practice – 1h] Lambdas and Streams

Item 77: Prefer lambdas to anonymous classes

Item 78: Prefer method references to lambdas

Item 79: Favor the use of standard functional interfaces

Item 80: Use streams judiciously

Item 81: Prefer side-effect-free functions in streams

Item 82: Prefer Collection to Stream as return type

Item 83: Use caution when making streams parallel

12 [Theory – 0.5h: Practice – 1h] From Java 9 and beyond

Item 84: Consider using the var keyword

Item 85: Use records to create immutable classes

Item 86: Use switch expressions

Item 87: Use text blocks

Item 88: Use pattern matching for instanceof

Item 89: Consider sealed classes

Item 90: Use Stream.toList()



Related courses

You may also be interested in

Discover more about professional growth and skills development

contact us