Java is one of the most popular programming languages used to implement enterprise and mobile applications. Java Standard Edition covers the core language features. Developers should first be conversant with the core language features to work with higher level application environments like Java Enterprise Edition or Mobile Edition.
This training covers Java Standard Edition version 1.6, object oriented programming in Java, Eclipse IDE as a development platform, regression testing with JUnit, details of garbage collection and some amount of Java Virtual Machine (JVM) performance tuning. It is also packed with development best practices.
While a reasonable introduction is given for the novice, the training focuses more on topics that bring higher values to real world Java software developers. And hence, this training should not be considered a fundamental training and does not cover the very basics of Java programming language. But, the content is developed in such a way so that even the participants with no prior experience in Java will not find any difficulties in following the training.
At the end of the training, participants will be able to
- Use Java Standard Edition (version 1.6) in enterprise class application development with best practices and describe the rational behind them.
- Use Eclipse IDE with ease and compassion for development, testing, debugging and refactoring.
- Use JUnit regression testing framework to develop automated unit tests and hence improve the quality of development.
- Describe the behaviour of different garbage collection algorithms and select the best for given conditions.
- Improve the performance of Java applications by fine tuning the JVM.
- Those who prefer to learn Java programming language (for example students).
- Graduates (or undergraduates) in related fields seeking pragmatic development experience in Java Standard Edition.
- Software Developers in other fields (like PHP or Microsoft .NET) willing to learn Java Standard Edition.
- Java developers who seek the knowledge of pragmatic and advanced topics in Java (as given below in the Training Content section).
- You should be able to use computers. You need not possess programming skills.
English (With Sinhala explanations if requested)
4 Days (32 hours)
Kamal Wickramanayake (Profile)
- The training offers hands-on lab experience packed with expert knowledge.
- Delivery of the training will be learner centric. Multiple delivery techniques will be used - not just lectures.
Getting Started With Object Oriented Programming (OOP)
- History of programming language paradigms
- Purpose of OOP fundamentals
- Meaning of abstraction, encapsulation, inheritance, polymorphism
Getting Started With Java
- History of Java
- The Java platform
- Java evolution into various areas
- Java Community Process (JCP)
- Future of Java
- Writing the first Java program
Eclipse Integrated Development Environment (IDE) - I
- Background of Eclipse Platform
- Eclipse capabilities beyond an IDE
- Concepts (Workbench, workspace, perspectives, editors, views)
- Organization of a Java project
- Compiling a project
- Running a project
Object Oriented Programming In Action (With Java)
- Implementing Encapsulation
- Implementing Abstraction
- Implementing Inheritance (Class, Interface)
- Implementing Polymorphism
Error Handling with Exceptions
- Overview (What & Why)
- Catching/Handling Exceptions (try-catch-finally blocks)
- Throwing Exceptions
- Creating Own Exception Classes
- Runtime Exceptions, checked exceptions, errors
- Commonly encountered exceptions (ArrayIndexOutOfBoundsException, ClassCastException...)
- What are assertions?
- How to use assertions?
- Proper and inappropriate use of assertions
- What are enumerations?
- Using enumerations
- Purpose of annotations
- Using existing annotations
- Defining new annotations
- Annotation processing
Garbage Collection/Memory Management
- Overview of Garbage Collector
- Different Garbage Collection Algorithms and Their Effect (Reference Counting, Mark and Sweep, Heap Compaction, Generational Garbage Collection, Train Collectors)
- finalize() Method of java.lang.Object class
- Forcing Finalization with System.gc()
Fine Tuning JVM
- Analyzing Garbage Collector operations
- Selecting a suitable Garbage collector
- Application Launcher Standard/Non-Standard Options
- Controlling heap size
- Escape analysis
Eclipse IDE - II
- Refactoring features
- Debugging features
Programming Best Practices With A Focus On OOP
- Tight encapsulation, loose coupling, and high cohesion in classes
- Working with different forms of relationships between objects
- What is an interface?
- Design by contract
- Open-Close Principle
Test Infected Programming with JUnit
- Overview of Unit Testing
- Different Unit Testing Mechanisms and Role of JUnit
- Writing TestCases and TestSuites
- Testing for Exceptions
- Best Practices of Using JUnit
- Overview of JUnit Extensions
- Using JUnit inside Eclipse
- Overview of I/O Streams (Readers/Writers/Input Streams/Output Streams)
- Using File Streams
- Using Piped Streams
- Wrapping Streams
- Buffered Streams
- Filtered Streams
- Object serialization/de-serialization (ObjectInputStream, ObjectOutputStream, Serializable)
- Brief Introduction to nio Package
- Overview of Collections Framework
- Collection/Set/List/Map Interfaces
- Implementations available in Java SE API
- Limitations of the non-generic Collections API
- Comparable/Comparator interfaces
- hashCode() and equals() methods
- Difference between == operator and equals() method
- Using java.util package facilities to manipulate collections
- Overview (Application/Process/Thread/Multi-Threading/Multi-Processing/Multi-Processor)
- Thread Class
- Runnable Interface
- Thread Priority (Pre-Emptive and Time Slicing, Thread.yeild(), Thread.sleep())
- Different Thread Synchronization Mechanisms (Synchronization blocks, Poling, wait and notify)
- Thread Grouping
- Inter-Thread Communication (Shared data, Pipes)
Networking With Java
- Overview of networking with Java
- Using the Socket class
- Using the ServerSocket class
- Multi-threading considerations