Paths
Java Language Fundamentals
Java is one of the most widely used programming languages in the world. Originally developed by Sun Microsystems in the 1990s, Java is used to develop everything from web... Read more
What you will learn
- Java language syntax and fundamentals
- Java collections
- Working with Streams in Java
- Collections
- Lambda expressions
- Object oriented programming
- Exception handling
- Java IO
- Java Database Connectivity (JDBC)
- Java's HttpClient
Pre-requisites
No previous experience is required, and all necessary tools and concepts will be introduced throughout the path.
Beginner
These introductory Java courses will teach you the basics of the Java language and how to effectively work with Java. Some of the concepts you will master in this section include control flow in Java, object orientation and collections. By the end of these courses you will have the skillset to start writing your own Java applications.
Modern Java: The Big Picture
1h 58m
Description
You’ve heard about Java and want to get started with it, but what is Java really about? In this course, Modern Java: The Big Picture, you'll gain an overview of what you can expect from Java as a development platform. First, you'll learn the answers to important questions like “What does Java code look like?" and "How is it run?” Next, you'll explore the JDK and learn when you should use Java and when you shouldn't. Finally, you’ll discover the most popular libraries, practices, and tools used in modern Java development. After finishing this course, you’ll have a broad outlook on modern Java development and you will know which Java skills to focus on next in your personal development.
Table of contents
- Course Overview
- Introducing the Java Platform
- Adopting Java
- From Desktop to Enterprise Java to the Cloud
- Popular Java Libraries
- Practices and Common Tools
- Examining Alternative JVM Languages
Setting up a Java Development Environment
50m
Description
To develop Java applications you need the right tools installed. In this course, Setting up a Java Development Environment, you will go through all the steps necessary to set up a fully functioning Java development environment. First, you will learn how to install and use the Java Development Kit, which is required to compile and run Java code. Next, you will see how an IDE like IntelliJ makes Java development more productive. Last, you will explore how to package Java applications into JAR files for wider distribution. After finishing this course, you will have a working Java development environment, so you can start your Java learning journey.
Table of contents
- Course Overview
- Installing and Running Java
- Using IntelliJ for Java Development
- Packaging Java Applications
Getting Started with Programming in Java
4h 42m
Description
Java is one of the most popular and widely-used programming languages in the world. It is supported by billions of devices. Whether you are interested in client-based, server-side, Android, or big data development, understanding how to program in Java is a critical part of being successful. In this course, Getting Started with Programming in Java, you will learn everything you need to know to get started developing applications using the Java programming language. First, you will learn how to create an application, structure statements, declare variables, use primitive types, and provide application control flow. Next, you will explore how to work with more sophisticated language elements such as arrays, methods, and parameters. Finally, you will discover how to accept command-line arguments, interact with the user, and work with rich data types such as strings and dates. When you are finished with this course, you will have the foundational knowledge of the Java programming language that will enable you to become a successful Java programmer.
Table of contents
- Course Overview
- Creating Your First Java App
- Variables, Data Types, and Math Operators
- Conditional Logic and Block Statements
- Looping and Arrays
- Understanding Methods
- Working with Strings
- String Formatting
- More About Data Types
Working with Classes and Interfaces in Java
4h 45m
Description
Java is one of the most popular and widely-used programming languages in the world. It is supported by billions of devices. Whether you are interested in client-based, server-side, Android, or big data development, understanding how to program in Java is a critical part of being successful. Java is a multiparadigm language with rich object-oriented features. In this course, Working with Classes and Interfaces in Java, you will learn to how to work effectively with the core of the Java type system: classes and interfaces. First, you will learn how to implement a class including class constructors, fields, getters/setters, and polymorphic methods. Next, you will explore class inheritance, method overloading, and abstract classes. Finally, you will discover how to work with Enums, interfaces, nested types, and anonymous classes. When you are finished with this course, you will have the foundational knowledge of working with classes and interfaces that will enable you to become a successful Java programmer.
Table of contents
- Course Overview
- Understanding Java Classes and Objects
- Implementing Class Constructors and Initializers
- Using Static Members
- A Closer Look at Methods
- Class Inheritance
- More About Inheritance
- Working with Enums
- Creating Abstract Relationships with Interfaces
- Nested Types and Anonymous Classes
Java Fundamentals: Collections
2h 39m
Description
Working with data is fundamental to any business problem. In this course, Java Fundamentals: Collections, you will learn about Java Collections - data structures designed to store and process data in memory. First, you will discover why you would want to use collections instead of arrays. Then, you will cover the capabilities of lists, sets, maps, and also the different data structure tradeoffs. Finally, you will explore important collection algorithms and how different collection implementations work. By the end of this course, you will know how to use Java Collections to process data.
Table of contents
- Course Overview
- What Are Collections and Why Use Them?
- Collections with Iteration Order: Lists
- Collections of Pairs: Maps
- Java Streams
- Collection Operations and Factories
- Collection with Uniqueness: Sets
Java: Using Maps
28m
Description
Learn how to organize keys and values with a Map, and then practice what you've learned.
Table of contents
- Using Maps3 Videos - 4 Challenges
Java: Using Sets
32m
Description
Learn how to organize unique data into a collection with a Set, and then practice what you've learned.
Table of contents
- Using Sets3 Videos - 4 Challenges
Java: Using Lists
32m
Description
Learn how to organize data into an ordered collection with a List, and then practice what you've learned.
Table of contents
- Using Lists3 Videos - 5 Challenges
Java: Using Lambda Expressions
20m
Description
In this course, you will learn how to pass code as an argument with lambda expressions, while at the same time making your code more readable and concise.
Table of contents
- Using Lambda Expressions2 Videos - 4 Challenges
Intermediate
Java is a feature rich language and the courses in this section are designed to help you explore all you can do with Java. This includes working with generics, using lambda expressions and how to take advantage of Java streams.
Java Fundamentals: The Core Platform
7h 24m
Description
Java is the most in-demand programming language skill amongst software developers, and one of the most important skills for big data specialists. This course, Java Fundamentals: The Core Platform, provides thorough coverage of the core Java platform, giving you the foundation you need to begin developing Java applications using the features and capabilities of the Java Runtime Environment (JRE), as well as providing you with the skills you need to quickly ramp-up and begin developing effectively with Java using the JRE. First, you'll learn about working with streams, files, and the file system. You'll also learn about I/O topics specific to working with files such open/closing files, detecting end-of-file, and buffering. Next, you'll learn about configuring application execution and environments, the features available, and detailed discussions of the PATH and CLASSPATH environment variables that affect the Java runtime. Finally, you'll learn about multithreading and concurrency, taking a look at the basic ideas of the thread startup lifecycle along with the more sophisticated executor service. After watching this course, you'll be ready to begin working within any of the many environments that rely on Java.
Table of contents
- Course Overview
- Introduction
- Input and Output with Streams and Files
- String Formatting and Regular Expressions
- Working with Collections
- Controlling App Execution and Environment
- Capturing Application Activity with the Java Log System
- Multithreading and Concurrency
- Runtime Type Information and Reflection
- Adding Type Metadata with Annotations
- Persisting Objects with Serialization
Java Fundamentals: The Java Reflection API Method Handles
3h 9m
Description
As a Java developer, mastering the reflection API allows you to build powerful frameworks that will bring advanced functionalities to your application. In this course, Java Fundamentals: The Java Reflection API Method Handles, you will learn how you can use reflection API efficiently. This API is very technical, so this course is organized around the study of two real-life use cases: the building of an Object Relational Mapper, on the model of Hibernate, and the creation of a dependency injection framework, on the model of Spring. First, you will understand how to introspect classes and objects and how to discover their structure. Next, you will learn how to build objects without knowing their class at compile time, to set values to their fields and to invoke their methods. Finally, you will understand the performance issues of this API, and be able to use method handles and var handles to fix these issues. By the end of this course, you will be able to master the reflection API that will help you in creating performant and versatile Java applications.
Table of contents
- Course Overview
- Introducing Java Reflection
- Creating an Object Metamodel Using Annotations and Reflection
- Creating an Object Relational Mapper Using an Object Metamodel
- Injecting Dependencies in an Object Using an Object Metamodel
- Improving Performance Using Method Handles
Java Fundamentals: Asynchronous Programming Using CompletionStage
3h 3m
Description
As a Java developer, being able to create asynchronous systems allows you to develop very efficient applications, that need both throughput and performance. In this course, Java Fundamentals: Asynchronous Programming Using CompletionStage, you will learn all the patterns brought to you by this API. First, you will learn the concepts of asynchronous programming: tasks, non-blocking calls and multi-threaded systems. Then, you will see how to build data processing pipelines where the completion of a first task automatically triggers the execution of a next task, passing data to it. Finally, you will see how to create performant systems by controlling the execution of each task in the right thread. Mastering all of this will help you in creating performant and error-free asynchronous systems with the only dependency being the JDK itself.
Table of contents
- Course Overview
- Introducing Asynchronous vs. Concurrent Tasks
- Setting up an Asynchronous Operations with CompletionStage
- Triggering a Task on the Completion of Other Tasks
- Dealing with Exception in the CompletionStage Pipeline
- Creating Performant Asynchronous Pipelines with CompletionStage
Java Fundamentals: Generics
4h 7m
Description
Java’s powerful generics has been available to developers for ten years now and is extensively used throughout both core and third party libraries. Unfortunately, it's not as well understood as it could be. This course is here to help. We’ll both shine a light on the common use cases of generics on classes, methods, or interfaces and also peer into some of the darker corners such as type bounds and wildcards.
Table of contents
- The What and Why of Java Generics
- Java's Generic Collections and Friends
- Generic Classes and Interfaces
- Generics on Methods
- Wildcards
- Raw Types and Compatibility
- Reflection
- Advanced Topics
Working with Nulls in Java
1h 12m
Description
How many times have you thought "this object can never be null" only to be proven wrong? In this course, Working with Nulls in Java, you'll learn best practices for effectively handling nulls and avoid NullPointerExceptions. First, you'll see what nulls mean and some common ways to deal with them. Next, you'll explore how to use annotations to check for nulls. Finally, you'll discover how to use the Null Object pattern and the Optional type to reduce unexpected exceptions even further. When you're finished with this course, you'll understand the different techniques to handle nulls effectively in Java programs.
Table of contents
- Course Overview
- Working with Reference Types and Nulls
- Checking for Null Using Annotations
- Using the Null Object Pattern
- Using Optional Instead of Null
Programming with Dates and Times in Java 8
2h 12m
Description
Handling dates and times is an essential part of most business and scientific applications. In this course, Programming with Dates and Times in Java 8, you will learn all about the much-needed new library in Java 8: the java.time API. First, you will learn the basic use of the core java.time classes. Next, you will discover how the library handles the complexities of time zones and daylight saving time transitions. Finally, you will explore the interconversion of java.time classes with other Java types and with database representations. When you are finished with this course, you will have a thorough knowledge of how to use this modern Java library for the fundamentally important problems of handling dates and times in your applications.
Table of contents
- Course Overview
- Overview of java.time
- The Basics of java.time
- Working with Time Zones
- Formatting and Parsing
Making Your Java Code More Object-oriented
2h 12m
Description
Procedural code can be replaced with objects to increase correctness, flexibility, and maintainability. In this course, Making Your Java Code More Object-oriented, you’ll learn how to design truly object-oriented classes in the Java programming language. First, you’ll learn how to represent a discrete object state and behavior to avoid imperative branching constructs. Next, you’ll discover that null references are a needless pain. Finally, you'll explore alternatives to null - substitute objects and optional objects. When you're finished with this course, you’ll have the skills and knowledge of designing classes that avoid traditional imperative constructs, with features resulting from orchestrating well-encapsulated objects rich in behavior.
Table of contents
- Course Overview
- Attaining Extensibility with Object-oriented Code
- Rendering Branching over Boolean Flags Obsolete
- Using Immutable Objects and Value Objects
- Leveraging Special Case Objects to Remove Null Checks
- Turning Optional Calls into Calls on Optional Objects
Mastering Object-oriented Programming in Java
3h 20m
Description
Procedural implementation is hurting flexibility and maintainability of code to such an extent that further development often becomes nearly impossible. In this course, Mastering Object-oriented Programming in Java, you’ll develop skills to help you design truly object-oriented code when modeling complex and convoluted business logic. First, you’ll learn the power of streams as a replacement for explicit loops and branching, and how they can be turned more readable and easier to manage. Next, you’ll discover the realm of fluent interface designs, that will help construct composable domain-related code. Finally, you'll explore alternatives to hard-coded decisions with the Rules design pattern. By the end of this course, you will gain insight on how rules can become composable and flexible, taming even the scariest pieces of domain logic.
Table of contents
- Course Overview
- Turning Everything into Objects
- Staying Focused on Domain Logic with Streams
- Untangling Operations from Structure on Business Data
- Advancing to a Domain - Specific Language
- Increasing Flexibility by Removing Enums and Switch Statements
- Turning Chained Branching into the Chain of Rule Objects
- Refactoring to Bind It All Together
Advanced
Every program needs to access and write information. Two of the most common ways to do that today are by using relational databases and calling APIs. The courses in this section are designed to help you understand how to do this from your Java programs.
Java Fundamentals: HttpClient
1h 44m
Description
It used to be that performing HTTP calls in Java meant relying on an external library like Apache HttpClient. Since Java 11, a modern HTTP client is now part of the core platform. In this course, Java Fundamentals: HttpClient, you will gain the ability to work with this HttpClient API. First, you will learn to use HttpClient in a synchronous and asynchronous manner, including the use of CompletableFuture. Next, you will discover how to configure and use HttpClient in different scenarios, focusing on secure communication as well. Finally, you will explore some of the more advanced features of HttpClient, such as HTTP/2 Server Push, WebSocket communication, and Reactive Streams integration. When you're finished with this course, you will have the skills and knowledge of the HttpClient API needed to use it effectively in your own applications.
Table of contents
- Course Overview
- Introducing HttpClient
- Performing Your First HTTP Requests
- Using HttpClient
- Security
- Exploring Advanced HttpClient Features
Java Core Libraries: JDBC
1h 46m
Description
Being able to read and write data to a relational database is an absolute, must-have skill when working with Java applications. In this course, Java Core Libraries: JDBC, you will gain the ability to access and modify data in relational databases using the JDBC API. First, you will learn how to connect the JDBC API to a database. Next, you will discover how to read and update data in a database using the JDBC API. Finally, you will explore advanced techniques for working with large chunks of data, calling stored procedures, using instance pooling, transactions, and the JDBC RowSet. When you’re finished with this course, you will have the skills and knowledge needed to utilize the JDBC API in your work with complete confidence.
Table of contents
- Course Overview
- Overview and Setup
- Connecting JDBC to the Relational Database
- Using JDBC to Query Databases
- Using JDBC to Update Databases
- Using Blobs, Clobs and CallableStatements
- Using Connection Pooling, Transactions, and RowSets
Working with Files in Java Using the Java NIO API
53m
Description
The Java I/O API is a fundamental API of the JDK, at the core of database access APIs and web access APIs. In this course, Working with Files in Java Using the Java NIO API, you will learn how to handle files using the Files factory class, and how to deal with text files in Java. First, you will see how to manipulate files on the file system: how to create, copy, move, and delete them. Then, you will discover how to find files in a set of directories with two different approaches: visitor pattern, and the map / filter / reduce pattern, as implemented by the Stream API. Next, you will explore how to create and analyze text files. Finally, you will be shown how to deal with CharSets to handle exotic formats, as well as a real-world case study: the analysis of a CSV file. After watching this course, you will be ready to deal with file handling problems and you will be able to conduct advanced tasks to handle complex text files, which is essential for web and REST services.
Table of contents
- Course Overview
- Accessing Files and Directories Using Java NIO Path
- Reading and Writing Text Files Using the Java NIO API
- Analyzing CSV Text Files Using the Stream API
- Manipulating Files on a File System Using the Java NIO API
Securing Java Web Application Data
2h 40m
Description
Nearly every website holds onto or transmits user data, and that user data is a gold mine for hackers. We hear about penetrations into big companies with large troves of personal data almost daily. In this course, Securing Java Web Application Data, you will gain the ability to secure web application data using JCA, JSSE, and common open source Java libraries like Spring Vault Client and Google Tink. First, you will learn how to safely hash data. Next, you will discover secure serialization and deserialization. Finally, you will explore how to sign, verify, encrypt, and decrypt data. When you’re finished with this course, you will have the skills and knowledge of Web Application Security needed to secure its data.
Table of contents
- Course Overview
- Hashing Data
- Managing Keys and Certificates
- Serializing and Deserializing Data
- Signing and Verifying Data
- Encrypting and Decrypting Data
- Transmitting Data over the Network