Basic Java Programming
Basic Java Programming is a course in modern Java 25 for people who can already code, covering object-oriented design, records, pattern matching, collections, the Stream API, unit testing with JUnit, JDBC database access and virtual threads. It suits developers who work in PHP, JavaScript or Python and anyone preparing to move on to Spring Boot.
- Duration18 hours · 3 days
- FormatOnsite / live online
- Next roundOn request
- CertificateIncluded
Course overview
Java is still the main language behind many enterprise, banking and backend systems, but the language has changed a great deal in recent years. Many books and examples still teach Java 8 style, with long code and no records, pattern matching or virtual threads, so people who already know PHP, JavaScript, Python or C# often lose time on outdated code instead of using Java the way development teams use it today.
This course takes people who can already program through Java 25, the current LTS release. It starts with installing the JDK and an IDE, the syntax that differs from the languages they know, object-oriented programming, records, enums, sealed interfaces and pattern matching. It continues with generics, collections, lambdas and the Stream API, exception handling, files, dates and JSON, and organising a project with Maven with unit tests in JUnit 6. Learners then connect to a database with JDBC, write concurrent code with virtual threads and call REST APIs with HttpClient. The course closes with a capstone application that brings everything together. (3 days, 6 hours per day, 18 hours in total, Beginner level.)
What you’ll gain
- Install and use JDK 25 LTS, an IDE and Maven for Java projects
- Write Java with object-oriented principles: classes, inheritance, interfaces and polymorphism
- Use records, enums, sealed interfaces and pattern matching to write short, readable code
- Choose data structures from the Collections Framework and process them with the Stream API
- Handle exceptions and work correctly with files, dates and JSON
- Write unit tests with JUnit 6 and access databases safely with JDBC
- Write concurrent code with virtual threads and call REST APIs with HttpClient
Who this course is for
- Developers who already work in PHP, JavaScript, Python, C# or another language and want to start using Java
- People who learned an older version of Java and want to update to modern Java
- Students and IT staff preparing to move on to Spring Boot or Java backend work
- Development teams who maintain or integrate with systems written in Java
Prerequisites
- Able to program in at least one language, such as PHP, JavaScript, Python, C#, C or Visual Basic
- Understand variables, conditions, loops and functions, with some idea of object-oriented concepts
- Basic SQL such as SELECT and INSERT will help in the database sessions
- If you have never programmed before, the Java for Non-Programmers course is a better fit
- A laptop that can run a JDK, an IDE and Docker Desktop, with permission to install software
Curriculum
Course Details
This course is the 2026 edition that replaces the previous Basic Java Programming course. It has been rewritten for Java 25 LTS. It runs for 3 days, 6 hours per day (18 hours in total, 09:00-16:00), as lectures with a lab in every session. Beginner level, for people who can already program in another language. Swing, RMI and serialisation have been removed, and records, sealed interfaces, pattern matching, the Stream API, Maven, JUnit 6, JDBC, virtual threads and HttpClient have been added. People who have never programmed before should take Java for Non-Programmers, which builds programming thinking from scratch.
Day 1 Modern Java and Object-Oriented Programming
Section 1: Lab: Getting Started with Java 25 LTS and Its Tools
- How the JDK, the JVM and bytecode work together, and the Java LTS release cycle
- Install JDK 25 and set up IntelliJ IDEA or VS Code
- Try code in jshell and run a .java file directly without a separate compile step
- Compact source files and instance main methods for short programs
- Lab: a first program in the short form compared with a full class
Section 2: Java Syntax Compared with the Languages You Know
- Primitive and reference types, var and type conversion
- Strings, text blocks and formatting with formatted()
- if, loops and switch expressions that return a value
- Methods, overloading and pass by value
- Lab: port a short program from your usual language to Java
Section 3: Classes, Objects and Encapsulation
- Fields, methods, constructors and the this keyword
- static, final and access modifiers
- Packages and organising code in a project
- Flexible constructor bodies to validate values before calling super()
- Lab: a customer account class that validates its own data
Section 4: Inheritance, Interfaces and Polymorphism
- extends, overriding and super
- Abstract classes compared with interfaces and default methods
- Sealed classes and sealed interfaces to restrict subtypes
- Polymorphism and when to prefer composition over inheritance
- Lab: a shipping cost calculator with several strategies behind an interface
Section 5: Lab: Records, Enums and Pattern Matching
- Records for immutable data instead of classes with hand-written getters
- Enums with fields and methods
- Pattern matching with instanceof and switch
- Record patterns and unnamed variables (_)
- Lab: handle orders in several states with a sealed interface and switch
Day 2 Collections, the Stream API and Code Quality
Section 6: Generics and the Collections Framework
- Generics and why they reduce type errors
- List, Set and Map, and choosing ArrayList, HashSet, HashMap or TreeMap for the job
- Sequenced collections with getFirst(), getLast() and reversed()
- Unmodifiable collections with List.of() and Map.of()
- Lab: a shopping cart that uses several collection types
Section 7: Lab: Lambdas, the Stream API and Optional
- Functional interfaces, lambdas and method references
- Streams: filter, map, sorted and collect
- Group and summarise data with Collectors.groupingBy
- Optional for values that may be absent instead of returning null
- Lab: summarise sales by product category from a list of orders
Section 8: Exceptions, Logging and Debugging
- Checked and unchecked exceptions and when to use each
- try-with-resources and creating your own exceptions
- Read stack traces and use the IDE debugger
- Log with System.Logger instead of printing with println
- Lab: add error handling to the shopping cart
Section 9: Lab: Files, Dates and JSON
- Read and write files with Path and Files (NIO.2)
- Read a CSV file line by line and map it to records
- Dates and times with java.time: LocalDate, LocalDateTime and ZonedDateTime
- Convert objects to and from JSON with the Jackson library
- Lab: import product data from CSV and export it as JSON
Section 10: Lab: Maven and Unit Testing with JUnit 6
- Maven project layout, pom.xml and adding dependencies
- Common build commands: compile, test and package
- Write tests with JUnit 6 and readable assertions with AssertJ
- Parameterised tests to cover many cases at once
- Lab: write tests for the price and discount calculations
Day 3 Databases, Concurrency and Capstone
Section 11: Lab: Database Access with JDBC
- Run PostgreSQL with Docker and add the JDBC driver through Maven
- Connection, PreparedStatement and ResultSet
- Prevent SQL injection with parameters instead of string concatenation
- Transactions and moving database code into a repository
- Lab: save and search product data in the database
Section 12: Concurrency with Threads and Virtual Threads
- Threads, Runnable and race conditions
- ExecutorService and CompletableFuture
- Virtual threads for large numbers of I/O-bound tasks
- Protect shared data with locks and ConcurrentHashMap
- Lab: process several files concurrently and combine the results
Section 13: Lab: Calling REST APIs with HttpClient
- HttpClient, HttpRequest and HttpResponse in the standard library
- Synchronous and asynchronous API calls
- Map JSON responses to records with Jackson
- Handle timeouts, status codes and errors from external APIs
- Lab: fetch exchange rates or other public data into the program
Section 14: Packaging the App and Next Steps
- Build a runnable JAR file with Maven
- Configure the app through environment variables and properties files
- An overview of running Java applications in Docker
- Next steps towards Spring Boot, Jakarta EE and backend work
Section 15: Workshop: Inventory Management Capstone
- Design the records, interfaces and repositories of the system
- Import data from CSV and store it in PostgreSQL with JDBC
- Produce summary reports with the Stream API and export them as JSON
- Write unit tests for the key parts and package the app as a JAR
- Present the work, review the code together and plan next steps
Schedule & training options
For individuals — public rounds
No public rounds are open right now. Join the waiting list and we will contact you first when the next round opens, or ask us on LINE. Or call 02-570-8449 or 088-807-9770
For organisations — in-house / private
- Tailor the content to your team’s tools and projects
- Your dates, at your office or live online
- Quotation with tax ID for procurement
Instructors
Frequently asked questions
What is the difference between List, Set and Map in Java?
A List keeps items in order and allows duplicates, accessed by position, such as ArrayList. A Set keeps only unique values and is useful for removing duplicates, such as HashSet. A Map stores key and value pairs with unique keys and suits lookups by ID, such as HashMap. Modern Java adds sequenced collections, so ordered collections support getFirst() and reversed(), and List.of() or Map.of() create unmodifiable collections.
How do I write and run my first Java program?
Install JDK 25 and check it with java -version. Then write Hello.java. In Java 25 you can use compact source files, so a file with just void main() that calls IO.println("Hello") works without declaring a class, and java Hello.java runs it directly without a separate compile step. As programs grow you move to full classes, packages and a Maven build, which the course covers.
What are virtual threads in Java, and how do they differ from classic threads?
Classic threads map to operating system threads and use a lot of memory, so you can only create a limited number. Virtual threads, standard since Java 21, are lightweight threads managed by the JVM, so you can create very many of them. They suit I/O-bound work such as calling APIs or databases while keeping ordinary step-by-step code. When threads share data you still need locks or thread-safe collections to keep it consistent.
Who is the Basic Java Programming course for, and what should I know beforehand?
It suits developers who already use PHP, JavaScript, Python, C# or another language and want to start with Java, people updating from older Java, and anyone preparing for Spring Boot. You should be able to program in at least one language and understand variables, conditions, loops and functions. If you have never programmed, Java for Non-Programmers is a better starting point.
What will I be able to do after the Basic Java Programming course?
You will be able to write Java 25 with object-oriented design, records, sealed interfaces and pattern matching, choose collections and process data with the Stream API, handle exceptions, work with files, dates and JSON, organise projects with Maven, write unit tests with JUnit 6, access databases safely with JDBC, use virtual threads and call REST APIs with HttpClient. Participants who complete the training receive a Certificate of Completion with its own number, which can be verified online.
Can the Basic Java Programming course be run in-house for our team?
Yes. It can be run in-house for your team, with examples adapted to your work, such as exercises based on your organisation's data or systems, or a focus on moving from the older Java version your team uses. You can request a quotation from this page, or contact us on LINE @itgenius or by phone on 02-570-8449.
Related articles
Articles are published in Thai.

