
Learn the origins and basics of Java, including its object-oriented and platform-independent nature, set up the development environment, and compile to bytecode, run on the JVM with jar packaging.
Install and set up the Eclipse IDE for Java, create a Java project, write a hello world class, and debug with breakpoints and views.
Set up a Java development environment with Eclipse, create a hello world project, and implement a public static void main(String[] args) entry point to run a console application using System.out.println.
Learn how to declare Java variables, choose data types like int, double, boolean, and use final constants to avoid magic numbers in bank balance and unit conversions.
Explore Java operators, expressions, and statements, including arithmetic, relational, bitwise, shift, and logical operations, with hands-on examples of postfix and prefix increments and assignment.
Explore Java's operator precedence and evaluation order from postfix and unary to multiplicative and additive operators; learn how parentheses override precedence and how double equals differs from assignment.
Explore type casting in Java, learning how converting between 16-bit and 32-bit values can truncate data, alter signs, and require explicit casting to preserve values.
Explore break and continue statements in Java to control for loop execution, exit the loop when conditions are met, and sum the first three even numbers while printing odd numbers.
Master java-based compound interest calculation using principal, rate of interest, and years. Build and test a simple interest calculator with a main method and clear comments.
Explore how arrays in Java provide a fixed-size, efficient way to store multiple primitive values or objects with index-based access and type safety, illustrated by numbers and strings.
Discover how to initialize arrays in Java with literals and new, using numbers, colors, and item names, and understand implicit sizing and null elements.
Access array elements by index and by iterating with for loops, using the length property and enhanced for loop; handle out-of-bounds access and observe index out of bounds exception.
Explore array operations in Java using the Arrays utility class to sort, search, copy, test equality, and fill arrays with practical examples in Eclipse.
Explore object oriented programming in Java, covering data abstraction, inheritance, and polymorphism, and model software with objects, classes, and message based communication.
Identify objects in a software system by extracting nouns and verbs, define their attributes, behavior, and relationships, classify into classes, and model lifespans and memory.
Learn how object oriented modeling treats software objects as living objects with identity, attributes, behavior, and relationships that mirror real world interactions.
Explore encapsulation and abstraction in object oriented programming, showing how to hide internal details and expose minimal interfaces. Balance cohesion and coupling with real-world examples like cars and shopping carts.
Explore inheritance in Java and object oriented programming through a practical vehicle example, using motorized vehicles, car, motorcycle, and bicycle, with extends and superclass concepts.
Understand polymorphism in Java by distinguishing static polymorphism through method overloading from dynamic polymorphism via method overriding, with compile-time and runtime behavior illustrated.
Learn how objects and encapsulation drive Java design by building a car class with private fields for manufacturer, model, color and public getters and setters, and explore inheritance and polymorphism.
Explore how constructors in Java instantiate objects, initialize fields, and how default and multiple constructors work, including chaining with this and super.
Learn how methods define behavior in objects, including structure, parameters, and return types, and understand passing objects by value (references) in Java using bank account and interest calculator examples.
Explore scope modifiers in Java, including private, public, protected, and default (package-private), and see how access changes across packages and subclasses; getters and setters enable access for private fields.
Learn how static properties and methods belong to a class, not an instance, and how final and static final constants define fixed values, like colors red and blue.
Learn how the this keyword denotes the current object inside a constructor or instance method, demonstrated with a car class and two instances showing color and manufacturer.
Learn how abstract classes in Java enforce that all subclasses implement abstract methods. See examples with vehicle, car, and motorcycle to prevent instantiation of abstract classes.
Understand how Java interfaces define behavior contracts for vehicles—move, gear changes, fueling, and electric or fuel operation—while enabling multiple inheritance and focused interactions.
Learn how Java packages group classes into logical hierarchies, map to folder structures, and use dot notation to organize code, with real-world Eclipse examples and API documentation references.
Explore how the java.lang.Object class serves as the base for all Java classes and the implicit superclass. See how user-defined classes inherit its methods, while private fields affect access.
Explore boxing and unboxing of primitive types into wrapper classes in Java, including automatic conversions, parse methods, and handling NumberFormatException. Learn the difference between equals and == for wrappers.
Learn to read console input in Java using the Scanner class, tokenize input, and parse strings and numbers from the user. Use hasNext and nextLine to control input.
Learn how to concatenate strings in Java by using the plus operator or the string builder and string buffer for more efficient, mutable concatenation; understand string immutability and memory implications.
Master string manipulation in java by learning immutable string behavior and using methods like length, charAt, indexOf, substring, replace, equals, equalsIgnoreCase, compareTo, split, getBytes, valueOf, toLowerCase, toUpperCase, and trim.
Learn how to implement the Java equals method to correctly compare non-null objects, ensuring reflexive, symmetric, transitive, and consistent behavior with a device example using model and manufacturer.
Learn how to handle errors in Java by using try and catch, understand checked versus unchecked exceptions, stack traces, and how to create custom exceptions.
Learn to handle dates in Java using date and calendar APIs, including the Gregorian calendar and SimpleDateFormat. Explore creating calendars with getInstance, setting fields, and rolling or adding units.
Parse and format dates in Java with the SimpleDateFormat class, converting user input to dates and presenting outputs in local formats, using pattern letters and handling errors.
Explore the Java collections framework and learn how lists, sets, maps, and queues manage dynamic data. Compare arrays with these collections to support additions and deletions and understand practical examples.
Explore the Java list interface, its implementations like ArrayList and LinkedList, and learn to add, remove, get, and search elements, with generics for type safety and practical examples.
Explore how Java maps use hashing to organize data into buckets, with keys and values stored in a hash map; learn put, get, remove, keyset, and values in map interface.
Understand how java's hashCode method determines bucket placement in hash maps. See why equal objects must return the same hash code and learn how to implement a correct hashCode.
Explore how the comparable and comparator interfaces drive sorting of collections in Java, implementing compareTo and compare to order objects by criteria such as id or name.
The lecture introduces the Java IO File class for file and directory operations, not reading or writing data, and demonstrates methods like exists, delete, isDirectory, and getAbsolutePath.
Explore how Java input and output streams handle binary data, read and write with file, buffered, and data streams, and see practical examples of reading, writing, and streaming.
Explore reading and writing character files in Java using file reader and file writer, highlighting character-by-character and buffered reads, end-of-file handling, and append versus write.
Explore the high level concepts of multi-threading, not Java-specific, and differentiate threads from processes while explaining how lightweight threads optimize CPU utilization during I/O and long-latency operations.
Explore how Java enables multi-threading using the Thread class and the Runnable interface, showing how to start threads, use join to wait for completion, and compare implementation patterns.
Explore thread synchronization in Java, learning how synchronized methods and blocks prevent data corruption when multiple threads increment a shared counter.
This zip archive contains Eclipse projects that contain some of the source code that I used in the sessions. As you would appreciate, during the live sessions, I kept modifying some code to explain the concepts to you. So these Eclipse projects may not contain absolutely ALL the code that you would see during the lectures. But it does contain most of the code that existed after the end of each lecture.
PLEASE NOTE: This course is quite old now (Java 7). I do not have time to update it. However, many students have found it useful in the past to learn things the way I taught them, practically. So please go ahead if you want to learn only the very basics of Java but want to get deeper insights into the language.
All tutorials are practical sessions where complete insight is provided into each topic being covered. Practical examples of how the various concepts are used to create solutions to real-world problems are included in the course. I have tried to teach the language in such a manner that the learner would get very deep insight into the very core concepts of the language. At each step, I have used the debugging options to demonstrate what happens to various objects and variables, internally, as processing proceeds through a program.
Even though Java has evolved much further than the concepts covered here, the core ideas presented in this course would still help beginners understand the internals of the Java programming language well. It is only due to some good reviews and feedback from the past students that I have not deactivated the course yet.