
Install the JDK manually, verify with java -version, and set the path on Windows, macOS, or Linux. Compile with javac and run the class that contains main.
Start with the archived basics to learn variables, constants, and literals at a slower pace, then resume the fast track for fundamentals. Use Q&A and reviews to reinforce learning.
Explore branching statements in Java, including if and switch, with practical examples showing value comparisons, else paths, and the importance of break statements in switch cases.
Explore looping statements in Java: while, do..while, and for, explaining when conditions are checked and how loops repeat, with examples of increments and printing.
Define arrays as a homogeneous collection in Java, allocated by the new operator and accessed via arr[i]. Explore initialization options and traverse with arr.length, including direct values and for-each printing.
Implement an array search by declaring and initializing an int array, then use a static search method with a for loop to return the index or -1 if not found.
Design classes to create your own types by combining data and operations, using a Sample class and two objects with independent x values through set and get.
Explain data hiding and encapsulation using an Account class, showing private balance and public withdraw, deposit, and getBalance methods to protect data integrity.
Explore data hiding and encapsulation by building a stack class with push, pop, and peek. Model stacks as objects and prevent array access, preparing for exception handling in Java.
Explore how inheritance extends a base class to reuse functionality, letting a scientific calculator gain sin() while maintaining the is-a relationship with a basic calculator.
Explore how composition uses delegation to reuse calculator functionality within a scientific calculator. Compare inheritance and composition, and learn why has-a delegation can be preferred for reusing behavior in Java.
Understand how overriding lets a subclass modify and extend base class behavior, using super calls and the override annotation to preserve the signature and prevent mistakes.
Generalize code through inheritance by designing base classes like Animal and Object, enabling a single feed method to work across subclasses such as WildAnimal, DomesticAnimal, Lion, Tiger, Cow, and Dog.
Understand dynamic binding in Java: how base and derived classes resolve overridden methods like f() and g() based on the actual object, and how h() requires Derived with instanceof checks.
Demonstrate dynamic binding by using instanceof to safely cast a BasicCalc to ScientificCalc, enabling access to sin() while invoking add() and subtract().
Explore how the final modifier in java inheritance prevents method overriding and class extension, with examples of final methods and final classes.
Explore the template method design pattern by shaping a search algorithm with an abstract core and overridable match behavior, enabling equality and inequality searches while illustrating open-closed principles.
Explore how the Sample interface defines f() and g(), how Base and Derived implement and extend with h() and i(), and how Base and Sample references limit accessible methods.
Design loosely coupled video components using a VideoPlayer interface and a factory to select Mp4Player or MovPlayer behind the scenes, so clients depend on interfaces, not implementations.
Explore the single responsibility principle from SOLID, showing how separating account creation, database storage, and notifications into AccountRepository and NotificationService clarifies responsibilities and improves design.
Apply the open-closed principle by designing a sort utility that is open for extension via a comparator, yet closed for modification, enabling ascending or descending orders without changing code.
Learn how to organize Java classes into packages with a directory structure mirroring the package hierarchy, using com.bank and com.bank.service, and grasp private, default, protected, and public access.
Explore Java packages by building a demo with demo.service and AccountService, showing public versus default classes, imports, fully qualified names, and the difference between wildcard and explicit imports.
Master how the finally block guarantees resource release and how try with resources automates cleanup for files and database connections.
Design a stack with push, pop, and peek using an int array while exploring Java wrapper types, autoboxing, and unboxing through primitive to object conversions and exceptions.
Learn to copy a file by reading from a FileInputStream and writing to a FileOutputStream, byte by byte until end-of-file (-1), with basic exception handling.
Develop a generalized IOUtils.copy(InputStream, OutputStream) utility to copy data between streams, and use try-with-resources for automatic resource management while honoring the Liskov's Substitution Principle.
Master the buffered IO concept by using BufferedInputStream and BufferedOutputStream to wrap FileInputStream and FileOutputStream, learn how buffering and flush operations improve disk read/write performance and the decorator pattern.
I have a very specific goal in designing this course, being an Architect I do have an additional role of bringing up trainees or freshers upto the speed of the Java development, and in the process I need to device a training plan where they need to understand the most important aspects of Java programming language and understand different aspects of backend development.
This made me design this course to address the first part of it, i.e. the Java programming language, where you will be focused on the most important features of Java programming language and see where and when to apply the features effectively and efficiently.
You many be having questions like, is this course updated to latest editions of Java, such as Java15 etc etc. don’t worry guys you first need to understand the core language features, once you are able to apply the core features rest of the things will fall in place. Thats my experience, versions are fancy terms guys, not every thing is applicable to us, if I feel some thing really important coming in, then I will certainly try to update that in the course. But anyway I will try to keep you posted on the changes don’t worry.
As an architect I want the trainees to be able to understand the following aspected of Java programming language, you should be able to understand the core language features, think about SOLID principles while designing the code and gain good insights about few selected design patterns. Let me confirm once again guys I won’t be covering all design patterns, I picked few based on my experience and will cover them. All the very best to your Java developer journey, I am with you lets move forward.
Course Highlights -
Note - Refer to the Archived section for programming foundations.
Object Oriented Programming features
Classes, Objects
Constructors
Inheritance
Polymorphism
Abstract classes
Interfaces
Building Loosely coupled code
Exception handling
IOStreams
SOLID Principles
Few selected Design Patterns
Builder
Singleton
Factory Method
Template Method
Facade
Decorator
Proxy
Remote Proxy
Virtual Proxy
Protection Proxy
Other Java language features like
Collections
Generics
Lambda
Streams
Reflection API