[Yandex Cloud documentation](../../../index.md) > [Yandex Cloud Functions](../../index.md) > Developing in Java > Overview

# Developing in Java. Overview

With Cloud Functions, you can run applications written in [Java](https://docs.oracle.com/en/java/javase/11/docs/api/index.html).

This service provides several [runtimes](../../concepts/runtime/index.md) with different versions. We do not recommend using runtime versions that are no longer supported.

#|
|| **Name** | **Java version** | **Operating system** | **Preloaded** | **Supported by Cloud Functions** ||
|| java11 | 11 | Ubuntu 18.04 | No | No ||
|| java17 | 17 | Ubuntu 18.04 | No | No ||
|| java21 | 21 | Ubuntu 22.04 LTS | No | Yes ||
|#

You can add an [SDK library](https://github.com/yandex-cloud/java-sdk) to the runtime to work with the Yandex Cloud API. For more info on how to use the SDK, see [Using the SDK](sdk.md).

When creating a function version, the [builder](../../concepts/builder.md) will automatically install all declared dependencies required for the function. To learn more about requirements for declaring dependencies, see [Building and managing Java function dependencies](dependencies.md).

The runtime automatically loads your code and invokes the [request handler](handler.md) you specified. It receives the incoming request and the [invocation context](context.md) as arguments. The context contains additional information about the function parameters.

Cloud Functions automatically captures the application's standard output streams and sends them to the centralized logging system in Yandex Cloud. This system also logs entries about the start and end of each function execution, as well as any errors that occur during execution. For more information about the log format, see [Java function execution logging](logging.md).

To learn more about programming in Java or how certain constructs work, we recommend taking a basic [course on Stepik](https://stepik.org/course/187/promo).