| Java Training   Overview 
This is a fast-paced course suitable for developers with some previous experience in working with Java and Object-Oriented (OO) programming. The course can also be delivered to developers experienced in other OO languages (Python, C++, C#) but with limited Java exposure, as well as used as an advanced Java course for more experienced developers. There are numerous optional parts allowing you to tailor the coverage to your group.
 It includes an accelerated, yet thorough hands-on review of Java foundational concepts, with attention given to OO design and implementation principles. It then moves on to comprehensive coverage of more advanced topics in Java and OO development to provide participants with a strong grounding to use Java in a sophisticated and productive manner.
 
 This course covers far more than an introductory course, including important topics such as UML and Design Patterns, and using composition vs. inheritance, which are all key to creating well-structured OO systems. After these important areas, it moves on to advanced Java topics such as inner classes, reflection, writing generic classes, and functional programming with lambdas and streams. It teaches a number of useful techniques that enhance productivity and good system design - which may otherwise take Java developers years to absorb on their own. The course concludes with build tools and logging.
 
 Unit testing is stressed throughout the course, with most labs implemented as JUnit tests.
 
 Although the course is designed to be delivered in its entirety, it can be customized to fit your needs. Be prepared to work hard and learn a great deal!
 
 All labs are done with the Eclipse IDE Java EE version, and the lab instructions include detailed directions for using it.
 
 Java Training   Skills Gained
 
   Hands-OnSolidify Java foundational knowledge, including the important contracts of class ObjectUnderstand the uses and consequences of inheritance and composition, and reinforce the role of interfacesReinforce fundamental OO principles such as cohesion, coupling, and polymorphismUse the JUnit testing framework and become fluent in writing assertions to verify correct program behaviorFamiliarity with UML modeling in class diagrams and sequence diagramsUse advanced techniques for object creation, including factories and singletonsUse established design patterns for object composition, including Strategy, Decorator, and FacadeWrite and use generic classes and methodsLearn the use cases for inner classes and refactor existing code to use them when appropriateCreate and use custom annotationsBe familiar with reflection and how to use itUnderstand the role of functional interfaces introduced in Java 8Understand lambda expressions and method references, and use them to pass behavior (methods)Use the Stream API to perform complex processing of collections and other input sourcesLearn the new Date/Time API and use it to solve date-oriented business problemsUse Javadoc to write professional-grade API comments for your classesUnderstand build tools such as Ant and Maven, and how to manage application dependenciesWrite appropriate log statements in your code and configure logging with Log4j 
Minimum 50% hands-on
 Supported Platforms
 
Eclipse, IBM RAD (on request), IntelliJ (on request)
 Java Training   Course Duration
 
 5 Days
 
 Java Training   Course outline
 Session 1: Review - Basics 
          Java EnvironmentClasses and Objects
            
              Instance Variables, Methods, Constructors, Static MembersOO Principles: Data Encapsulation, CohesionObject Contracts: toString(), equals() and hashCode(), Comparable and ComparatorPackages, Enums, ArraysExceptions Session 2: Review (Inheritance and Interfaces) 
          UML OverviewInheritance
         	
              Definition and IS-A RelationshipMethod Overriding, @OverrideOO Principles: Principle of Substitutability, Polymorphism and Encapsulation of Type, Coupling, Open-Closed PrincipleConstructor ChainingInterfaces
          
              Defining and Implementing, Interface TypesInterface InheritanceNew Interface Features in Java 8
         	
              Default Methods, Static MethodsFunctional InterfacesGuidelines Session 3: JUnit 
          OverviewTests, Assertions, and Fixtures
          
              Writing and Running TestsAssertionsTest Fixtures, @Before and @After, @BeforeClass and @AfterClassTesting for ExceptionsBest Practices and Test-Driven Development Overview (TDD) Session 4: Collections and Generics 
          Collections Overview
          
              Generics and Type-Safe CollectionsDiamond OperatorLists, Sets, and Maps
           
              Interfaces and ContractsIteration and AutoboxingUtility Classes - Collections and ArraysWriting Generic Classes
          
              Inheritance with Generic TypesWildcard Parameter TypesType Erasure Session 5: Techniques of Object Creation 
          Design Patterns OverviewControlling Object Creation
          
              Limitations of new Operator, Alternative TechniquesSingleton PatternSimple FactoryFactory Method PatternOther Techniques
          
              Named Objects, JNDIDependency Injection Frameworks Session 6: Using Composition and Inheritance Effectively 
          Inheritance and Composition - Pros and Cons
          
              Composition and DelegationHAS-A, USES RelationshipsStrategy PatternDecorator PatternFaçade and Other Patterns
          
              Façade, Proxy, Template Method Session 7: Inner Classes 
          Overview and Motivation
          
              Stronger Encapsulation, Rules and CaveatsDefining and Using Inner Classes
          
              Member-Level, Method-Local, Anonymous ClassesStatic Nested Classes
          
              Nested Classes, Nested Interfaces, Nested Enums Session 8: Annotations 
          OverviewUsing Annotations
          
              Target and Retention PolicyAnnotation Parameters, Parameter ShortcutsWriting Custom Annotations
          
              Syntax, Using the Meta-AnnotationsUsing a Custom Annotation Session 9: Reflection 
          Overview and API
          
              The Class Called ClassObtaining and Inspecting Class ObjectsWorking with Objects Reflectively
          
              Creating Instances, Invoking Methods, Setting Field Values Session 10: Lambda Expressions 
          Overview
          
              Functional Interfaces and LambdasTarget ContextUsing Lambda Expressions
          
              Syntax, Lambda CompatibilityVariable CaptureType InferenceMethod References
          
              Three Types of Method ReferencesRefactoring Lambdas into Method References Session 11: Streams 
          Overview
          
              Streams vs. CollectionsAnatomy of a StreamUnderstanding the Stream API
          
              Intermediate Operations and Stream PipelineJava 8 Functional Interfaces: Predicate, Comparator, Function, Consumer, SupplierStream Processing
          
              Filtering, Sorting, MappingTerminal OperationsCollectors
          
              Partitioning and GroupingReducing and SummarizingDownstream Reductions Session 12: Date/Time API 
          OverviewDates, Times, and Instants
          
              Creating, Parsing, and FormattingAccessing Date and Time FieldsDeriving New ValuesTime ZonesPeriods and Durations
          
              Intervals of Time: Date-Based and Time-BasedAdding and Subtracting Intervals Session 13 (optional): Overview of Build Tools 
          Javadoc
          
              Generating API DocumentationDoc Comments and Doc TagsAnt
          
              History and OverviewBuildfiles, Targets, and TasksMaven
          
              Maven Concepts: Project, POM, Artifact, Naming, Dependency, Plugin, RepositoryConvention over ConfigurationLifecycles and PhasesPlugins and Goals Session 14 (optional): Logging and Log4j 
          Overview
          
              Popular Logging FrameworksWriting Log Messages
          
              Creating Loggers and Writing Log MessagesLog LevelsConfiguration
           
              Appenders and LayoutsLogger Configuration and Logger Hierarchy 
 |