Fact-checked by Grok 2 weeks ago

Java Class Library

The Java Class Library (JCL) is a vast collection of pre-built, reusable classes, interfaces, and methods provided as part of the (Java SE), enabling developers to create robust applications without implementing fundamental functionalities from scratch. It is bundled with the (JDK), which provides the runtime environment for executing applications, forming the core runtime support for the (JVM) and encompassing thousands of components organized into packages like java.lang, java.util, and java.io. These libraries cover essential areas such as language fundamentals, data structures, operations, concurrency, networking, , internationalization, and database connectivity, allowing for platform-independent code execution. The JCL is modularized in modern Java versions, with core modules like java.base providing foundational elements including the Object class, primitive type wrappers, strings, threads, and , while other modules handle specialized tasks such as XML processing (java.xml), user interfaces (java.desktop for AWT and ), and remote method invocation (java.rmi). This structure ensures and scalability, with the libraries evolving through Java SE releases to incorporate features like the module system introduced in Java 9. Unlike third-party libraries, the JCL is officially maintained by and the community, guaranteeing reliability and standardization across Java implementations. Key notable aspects include its role in promoting the "" principle, as the libraries abstract platform-specific details through the JVM, and its extensive documentation via the Java API Specification, which details over 4,000 classes as of Java SE 17. The library's design emphasizes security features like sandboxing and support, as well as performance optimizations for concurrency via the java.util.concurrent package. Developers access these components through import statements, leveraging tools like the javac to integrate them seamlessly into applications. As of November 2025, the Java Class Library continues to evolve with Java SE 25, the latest release, maintaining compatibility with prior versions while adding new features through the ongoing six-month release cadence.

Introduction

Definition and Scope

The (JCL), also known as the , is the standard set of reusable classes, interfaces, and (APIs) provided with the (JDK) to enable the of applications. It forms the foundational runtime components that support core functionality, such as essentials, data structures, and input/output operations, all implemented primarily in the language itself. The scope of the JCL encompasses over 4,000 public classes and interfaces, organized into a hierarchical package structure that includes fundamental packages like java.lang for basic language support, java.util for utilities and collections, and java.io for streams. This collection deliberately excludes platform-specific implementations, which are handled by the underlying operating system or hardware, as well as any third-party or extension libraries not part of the official JDK distribution. In distinction from the Java Virtual Machine (JVM), the JCL supplies the essential class files and APIs that populate the runtime environment, providing the building blocks for application logic and system interactions, whereas the JVM serves as the execution engine responsible for interpretation, , and platform abstraction. The binary representation of the JCL contributes substantially to the overall JDK footprint, with class files alone totaling around 27,000 entries (including inner classes) in JDK 21, and the core libraries forming a key portion of the distribution's approximately 186 MB download size. Its growth continues through targeted enhancements proposed via JDK Enhancement Proposals (JEPs), which introduce new classes and APIs to address evolving language needs while maintaining .

Role in Java Ecosystem

The Java Class Library (JCL), comprising the standard classes and interfaces in the java.* packages, serves as the foundational layer for all applications, supplying essential services such as object management, data structures, , and interactions with underlying systems without requiring external dependencies. These libraries enable developers to construct robust, by providing a consistent set of reusable components that abstract low-level operations. In the broader Java ecosystem, the JCL integrates seamlessly with the (JVM), where classes from the library are loaded dynamically at runtime to support execution and provide core runtime behaviors like garbage collection and thread management. Compilers such as rely on the JCL during compilation, using the bootstrap class path (e.g., core modules like java.base) to resolve types, validate code against standard APIs, and ensure compliance with the Java language specification. Build tools like and further depend on the JCL through the JDK, leveraging its APIs for tasks such as dependency resolution, artifact packaging, and automated testing to maintain ecosystem-wide standardization. The JCL plays a pivotal role in achieving Java's "write once, run anywhere" portability principle by encapsulating platform-specific details—such as file system access via java.io or networking via java.net—allowing applications to operate uniformly across diverse operating systems and hardware without modification. This abstraction layer, implemented through the JVM's platform adaptations, ensures that JCL-dependent code remains independent of host environments, fostering widespread adoption in enterprise, mobile, and cloud computing scenarios. At the heart of Java's dependency chain, core JCL packages like java.lang are implicitly imported in every Java source file, forming the base upon which all other libraries and frameworks are constructed. Higher-level frameworks, such as , extend and rely on these foundational elements—for instance, using JCL collections and concurrency utilities—to deliver domain-specific functionality while adhering to the platform's standards. This hierarchical structure promotes modularity and reusability, allowing developers to build complex systems atop a stable, verified core.

History and Evolution

Origins in JDK 1.0

The Java Class Library (JCL) was introduced as an integral component of the (JDK) 1.0, released by on January 23, 1996. This initial release formed the foundation of the Java platform, specifically designed to enable the development of applet-based web applications that could run securely within browsers like , the first major Java-enabled application. The JCL provided a standardized set of reusable classes and interfaces to support cross-platform execution, addressing the era's growing demand for dynamic content delivery over the . The design of the JCL in JDK 1.0 drew significant influence from C++ libraries but was deliberately simplified to prioritize portability and ease of use across diverse hardware and operating systems. Core packages such as java.lang, which included fundamental classes like Object and wrappers for primitive types, and java.awt for basic graphics and user interface components via the Abstract Windowing Toolkit (AWT), established the library's foundational structure. Other essential packages encompassed java.io for input/output operations, java.net for networking, java.util for utilities, and java.applet for embedding interactive content in web pages, totaling six top-level packages. This architecture emphasized bytecode compilation to the Java Virtual Machine (JVM), ensuring architecture-neutral execution without platform-specific recompilation. The library comprised approximately 250 classes, reflecting a minimalist approach to avoid bloat while providing essential functionality for application development. Key motivations behind the JCL's creation stemmed from the limitations of contemporary languages like C++ in handling networked, cross-platform environments, particularly for distributed systems and that evolved into web-centric applications. Sun's team sought to overcome issues such as errors, platform dependencies, and security vulnerabilities in existing solutions, promoting a "" paradigm through robust , automatic garbage collection, and built-in networking support. This focus on and security facilitated rapid adoption by developers building portable, interactive software for the emerging . The development of the JCL was led by and his team at , including key contributors like Mike Sheridan and Patrick Naughton, under the original project codename before its rebranding to . Their emphasis on minimalism ensured the library was lightweight and focused, with deliberate omissions of complex C++ features like explicit pointers and to enhance reliability and developer productivity. This collaborative effort at Sun prioritized quick iteration and broad accessibility, laying the groundwork for Java's expansion in subsequent releases.

Key Developments Across Versions

The Java Class Library (JCL) underwent significant enhancements starting with JDK 1.1 in 1997, which introduced key APIs for database connectivity and . The (JDBC) API enabled standardized access to relational databases, allowing Java applications to interact with various database management systems through a common interface. Remote Method Invocation (RMI) was added to support distributed object communication, facilitating the development of networked applications by allowing objects in different Java virtual machines to invoke methods on each other. Additionally, inner classes were incorporated, providing a mechanism to define classes within other classes for improved code organization and encapsulation in event-handling and adapter patterns. JDK 1.2, released in 1998 and branded as Java 2, marked a major expansion of the JCL with the introduction of the Collections Framework in the java.util package. This framework provided a unified architecture for representing and manipulating collections, including interfaces like Collection, , Set, and , along with implementations such as ArrayList and HashMap, which replaced ad-hoc data structures and improved reusability. The components were integrated as a lightweight alternative to the (AWT) for graphical user interfaces, offering pluggable look-and-feel capabilities and better platform independence. Support for Just-In-Time (JIT) compilation was also enhanced in the runtime environment, though primarily affecting performance rather than library structure, by optimizing execution. A pivotal update arrived with JDK 5.0 in 2004, which modernized the language and library for safer and more expressive code. Generics were added to the Collections Framework and other APIs, enabling type-safe parameterization of classes and methods to prevent runtime errors like ClassCastException. Enums were introduced as a new class type for representing fixed sets of constants, enhancing over integer constants. Autoboxing and automated conversions between primitive types and their wrapper classes, simplifying code for collections and arithmetic operations. The java.util.concurrent package was newly created, providing high-performance utilities for concurrency, including executors, concurrent collections like ConcurrentHashMap, and locks, which addressed limitations in the legacy java.lang.Thread model. JDK 8 in 2013 brought elements to the JCL, transforming paradigms. Lambda expressions allowed concise implementation of functional interfaces, reducing boilerplate for single-method behaviors in APIs like Collections. The Streams API in java.util.stream enabled declarative processing of sequences, supporting operations like filter, map, and reduce for parallel and sequential data pipelines. The java.time package introduced a modern date and time API, replacing the problematic java.util.Date and Calendar with immutable classes like LocalDateTime and ZonedDateTime, along with support for time zones and formatting. From JDK 9 in 2017, the JCL evolved toward better modularity through Project Jigsaw, which reorganized the platform into modules, with java.base serving as the foundational module containing core classes like Object and . This change improved encapsulation and reduced the runtime footprint by allowing selective inclusion of APIs. Subsequent versions continued this trajectory; for instance, JDK 21 in 2023 finalized virtual threads via JEP 444, introducing lightweight threading in java.lang.Thread that scales to millions of concurrent tasks without the overhead of platform threads, enhancing concurrency for server applications. Following JDK 21, further enhancements to the JCL appeared in JDK 22 through JDK 25. JDK 22 (March 2024) and JDK 23 (September 2024) advanced preview features like the Foreign Function & API for interacting with native code. JDK 24 (March 2025) extended to primitive types in instanceof and switch expressions. JDK 25, released as the latest (LTS) version on September 16, 2025, finalized scoped values and in java.util.concurrent for better handling of concurrent tasks, introduced a API in java.security for , and enhanced the Vector API for SIMD operations, continuing to improve performance and expressiveness in the library. Deprecations and removals have streamlined the JCL by eliminating outdated features. In JDK 11 (2018), the deployment stack for applets and Java Web Start was removed, as browser support for Java plug-ins had ended, rendering the Applet API obsolete and prompting migration to modern web technologies.

Structure and Organization

Package Hierarchy

The Java Class Library (JCL) is organized into a hierarchical package structure rooted in the java.* namespace, which encompasses the core APIs essential to the Java Standard Edition platform. This top-level namespace includes foundational packages such as java.lang, which supplies fundamental classes like Object—the root of the class hierarchy—and String for basic language operations. The library also features the javax.* namespace for extensions, providing optional APIs such as javax.swing for user interface components and javax.crypto for security-related functions. In JDK 25, the JCL consists of 183 packages in total. Packages within the JCL are grouped logically by functionality to streamline developer navigation and promote modular code design. For instance, java.util offers general utilities, including the collections framework with interfaces like and for . Similarly, java.net focuses on networking, supplying classes for sockets, URLs, and protocol handling. Subpackages enable deeper specialization, as seen in java.util.concurrent, which builds on java.util to provide concurrency tools such as thread pools and atomic variables. Package naming follows a strict hierarchical using dot-separated, all-lowercase identifiers to denote scope and relationships, ensuring unambiguous references like java.io.File for the File class in the input/output subdomain. This dotted notation mirrors the in the and aligns with the language's model. Visibility rules in the JCL dictate levels for classes and members: public modifiers expose elements for use across any package, supporting broad developer integration, while package-private (the default, with no explicit modifier) confines to the declaring package, safeguarding internal implementations from external dependencies.

Modularization in Java 9+

The (JPMS), introduced as part of Project Jigsaw in JDK 9, represents a fundamental evolution in organizing the (JCL) by layering modularity atop the existing package structure. This system shifts the traditional mechanism to a modulepath, where modules serve as self-contained units for compilation, deployment, and runtime execution, enabling finer-grained control over accessibility and dependencies. Released in September 2017, JDK 9 modularized the entire JDK and JCL, dividing the platform into distinct modules that encapsulate related packages and resources. At the core of JPMS is the java.base module, which forms the foundational layer of the JCL and includes essential packages such as java.lang for core language support and java.util for utilities and collections. Other modules, like java.desktop for components and java.net.http for networking, build upon this base, with the JDK 25 distribution encompassing 61 modules in total to cover the full spectrum of platform . For legacy code, automatic modules allow non-modular files to be treated as modules on the modulepath, deriving names from metadata or content to facilitate gradual migration without immediate refactoring. Modules are defined via a module-info.java descriptor file, which specifies directives such as exports to control public API exposure and requires to declare dependencies, enforcing strong encapsulation by default—hiding internal implementation details unless explicitly opened. The modularization yields significant benefits for scalability and performance in large-scale applications. Strong encapsulation reduces the risk of unintended API dependencies and classpath pollution, promoting reliable, maintainable codebases. Additionally, it enables reduced startup times by allowing the JVM to load only necessary modules, rather than the entire JCL, which is particularly advantageous for cloud-native and containerized environments. To support adoption, tools like jdeps analyze class and package dependencies in legacy code, identifying migration paths by detecting reliance on internal . Complementing this, jlink links modules and dependencies into optimized, custom runtime images that exclude unused components, minimizing deployment footprint while preserving full functionality.

Core APIs and Components

Fundamental Utilities and Collections

The java.lang package forms the foundation of the Java Class Library, providing core classes essential for all Java programs without requiring explicit imports. At its heart is the Object class, which serves as the superclass for every other class in Java, defining fundamental methods such as equals(Object obj) for comparing object equality based on content rather than identity, and hashCode() for generating an integer hash value consistent with equals to support efficient storage in hash-based collections. These methods enable polymorphic behavior and are overridden in subclasses to customize comparison and hashing logic. The class in java.lang represents immutable sequences of characters, ensuring thread-safety and preventing unintended modifications after creation, which promotes reliability in concurrent environments. This immutability means operations like concatenation create new instances, potentially impacting memory usage in high-volume string manipulations. Wrapper classes such as , , , and others encapsulate primitive types (e.g., int, double) as objects, facilitating their use in object-oriented contexts like collections that require object references. These classes implement equals and hashCode for proper object comparison and provide valueOf and parse methods for conversions between primitives and strings. The Collections Framework, primarily in the java.util package, offers a unified architecture for representing and manipulating groups of objects, including interfaces, implementations, and algorithms that standardize data structure usage across Java applications. Key interfaces include List for ordered collections allowing duplicates and indexed access, Set for unique elements without ordering guarantees in the base interface, and Map for associating keys with values where keys are unique. Implementations provide concrete realizations: ArrayList as a resizable array-based List with average O(1) time for get and set operations but O(n) for insertions in the middle; HashMap as a hash table-based Map offering average O(1) performance for get, put, and remove via hashing keys; and TreeSet as a sorted Set using a red-black tree for O(log n) insertion, deletion, and search times, maintaining natural ordering. Iteration over collections is handled by the Iterator interface for forward traversal and optional removal, with ListIterator extending it for bidirectional access and modifications in List implementations. Utility methods in the Collections class provide algorithms such as sort(List<T> list) for stable sorting in O(n log n) time using a modified merge sort, and binarySearch(List<? extends Comparable<? super T>> list, T key) for O(log n) searches on sorted lists.)) Additional utilities in java.util and java.lang support common programming needs. The Random class generates pseudorandom numbers using a with a 48-bit seed, offering methods like nextInt(int bound) for integers in [0, bound) and nextDouble() for doubles in [0.0, 1.0), though it is thread-safe only via synchronized access and unsuitable for cryptographic purposes. The System class supplies static methods for runtime interactions, including currentTimeMillis() for millisecond timestamps since the Unix and arraycopy for efficient primitive array copying, as well as getProperty(String key) to access system properties like java.version or os.name. In java.lang, the Math class provides static methods for arithmetic operations, with constants like PI (approximately 3.141592653589793) and methods such as sqrt(double a) returning the correctly rounded positive , adhering to floating-point standards with accuracy typically within 1 unit in the last place (ulp).

Input/Output and Networking

The Java Class Library provides robust for (I/O) operations and networking, enabling developers to manage streams, file systems, and network communications efficiently within applications. These form the foundation for reading from and writing to various sources, including files, , and URLs, while supporting both blocking and non-blocking paradigms to accommodate diverse needs. The I/O facilities emphasize portability across platforms, abstracting low-level system calls into high-level, object-oriented interfaces that integrate seamlessly with the rest of the Java ecosystem. Networking components, in turn, facilitate client-server interactions and protocols, evolving from basic socket programming to modern HTTP handling. The java.io package, introduced in JDK 1.0, offers the foundational stream-based I/O model centered on byte-oriented streams like InputStream and OutputStream, which serve as abstract base classes for reading and writing binary data from sources such as files or network connections. Character-based I/O is handled through Reader and Writer subclasses, which convert bytes to Unicode characters, ensuring proper handling of text data across locales. File operations are managed via the File class, which provides methods for creating, deleting, and querying files and directories, though it does not support direct reading or writing—those tasks require streams. For object persistence, java.io includes serialization mechanisms, where ObjectInputStream and ObjectOutputStream allow objects to be written to or read from streams in a binary format compatible with Java's type system, facilitating data exchange between JVM instances. To address limitations in the original stream model, such as inefficiency in buffer management and lack of support for non-blocking operations, the New I/O (NIO) API was introduced in JDK 1.4 within the java.nio package, featuring buffers, channels, and selectors for more scalable I/O handling. Buffers, such as ByteBuffer and CharBuffer, provide a fixed-size array-like structure for efficient data manipulation, supporting direct memory access for native I/O operations to reduce copying overhead. Channels, like FileChannel and SocketChannel, act as conduits for data transfer between buffers and I/O devices, enabling scatter/gather operations where multiple buffers are read or written in a single call. Non-blocking I/O is achieved through selectors, which multiplex multiple channels without thread-per-connection overhead, ideal for high-throughput servers. Building on this, JDK 7 added the java.nio.file package with the Path interface for symbolic and platform-independent file paths, and the Files utility class for high-level operations like copying or moving files atomically. Networking in the Java Class Library is primarily encapsulated in the java.net package, which supports TCP/IP-based communications through classes like Socket for client-side connections and ServerSocket for servers, allowing bidirectional byte streams over established links. URL handling is provided by the URL class, which parses and resolves uniform resource locators, while URLConnection and its subclass HttpURLConnection enable data retrieval from HTTP resources, including methods for setting headers, cookies, and handling redirects. For more advanced HTTP support, JDK 11 introduced the java.net.http package with the HttpClient class, which implements HTTP/2 and WebSocket protocols, offering asynchronous and reactive request processing via CompletableFuture for non-blocking operations. Serialization in java.io extends beyond basic object streams with nuances for customization and . The Serializable marker must be implemented by classes to enable automatic , but the Externalizable allows finer control by overriding writeExternal and readExternal methods, permitting developers to define custom persistence logic without relying on . Fields marked as transient are excluded from to prevent sensitive or non-persistent data, such as temporary caches, from being written to the , thus enhancing privacy and reducing output size.

Concurrency and Multithreading

The Java Class Library provides foundational support for concurrency and multithreading through classes and interfaces in the java.lang package, enabling developers to create and manage multiple threads of execution within a single Java Virtual Machine (JVM). The core Thread class represents a thread of execution and extends Object, allowing threads to be instantiated directly or via factories, while the Runnable interface defines a task that can be executed by a thread, promoting a more flexible separation of task logic from thread management. To start a thread, an instance of Thread or a class implementing Runnable is passed to the Thread constructor, followed by a call to start(), which schedules the thread for execution without blocking the caller. Synchronization mechanisms in the JCL ensure by controlling access to shared resources, primarily through the synchronized keyword, which supports both method-level and -level locking on objects. When a enters a synchronized or method, it acquires the intrinsic lock () of the specified object, preventing other from entering another synchronized on the same object until the lock is released, thus avoiding conditions. The Java Memory Model (JMM), defined in the Java Language Specification, formalizes these behaviors with the happens-before relationship, a partial order that guarantees visibility of actions: for instance, an unlock action on a happens-before all subsequent lock actions on the same , ensuring that changes made by one are visible to others. The volatile keyword further aids in preventing issues like caching inconsistencies by establishing happens-before edges for reads and writes to volatile variables, making them visible across without full , though it does not provide . prevention relies on these ordering guarantees; for example, avoiding circular wait conditions through consistent lock acquisition orders or using volatile fields to signal completion, as improper can lead to indefinite where hold locks while waiting for others. Introduced in JDK 5 via JSR-166, the java.util.concurrent package extends these basics with high-level utilities for scalable concurrent programming, reducing boilerplate for common patterns like thread management and atomic operations. The Executor framework, centered on the ExecutorService interface, decouples task submission from execution, allowing asynchronous processing without manual thread creation; for example, Executors.newFixedThreadPool(int) creates a reusable of a specified number of threads, improving by avoiding frequent thread allocation and deallocation. Locks in this package, such as ReentrantLock, offer more flexible alternatives to synchronized blocks, supporting features like fair locking (FIFO acquisition) and try-lock operations to interrupt waiting threads, with interruptibility preventing indefinite waits. Atomic variables, like AtomicInteger, provide lock-free, thread-safe updates via (CAS) operations, such as incrementAndGet(), which are optimized for contention scenarios and backed by JVM intrinsics for performance. Advanced concurrency features build on these foundations for parallel and asynchronous workloads. The Fork/Join framework, added in JDK 7 through JSR-166y, implements a work-stealing executor via ForkJoinPool and ForkJoinTask, ideal for divide-and-conquer algorithms like recursive mergesort, where tasks fork into subtasks and join upon completion, leveraging multiple processors with minimal overhead. Completable futures, introduced in JDK 8 as an extension of the Future interface, enable composition of asynchronous computations through methods like thenApply() for transformations and allOf() for combining multiple futures, supporting non-blocking chains that integrate with executors for reactive-style programming. Project Loom's virtual threads, standardized in JDK 21 via JEP 444, introduce lightweight, user-mode threads managed by the JVM rather than the OS, allowing millions of threads with low memory footprint—each virtual thread uses about 1 KB compared to 1-2 MB for platform threads—facilitating scalable server applications without altering existing code, as they interoperate seamlessly with legacy threading APIs.

Advanced Features and Extensions

Graphical User Interfaces

The Java Class Library provides foundational APIs for graphical user interfaces (GUIs) through the (AWT) and , enabling developers to create cross-platform applications with visual components and interactive elements. The AWT, residing in the java.awt package, forms the basis for GUI programming by offering lightweight components such as buttons, labels, and panels, which are rendered using native operating system peers for integration with the underlying platform. It includes event handling mechanisms to capture user interactions like clicks and presses, as well as layout managers—such as BorderLayout, which organizes components in five regions (north, south, east, west, and center)—to manage the spatial arrangement of UI elements without absolute positioning. These features allow AWT to support basic windowing, graphics drawing, and input processing, though its reliance on native components introduces platform-specific behaviors in rendering and appearance. Building upon AWT, —located in the javax.swing package—extends capabilities with a comprehensive set of lightweight, pure-Java components that aim for consistent behavior across platforms, including advanced widgets like JButton for interactive buttons and JFrame for top-level windows with title bars and borders. Introduced as part of the Java Foundation Classes and fully integrated into the Java 2 Platform, Standard Edition (J2SE) 1.2 in 1998, Swing supports a pluggable look-and-feel system that allows applications to adopt native or custom visual styles, such as Metal or , without altering core functionality. It adheres to the Model-View-Controller (MVC) pattern, separating data models (e.g., for lists or tables), visual views, and event controllers to promote reusable and maintainable code; for instance, a JButton can bind to an ActionListener to respond to user actions while its appearance remains decoupled. Swing also incorporates double-buffering by default, rendering graphics to an off-screen buffer before displaying them to reduce flickering and improve smoothness during updates. Central to both AWT and Swing is the event model, which uses a delegation-based approach for handling user inputs and system notifications. Developers register listener interfaces, such as ActionListener for button presses or MouseListener for cursor events, to specific components, allowing modular response to actions without tight coupling. Events are dispatched asynchronously through the EventQueue, a platform-independent class that serializes and prioritizes incoming events from peers or application code, ensuring thread-safe processing on the Event Dispatch Thread (EDT) to prevent concurrency issues in UI updates. Despite their strengths, these APIs have notable limitations: AWT's platform-dependent rendering, achieved via native peers, can lead to inconsistencies in component sizing, fonts, and behaviors across operating systems, such as varying button heights on Windows versus macOS. mitigates some of these by using Java-based rendering but inherits AWT's event queue and layout foundations, potentially introducing performance overhead from double-buffering in complex scenes; however, this technique is essential for its smoother graphics compared to AWT's direct screen draws. For , both toolkits support locale-sensitive components, but detailed handling of text and layout for multiple languages is addressed in dedicated APIs.

Security and Cryptography

The Java Class Library (JCL) provides a robust for through the java.lang.SecurityManager class, which enables applications to enforce a by performing runtime checks before sensitive operations such as file access or network connections. This manager intercepts potentially unsafe actions and consults a configured policy to determine if they are permitted, helping to untrusted code like applets or dynamically loaded . However, as of Java SE 17, the SecurityManager has been deprecated for removal due to its complexity and the shift toward alternative models like boundaries and application-specific controls; in Java SE 24 and later, it is permanently disabled and cannot be enabled. Security policies are defined in configuration files, primarily the java.security properties file located in the JDK's conf/security directory, which specifies global settings such as enabled algorithms and provider priorities. Additional policy files, typically named java.policy, use a declarative syntax to grant permissions based on code sources like URLs or signer certificates; for example, a policy entry might allow code from a trusted domain to read specific files while denying network access to others. The default policy implementation, provided by the java.security.Policy class, loads these files and evaluates permissions during runtime checks. Permissions in the JCL are represented by the abstract java.security.Permission class and its subclasses, such as java.io.FilePermission for file operations or java.net.SocketPermission for network endpoints, allowing fine-grained control over resources. The java.security.AccessController class facilitates access decisions by examining the call stack and current execution context to verify if the required permission is granted, often through methods like checkPermission(). For code that needs temporary elevated privileges, such as libraries performing system calls on behalf of untrusted callers, the doPrivileged() block executes a privileged action while limiting the stack inspection to the privileged segment, preventing unauthorized propagation of permissions. The cryptography components of the JCL are built around the Java Cryptography Architecture (JCA), a provider-based framework that supplies APIs for digital signatures, message digests, encryption, and key management through pluggable implementations. The javax.crypto package extends JCA with the Java Cryptography Extension (JCE), offering classes like Cipher for symmetric and asymmetric encryption algorithms, including AES for block ciphers and RSA for public-key operations. Key generation is handled by KeyGenerator for symmetric keys and KeyPairGenerator for asymmetric pairs, while digital signatures use Signature to sign and verify data with algorithms like RSA-SHA256. These APIs support operations such as encrypting data streams or generating message authentication codes (MACs) to ensure integrity. JCA relies on provider classes registered via the java.security.Security class, with SunJCE serving as the default provider for JCE algorithms since Java SE 1.4, implementing standards-compliant primitives like in mode and key pairs up to 4096 bits. Third-party providers can be added dynamically for specialized needs, such as hardware-accelerated . For secure networking, the JCL integrates with the Java Secure Socket Extension (JSSE) in the javax.net.ssl package, which uses JCA providers to implement TLS protocols for encrypted client-server communications, including handshakes with validation.

Internationalization and Localization

The Java Class Library provides comprehensive support for internationalization (i18n) and localization (l10n) through APIs that enable applications to adapt to different languages, regions, and cultural conventions without requiring code changes. Internationalization involves designing software to handle locale-specific data, such as text, dates, numbers, and sorting rules, while localization adapts that software for specific locales using external resources. These features are primarily implemented in the java.util, java.text, and java.lang packages, leveraging the Unicode standard for global text processing. The class in java.util serves as the central mechanism for representing a specific geographical, political, or cultural , defined by , , and optional variant tags compliant with IETF BCP 47. Constructors allow creation of locales such as Locale("en", "US") for , and key methods like getLanguage() return ISO 639 codes (e.g., "en"), while getDisplayLanguage() provides a localized name like "English". Locales are passed to other to customize behavior, ensuring operations like formatting produce output tailored to the user's preferences. For message localization, the ResourceBundle class in java.util manages locale-specific resources, such as strings, by loading them from external files or classes based on a base name and . The PropertyResourceBundle subclass specifically handles .properties files, where keys map to translated values (e.g., greeting=Hello in messages_en.properties and greeting=[Bonjour](/page/Bonjour) in messages_fr.properties). Loading occurs via getBundle(String baseName, [Locale](/page/Locale) locale), which follows a fallback chain from specific to default locales, retrieving values with methods like getString(String key). This approach isolates translatable content, facilitating maintenance and updates. The java.text package includes abstract Format subclasses for locale-sensitive data presentation. NumberFormat handles numeric formatting and parsing, with factory methods like getInstance(Locale) returning instances that apply regional conventions, such as commas for thousands separators in the (e.g., "1,234.56") or periods in ("1.234,56"). Specialized variants include getCurrencyInstance(Locale) for symbols like "$" or "€", and getPercentInstance(Locale) for percentages. Similarly, DateFormat formats and parses dates/times using styles (SHORT, MEDIUM, LONG, FULL) and locales, producing outputs like "Nov 3, 1997" for English or "3 nov. 1997" for . It integrates with TimeZone via setTimeZone(TimeZone) to account for offsets and . Character handling in the Java Class Library relies on the java.lang.Character class, which supports the full Unicode range from U+0000 to U+10FFFF, including supplementary characters via UTF-16 encoding. Methods like isDigit(int codePoint) and toUpperCase(int codePoint) enable Unicode-compliant categorization and case mapping, essential for processing text in diverse scripts such as Latin, Cyrillic, or Han. This foundation ensures robust support for global character sets in i18n-aware applications. For sorting and comparison, the Collator class in java.text provides locale-sensitive string ordering that respects linguistic rules, such as ignoring accents in primary comparisons. Obtained via getInstance([Locale](/page/Locale)), it uses compare([String](/page/String) source, [String](/page/String) target) to return negative, zero, or positive values indicating order, with adjustable strength levels (e.g., PRIMARY for base letters). The RuleBasedCollator subclass allows custom rules for specialized sorting needs. Time zone management is handled by java.util.TimeZone, which represents offsets from UTC and IDs like "America/New_York", retrievable via getTimeZone(String ID). Since JDK 8, it integrates with the java.time package through conversion methods: TimeZone.toZoneId() yields a ZoneId for use in classes like ZonedDateTime, which perform time-zone-aware calculations based on the ISO calendar system. This bridge allows legacy code to leverage modern, immutable date-time APIs. Best practices for i18n in Java applications emphasize using ResourceBundle with property files to externalize strings, avoiding hard-coded literals that hinder localization. Developers should default to the user's system locale via Locale.getDefault() and test across multiple locales to ensure proper handling of bidirectional text and collation rules.

Implementation and Deployment

Integration with JDK Distributions

The Oracle JDK, provided by , is a distribution that bundles the Java Class Library (JCL) as an integral component of its Java Runtime Environment (JRE) and development tools, paired with the HotSpot (JVM). This integration ensures that the JCL aligns precisely with the Java SE Platform specification for each release, such as JDK 25 incorporating the JCL defined in Java SE 25. The Oracle JDK is available under both free no-fee terms for production use and commercial licensing options, facilitating seamless deployment in enterprise environments. In contrast, serves as the community-driven, open-source of the , featuring identical JCL source code to the JDK while allowing contributions from a global developer community. Builds derived from , such as those from the project (formerly AdoptOpenJDK), provide TCK-certified binaries that include the full JCL for runtime and development purposes, with extended (LTS) for versions like JDK 25, 21, and 17 to ensure stability over multi-year periods. These community builds maintain compatibility with the official Java SE specifications, enabling users to select from various vendors without altering the core JCL functionality. Prior to JDK 9, the JCL was primarily distributed in a monolithic archive format, with core classes compiled into the rt.jar file located in the JRE's lib directory, alongside other JARs like tools.jar for development utilities. Starting with JDK 9, the introduction of the restructured the JCL into a modular format, with runtime classes contained in the modules file under JAVA_HOME/lib/modules and build-time modules available as jmods in JAVA_HOME/jmods, eliminating rt.jar and enabling finer-grained access and optimization via tools like jlink for custom runtime images. This modular approach enables the creation of custom runtime images using tools like jlink, which include the essential JCL modules for executing applications without the full JDK . Since JDK 9, JDK distributions have followed a six-month for feature releases, supplemented by more frequent update releases—often quarterly—to incorporate security patches, bug fixes, and enhancements to the JCL. Changes to the JCL are proposed and implemented through the JDK Enhancement Proposal () process, which ensures rigorous review and integration; for instance, introduced for switch expressions, enhancing JCL utility classes and delivering in JDK 17. This structured update mechanism maintains backward compatibility while evolving the library to meet modern development needs.

Configuration Options

The Java Class Library (JCL) can be customized at and build time through various mechanisms that allow developers to tailor its behavior without altering the underlying . These options primarily involve JVM command-line flags, files, custom class loaders, and tools for generating optimized images. Such customizations enable fine-grained control over system properties, module resolution, security permissions, class loading paths, and module inclusion, supporting diverse deployment scenarios from embedded systems to large-scale applications. JVM flags provide a primary means of runtime configuration for the JCL. The -D option sets system properties, which influence JCL components such as and ; for instance, -Djava.security.properties=/path/to/custom.properties loads a custom overriding default settings like restrictions. Similarly, the --module-path or shorthand -p option specifies directories or JARs containing modules, allowing the JVM to resolve JCL modules and dependencies from non-standard locations, such as -p /custom/modules:path. These flags are invoked when launching the JVM with the java command and take precedence over default configurations. Policy configuration files govern security aspects of the JCL, particularly when using the SecurityManager. The java.policy file defines permissions for code sources, with default system-wide locations at ${java.home}/lib/security/java.policy (Unix-like systems) or ${java.home}\lib\security\java.policy (Windows), and a user-specific file at ${user.home}/.java.policy. Entries follow a syntax like grant codeBase "file:/example/-" { permission java.io.FilePermission "/tmp/-", "read,write"; };, granting specific actions (e.g., file access) to code from designated URLs or signed by aliases. For endorsing security providers, the java.security file lists them in preference order via properties such as security.provider.1=sun.security.provider.Sun, enabling custom cryptographic implementations to be prioritized without dynamic code changes. These files can be edited manually or via the policytool utility, which provides a graphical interface for adding grants, permissions, and keystore references. Custom class loaders extend the JCL's loading mechanism to alter how classes and resources are resolved. The URLClassLoader class, part of the java.net package, serves as a base for such extensions, loading from a specified array of URLs (e.g., files or directories) while delegating to a parent loader. Developers can subclass it and override the findClass(String name) method to implement custom logic, such as filtering or transforming JCL classes during loading; for example, addURL(new URL("jar:file:/custom.jar!/")) dynamically appends paths to influence JCL resource access. This approach requires SecurityManager.checkCreateClassLoader() permission and is useful for isolating or modifying JCL subsets in multi-tenant environments. At build time, the jlink tool assembles customized Java Runtime Environments (JREs) from JCL modules, excluding unnecessary ones to create slimmed images. Invoked as jlink --module-path $JAVA_HOME/jmods --add-modules java.base,java.logging --output myjre, it includes only specified modules and their transitive dependencies, omitting larger ones like java.desktop for headless applications. Options such as --strip-debug remove information and --compress=2 applies , reducing footprint while preserving JCL functionality. This enables deployment of minimal runtimes tailored to application needs, with modules sourced from the standard JDK module path.

Standards, Conformance, and Compatibility

Java Community Process Involvement

The (JCP) serves as the formal mechanism for developing and standardizing technical specifications for Java technologies, including the Java SE platform and its core Java Class Library (JCL). Overseen through an Executive Committee that includes representatives from industry, academia, and the open-source community, the JCP facilitates collaborative evolution of Java APIs via Java Specification Requests (JSRs). These JSRs define new features, updates, or revisions to the JCL, ensuring broad consensus before integration into official releases. Central to the JCP is the formation of Expert Groups, composed of JCP members who propose, draft, and refine specifications. The process begins with a JSR submitted to the Executive Committee for approval, followed by stages including Early Draft Review, Review for feedback, and Final Release upon approval. Maintenance phases allow for ongoing updates to approved JSRs, with input gathered through public mailing lists and initiatives like the Adopt-a-JSR program. This structured approach has been instrumental in standardizing key JCL components, such as the concurrency utilities introduced in JSR 166, which added the java.util.concurrent package to enhance multithreaded programming capabilities. Notable JSRs have directly shaped the JCL's evolution, including JSR 310, which delivered the modern java.time API for robust date and time handling, replacing legacy classes like java.util.Date. Similarly, JSR 384 defined the Java SE 11 platform, incorporating refinements to the JCL for improved performance and security in embedded, desktop, and server environments. These specifications undergo rigorous review to maintain compatibility and interoperability across Java implementations. Through JSR 387, finalized in 2018, the JCP has streamlined its operations, enabling a faster six-month release cadence for the Java SE platform while integrating with the OpenJDK's Java Enhancement Proposal (JEP) process for non-specification changes to the JCL. This evolution supports agile development without compromising standardization, allowing incremental enhancements like utility method additions to reach users more rapidly via community-driven JEPs.

Version Compatibility and Testing

The Java Class Library (JCL) maintains backward compatibility across versions through a combination of source, binary, and behavioral guarantees, ensuring that applications developed for earlier Java SE releases can generally run on newer platforms without modification. Source compatibility is supported by the javac compiler's -source flag, which allows developers to specify the version of the Java programming language to use, restricting compilation to features available in that version (e.g., -source 8 limits code to Java SE 8 language constructs like lambdas). This enables cross-compilation for older environments while leveraging newer toolchains. Binary compatibility is defined in the Java Language Specification, where changes to classes and interfaces must preserve the ability of pre-existing binaries to link and execute without errors; permitted modifications include adding new fields, methods, or constructors, reimplementing existing ones for performance, and reordering members, but prohibit reductions in accessibility or deletions of public APIs. Class file versions, indicated by major and minor numbers in the ClassFile structure (e.g., 52.0 for Java SE 8), ensure that binaries from older versions (starting from 45.0 for Java SE 1.0) can load on newer JVMs, with the JVM supporting a range up to the current release. Behavioral compatibility further enforces that public APIs in the JCL exhibit no breaking changes, such as altered method semantics or exception behaviors, across major releases, as outlined in Oracle's compatibility summaries for Java SE editions. To verify these guarantees, the JCL relies on comprehensive testing suites. The (TCK), developed under the (JCP), is a suite of automated tests that ensures implementations conform to Java Specification Requests (JSRs) defining features; a full pass certifies an implementation as fully compatible, while partial passes may qualify subsets as "compatible" for specific profiles. The TCK focuses on of public , requiring 100% coverage of signatures and documentation for test interpretation, with an appeals process for disputes. Complementing this, JTreg serves as the primary regression test harness for the JDK, including the JCL, supporting over 10,000 unit, functional, API, compiler, GUI, and shell-script tests; it automates compilation, execution, and failure analysis without precompilation, and is used internally by contributors to detect regressions before releases. Deprecations in the JCL are managed through the @Deprecated annotation in the java.lang package, which marks elements like methods, classes, or fields as discouraged for new code due to risks or better alternatives; compilers issue warnings when deprecated elements are used or overridden, facilitating gradual migration without immediate breakage. Compatibility levels distinguish certified implementations (passing the full TCK) from compatible ones (passing a defined subset, often for or specialized profiles), with deprecations tracked via this to signal future removals. Tools aid developers and maintainers in upholding . The jdeps command-line utility analyzes static dependencies in files, JARs, or directories, identifying package-level or API-only usages (e.g., flagging reliance on internal JDK elements via -jdkinternals), and supports generating descriptors for migration. For API evolution verification, Sniffer checks that code compiled on newer JDKs remains compatible with older s by sniffing for unavailable methods or es, using signature files; though now in maintenance mode, it integrates with plugins and is supplemented by javac's --release flag for similar multi-version builds.

Licensing and Open Source

Historical Licensing Models

The Java Class Library (JCL), as part of the (JDK) released by starting in , was initially distributed under a licensing model that emphasized binary-only access to promote widespread adoption while protecting Sun's intellectual property. This model, governed by the Sun Binary Code License Agreement (BCL), granted users a non-exclusive, non-transferable to reproduce and use the binary forms of the software internally without fees, enabling deployment of Java runtime environments (JRE) in commercial applications. However, it explicitly prohibited access to , restricted modifications to the core libraries, and limited redistribution to scenarios where the binaries were bundled with user-developed applications, often requiring adherence to Sun's and guidelines to prevent fragmentation. The BCL's structure reflected Java's early emphasis on platform independence and applet-based web applications, allowing developers to embed the JCL in products for runtime execution without licensing costs, which facilitated rapid enterprise uptake in the late 1990s. Despite this, the imposed significant constraints: modifications were confined to adding value through extensions rather than altering the JCL itself, and entities seeking broader redistribution or implementations needed separate agreements from Sun, often involving fees or partnerships. These terms ensured control over Java's evolution but drew criticism for hindering integration with open-source ecosystems, as users could not freely inspect, debug, or extend the library's internals. By the early , community concerns over the proprietary model intensified, fueled by antitrust scrutiny in cases like the Commission's investigations into Microsoft's handling of technologies, which highlighted broader issues of and compatibility. Open-source advocates, including developers from communities, argued that the BCL's restrictions stifled innovation and adoption in non-proprietary environments, leading to public calls—such as a 2004 open to Sun—for source availability to counter competitors like Microsoft's .NET and sustain 's cross-platform appeal. These pressures were compounded by growing demands for greater customizability, as businesses sought to tailor the JCL for specialized , systems, and internal optimizations without relying on Sun's binary distributions or facing legal hurdles. The lack of access limited in environments and with stacks, prompting larger organizations to explore alternatives or lobby for more flexible terms to scalable deployments.

Transition to OpenJDK

In 2006, Sun Microsystems announced the open sourcing of its implementations, including the Java Class Library, under the GNU General Public License version 2 (GPLv2), with the launch of the project to foster community-driven development. This initiative began with the release of initial portions in November 2006, marking a pivotal step toward making a fully open-source platform. The licensing adopted GPLv2 paired with the Classpath Exception, which permits linking OpenJDK code with proprietary or independently licensed modules without requiring the entire application to be open-sourced, thereby enabling broader commercial adoption while aligning with free software principles exemplified by projects like GNU Classpath. This exception specifically clarifies that distribution of object code built from unmodified OpenJDK source does not trigger GPL copyleft obligations for linked components, facilitating integration in diverse environments. Following Oracle's acquisition of Sun Microsystems in 2010, Oracle assumed stewardship of , maintaining its role as the primary contributor and project lead while overseeing governance through the OpenJDK Governing Board. Major contributors including and have since played key roles, with IBM holding a permanent board seat and Red Hat providing significant code contributions; community efforts like (transitioned to Adoptium in 2021) further support binary builds and testing. The transition enabled widespread community forks and distributions, enhanced source code transparency for auditing and customization, and culminated in JDK 7 (2011) as the first fully open-source major release of the Java platform, incorporating contributions from community developers. As of Java SE 24 in 2025, continues to evolve under the GPLv2 with Classpath Exception, with Eclipse Adoptium providing TCK-certified community binaries. This openness has sustained Java's evolution, with subsequent releases benefiting from collaborative governance and reduced barriers to participation.

Alternative Implementations

GNU Classpath

The GNU Classpath project was started in 1998 by the GNU Project to develop a reimplementation of the Java Class Library, providing a GPL-compatible alternative to proprietary implementations and aiming for complete compatibility with the official Java API specifications. Initiated by developers including Geoff Berry, Jim Blair, Brian Jones, Paul Fisher, and Aaron Renn, it sought to enable fully free Java environments by replacing ' closed-source libraries with open alternatives that adhere strictly to the Java standards. Key features of GNU Classpath include its modular architecture, which facilitates integration with diverse Java virtual machines (VMs) and compilers while maintaining portability across platforms. It historically supported the (GCJ), which allowed compilation of Java code to native executables, though GCJ has been discontinued since 2013, and incorporates specialized extensions such as , which delivers high-quality, provably secure cryptographic primitives compliant with Java's security APIs. This design emphasizes extensibility, enabling developers to add or replace components without altering the core library structure. GNU Classpath provides over 95% coverage of Java SE 6 APIs, with a focus on core functionalities from earlier versions such as J2SE 1.4 and 5.0, and partial support for updates up to that point. Development has stalled since the most recent stable release, version 0.99, issued in 2012, with no significant updates thereafter. As of 2025, the project remains unmaintained, and its use is limited to legacy or applications requiring a fully stack. In practice, GNU Classpath integrates seamlessly with lightweight, free JVMs such as JamVM, forming complete Java stacks suitable for embedded systems and resource-constrained environments, though both projects are unmaintained since 2012. Historically, it has been instrumental in advancing Java advocacy, fostering alternatives to ecosystems and promoting software freedom in Java development.

Apache Harmony and Others

Apache Harmony was an open-source project initiated by in May 2005 to develop a modular Java runtime environment, including class libraries compatible with SE 6. The initiative focused on creating a clean-room implementation of the and associated tools, with particular emphasis on modularity to support applications in mobile and embedded systems through components like the Dynamic Runtime Layer Virtual Machine (DRLVM). Licensed under the 2.0, the project aimed to foster community-driven development independent of proprietary constraints. Development progressed with contributions from various organizations, including , but faced challenges in obtaining a (TCK) license from (later ), limiting its ability to brand implementations as fully Java-compatible. In 2010, shifted its efforts to the project, leading to a significant reduction in momentum for Harmony. The Apache Harmony Project Management Committee voted in November 2011 to retire the project, moving it to the Apache Attic in 2012, where its codebase and resources were archived for historical reference. Other notable efforts related to Java implementations include IcedTea, an open-source build and integration framework for that applies patches and features tailored for GNU/Linux distributions such as and . JET was a ahead-of-time (AOT) that bundled a subset of the Java class libraries to produce optimized native executables, targeting performance-critical applications without requiring a full JVM . Additionally, the core libraries in early versions of were derived from a subset of Harmony, providing Java compatibility for mobile development while adapting to Dalvik virtual machine constraints. These implementations served distinct purposes, such as enabling customization for resource-constrained environments, enhancing runtime performance via AOT compilation, and circumventing dependencies on Oracle's ecosystem. Apache drew brief influences from project by incorporating compatible components under permissive licensing terms. In the 2025 landscape, the majority of active alternative Java class library efforts build directly on as the foundational platform, with archived materials from discontinued projects like continuing to provide insights for niche open-source innovations.

References

  1. [1]
    Java SE 8 Platform Overview
    Base Libraries. Classes and interfaces that provide basic features and fundamental functionality for the Java platform. Lang and Util Packages. Provides the ...JRE and JDK · Base Libraries · Integration Libraries · User Interface Libraries
  2. [2]
    Overview (Java SE 17 & JDK 17) - Oracle Help Center
    The Java Platform, Standard Edition (Java SE) APIs define the core Java platform for general-purpose computing. These APIs are in modules whose names start ...
  3. [3]
  4. [4]
    The Files in JDK 21 - foojay
    Oct 17, 2023 · Total size: 126 MB · Number of class files: 27,871 · 4,495 are public classes or interfaces · 12,500 are inner or anonymous classes · Largest file: ...
  5. [5]
    java.lang (Java SE 21 & JDK 21) - Oracle Help Center
    The most important classes are Object , which is the root of the class hierarchy, and Class , instances of which represent classes at run time. Frequently it is ...Class Class · Class Object · Class System · String
  6. [6]
  7. [7]
    javac
    ### Summary: How `javac` Integrates with Java Class Library
  8. [8]
    Guide to Maven Classloading
    Maven uses Plexus Classworlds to create a classloader graph with types like Platform, System, Core, API, Build Extension, Project, Plugin, and Custom ...
  9. [9]
    How Will Java Technology Change My Life? - Oracle Help Center
    Write once, run anywhere: Because applications written in the Java programming language are compiled into machine-independent bytecodes, they run ...
  10. [10]
    1.1 Overview of Java - Oracle Help Center
    Together, a JVM and the core class libraries provide a platform on which Java programmers can develop applications, which will run successfully on any operating ...
  11. [11]
    java.lang (Java Platform SE 8 ) - Oracle Help Center
    Instances of the class Class represent classes and interfaces in a running Java application. ... Java platform. Since: JDK1.0. Skip navigation links. Overview ...Package java.lang.annotation · System · Math · Frames
  12. [12]
    Java 1.0 Turns 25 - InfoQ
    Jan 23, 2021 · On January 23rd, 1996, Sun Microsystems published a press release announcing the availability of Java 1.0: Palo Alto, CA - January 23, ...
  13. [13]
    [PDF] The Java Language Environment - Bjarne Stroustrup
    Introduction to Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10. 1.1 Beginnings of the Java Language Project.
  14. [14]
    Java Packages - The Java Version Almanac
    Apr 14, 1996 · Java interfaces and classes are grouped into packages. The following are the java packages, from which you can access interfaces and classes.
  15. [15]
    How many classes are there in Java standard edition?
    24‏/06‏/2010 · Java 1.0.2 : 250 classes · Java 1.1 : 500 classes · Java 2 (version 1.2-1.4) : 2300 classes · Java 5.0 (version 1.5) : 3500 classes.List of Java class file format major version numbers? - Stack OverflowSource code for the Java library classes - Stack Overflowمزيد من النتائج من stackoverflow.com
  16. [16]
    Java 1.0 - javaalmanac.io
    The first official Java was announced on 1996-01-23 by Sun Microsystems in this press release (PDF). This release had the version number 1.0. 2 came with 8 ...
  17. [17]
    Lambda Expressions (The Java™ Tutorials > Learning the Java ...
    Lambda expressions let you express instances of single-method classes more compactly. This section covers the following topics.Missing: time | Show results with:time
  18. [18]
    Project Jigsaw - OpenJDK
    Sep 22, 2017 · Project Jigsaw. The primary goals of this Project were to: Make it easier for developers to construct and maintain libraries
  19. [19]
    JEP 444: Virtual Threads - OpenJDK
    Mar 6, 2023 · This JEP proposes to finalize virtual threads in JDK 21 with the following changes from JDK 20, informed by developer feedback: Virtual ...java.lang.Thread · Thread-local variables · java.util.concurrent · java.io
  20. [20]
    JDK 11 Release Notes, Important Changes, and Information - Oracle
    The deployment stack, required for Applets and Web Start Applications, was deprecated in JDK 9 and has been removed in JDK 11. Without a deployment stack ...
  21. [21]
    All Packages (Java SE 21 & JDK 21)
    - **Total Packages**: 250 packages listed.
  22. [22]
    java.util (Java SE 21 & JDK 21) - Oracle Help Center
    The `java.util` package contains the collections framework, internationalization, service loader, properties, random number generation, string parsing, and ...
  23. [23]
    java.net (Java SE 21 & JDK 21)
    ### Summary of the java.net Package
  24. [24]
    Naming a Package (The Java™ Tutorials > Learning the Java ...
    Package names are written in all lower case to avoid conflict with the names of classes or interfaces.
  25. [25]
    Controlling Access to Members of a Class (The Java™ Tutorials ...
    There are two levels of access control: At the top level— public , or package-private (no explicit modifier). At the member level— public , private , protected ...
  26. [26]
    JEP 261: Module System - OpenJDK
    Oct 23, 2014 · The Java Platform Module System (JSR 376) specifies changes and extensions to the Java programming language, the Java virtual machine, and the standard Java ...
  27. [27]
  28. [28]
    JDK 21 - OpenJDK
    JDK 21. This release is the Reference Implementation of version 21 of the Java SE Platform, as specified by JSR 396 in the Java Community Process.
  29. [29]
    JEP 282: jlink: The Java Linker - OpenJDK
    Jul 16, 2015 · jlink is a tool that assembles and optimizes modules and dependencies into a custom run-time image, replacing a custom build-time tool.
  30. [30]
  31. [31]
  32. [32]
  33. [33]
    List (Java SE 21 & JDK 21) - Oracle Help Center
    A List is an ordered collection where elements are accessed by index, typically allowing duplicates and null elements, and has precise control over insertion.Class ArrayList · Collection · Class LinkedList
  34. [34]
  35. [35]
  36. [36]
    Random (Java SE 21 & JDK 21)
    ### Summary of `java.util.Random` Class
  37. [37]
    System (Java SE 21 & JDK 21)
    ### Summary of java.lang.System Class
  38. [38]
  39. [39]
  40. [40]
    Defining and Starting a Thread (The Java™ Tutorials > Essential ...
    To start a thread, provide a `Runnable` object or subclass `Thread` and then use `Thread.start()`. The `Runnable` approach is more general.
  41. [41]
    Synchronization - Essential Java Classes
    Synchronization can introduce thread contention, which occurs when two or more threads try to access the same resource simultaneously.Missing: APIs | Show results with:APIs
  42. [42]
    Atomic Access - The Java™ Tutorials
    Using volatile variables reduces the risk of memory consistency errors, because any write to a volatile variable establishes a happens-before relationship with ...
  43. [43]
    Package java.util.concurrent - Oracle Help Center
    The `java.util.concurrent` package provides utility classes for concurrent programming, including frameworks and classes that are difficult to implement.
  44. [44]
    Fork/Join - Essential Java Classes - Oracle Help Center
    The fork/join framework is an implementation of the ExecutorService interface that helps you take advantage of multiple processors.
  45. [45]
    CompletableFuture (Java Platform SE 8 ) - Oracle Help Center
    A Future that may be explicitly completed (setting its value and status), and may be used as a CompletionStage , supporting dependent functions and actions ...Frames · CompletionStage · ForkJoinPool
  46. [46]
    Virtual Threads - Oracle Help Center
    Virtual threads are lightweight threads that reduce the effort of writing, maintaining, and debugging high-throughput concurrent applications.
  47. [47]
    Abstract Window Toolkit (AWT)
    The Abstract Window Toolkit (AWT) supports Graphical User Interface (GUI) programming. AWT features include: A set of native user interface components.
  48. [48]
    java.awt (Java Platform SE 8 ) - Oracle Help Center
    Package java.awt ; Defines an interface for classes that know how to layout Containers based on a layout constraints object. · The super class of all menu related ...
  49. [49]
    [PDF] Java Client Roadmap Update - Oracle
    Swing was introduced shortly thereafter as a separate library and finally incorporated into “J2SE 1.2” in 1998. Both toolkits are still part of the Java SE ...
  50. [50]
    Swing Changes and New Features - Oracle Help Center
    This document contains information relevant to all 1.4.* releases. For information specific to 1.4.1 and 1.4.2, see Swing Changes Since Java 2 SDK, Standard ...<|separator|>
  51. [51]
    Double Buffering and Page Flipping (The Java™ Tutorials > Bonus ...
    Double-buffering is used primarily to eliminate visible draws which can make an application look amateurish, sluggish, or appear to flicker.
  52. [52]
    SecurityManager (Java Platform SE 8 ) - Oracle Help Center
    The security manager is a class that allows applications to implement a security policy. It allows an application to determine, before performing a possibly ...
  53. [53]
    The Security Manager - Java™ Tutorials
    A security manager is an object that defines a security policy for an application. This policy specifies actions that are unsafe or sensitive.
  54. [54]
    SecurityManager (Java SE 17 & JDK 17) - Oracle Help Center
    Deprecated, for removal: This API element is subject to removal in a future version. The Security Manager is deprecated and subject to removal in a future ...
  55. [55]
    The Security Manager Is Permanently Disabled - Oracle Help Center
    As of JDK 24, the Security Manager is permanently disabled. The following is a summary of the changes made to the JDK as a result of the Security Manager ...
  56. [56]
    The Security Properties File - Java - Oracle Help Center
    A security properties file is a text file that contains names of security properties and their values. You can customize certain aspects of Java security by ...
  57. [57]
    Default Policy Implementation and Policy File Syntax
    The policy can be specified within one or more policy configuration files. The configuration file(s) specify what permissions are allowed for code.
  58. [58]
    Policy (Java Platform SE 8 ) - Oracle Help Center
    A Policy object is responsible for determining whether code executing in the Java runtime environment has permission to perform a security-sensitive operation.
  59. [59]
    Permissions in the Java Development Kit (JDK) - Oracle Help Center
    This document contains tables that describe the built-in JDK permission types and discuss the risks of granting each permission.
  60. [60]
    AccessController (Java Platform SE 8 ) - Oracle Help Center
    The AccessController class is used for access control operations and decisions. More specifically, the AccessController class is used for three purposes.
  61. [61]
    4.2 java.security.AccessController
    The AccessController checkPermission method examines the current execution context and makes the right decision as to whether or not the requested access is ...
  62. [62]
    Java Cryptography Architecture (JCA) Reference Guide
    The JCA is a major Java platform component with a provider architecture and APIs for security services like digital signatures and encryption. It uses a ...Introduction · Core Classes and Interfaces · How the JCA Might Be Used in...
  63. [63]
    javax.crypto (Java Platform SE 8 ) - Oracle Help Center
    The javax.crypto package provides classes for cryptographic operations like encryption, key generation, key agreement, and MAC generation, including symmetric, ...
  64. [64]
  65. [65]
    Java Cryptography Architecture (JCA) Oracle Providers ...
    This document describes the technical details of the providers shipped as part of Oracle's Java Environment.Introduction · The SUN Provider · The SunJSSE Provider · The SunJCE Provider
  66. [66]
    Java Secure Socket Extension (JSSE) Reference Guide
    The javax.net.ssl.SSLSocketFactory class acts as a factory for creating secure sockets. This class is an abstract subclass of javax.net.SocketFactory.
  67. [67]
    javax.net.ssl (Java Platform SE 8 ) - Oracle Help Center
    This class extends ServerSocket s and provides secure server sockets using protocols such as the Secure Sockets Layer (SSL) or Transport Layer Security (TLS) ...
  68. [68]
    2 Internationalization Overview - Java - Oracle Help Center
    This guide summarizes the internationalization APIs and features of the Java Platform, Standard Edition. For coding examples and step-by-step instructions ...
  69. [69]
    Character (Java SE 11 & JDK 11 )
    Summary of each segment:
  70. [70]
    Locale (Java SE 11 & JDK 11 )
    ### Summary of Locale Class in Java
  71. [71]
    ResourceBundle (Java SE 11 & JDK 11 )
    ### Summary of ResourceBundle Class
  72. [72]
  73. [73]
    NumberFormat (Java SE 11 & JDK 11 )
    ### Summary of NumberFormat Class in java.text
  74. [74]
    DateFormat (Java SE 11 & JDK 11 )
    ### Summary of DateFormat Class in java.text
  75. [75]
    Collator (Java SE 11 & JDK 11 )
    ### Summary of `Collator` Class in `java.text`
  76. [76]
    TimeZone (Java SE 11 & JDK 11 )
    ### Summary of `TimeZone` Class in `java.util`
  77. [77]
    java.time (Java SE 11 & JDK 11 )
    ### Summary of Integration of `java.util.TimeZone` with `java.time` Package
  78. [78]
    Java Downloads - Oracle
    Java SE Development Kit 21.0.9 downloads ; x64 Compressed Archive, 187.96 MB. https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz (sha256).
  79. [79]
    OpenJDK
    - **Java Class Library**: OpenJDK provides an open-source implementation of the Java Platform, Standard Edition, which includes the Java Class Library.
  80. [80]
    Adoptium: Home
    The Adoptium Working Group promotes and supports high-quality, TCK certified runtimes and associated technology for use across the Java ecosystem.Download Temurin® JDK · Eclipse Mission Control · Eclipse AQAvit · Marketplace
  81. [81]
    Eclipse Temurin - Adoptium
    OpenJDK Based ... Reduce costs while benefiting from a robust ecosystem that ensures long-term sustainability and enterprise-ready runtime performance.<|control11|><|separator|>
  82. [82]
    JDK and JRE File Structure
    This page provides an introductory overview of the JDK directories and the files they contain. Note that the file structure of the JRE is identical to that ...Missing: distribution | Show results with:distribution
  83. [83]
    JEP 220: Modular Run-Time Images - OpenJDK
    Oct 23, 2014 · JDK and JRE images no longer contain the files lib/rt.jar , lib/tools.jar , lib/dt.jar , and other internal JAR files, as noted above.Missing: distribution | Show results with:distribution<|separator|>
  84. [84]
    JEP 0: JEP Index
    ### Summary of JDK Enhancement Proposal Process and Java Class Library Changes
  85. [85]
  86. [86]
    The java Command
    Summary of each segment:
  87. [87]
    Policy File Creation and Management
    Creates and modifies the external policy configuration files that define your installation's Java security policy.
  88. [88]
    URLClassLoader (Java Platform SE 8 ) - Oracle Help Center
    This class loader is used to load classes and resources from a search path of URLs referring to both JAR files and directories.Missing: custom | Show results with:custom
  89. [89]
    The jlink Command
    ### Summary of Using jlink for Slimmed JREs (Excluding java.desktop)
  90. [90]
  91. [91]
  92. [92]
  93. [93]
    Java Specification Requests - detail JSR# 384
    This JSR defines a release of the Java SE platform targeted at embedded, desktop, server, and cloud environments.
  94. [94]
  95. [95]
    Licensing/Sun Binary Code License Agreement - Fedora Project Wiki
    1. Software Internal Use and Development License Grant. · 2. License to Distribute Software. · 3. Experimental Software. · 4. Java Technology Restrictions. · 5.
  96. [96]
    A Brief History of Java Licensing - Copyleft Currents
    In 1995, Sun made the first version of Java publicly available free of charge. Quickly, Java was widely adopted. Sun was a vendor of high-end computer ...Missing: 1995-2006 | Show results with:1995-2006
  97. [97]
    Oracle Binary Code License Agreement for the Java SE Platform ...
    Sep 21, 2017 · Oracle Binary Code License Agreement for the Java SE Platform Products and JavaFX · LICENSE TO USE. · RESTRICTIONS. · DISCLAIMER OF WARRANTY.Missing: history | Show results with:history
  98. [98]
    [PDF] Case COMP/C-3/37.792 - European Commission
    May 27, 2003 · Furthermore, the alleged 1996 offer was related to a licence of Sun's Java technologies to Microsoft. From the evidence provided by ...
  99. [99]
    Open Letter to Sun: The Case for Open-Sourcing Java - OSnews
    Jun 5, 2004 · I'm writing to you, based on my own personal beliefs, to make a case for open-sourcing Java. That case is relatively simple: If you don't open- ...Missing: customizability | Show results with:customizability
  100. [100]
    The OpenJDK Developers' Guide
    The goal of this guide is to answer questions that developers of the JDK might have around development process, tooling, standards, and so forth.
  101. [101]
    Sun begins releasing Java under the GPL - Free Software Foundation
    Nov 15, 2006 · Sun committed to releasing Java under the GPL, immediately releasing code for some components and the rest soon, disarming the "Java Trap".
  102. [102]
    Oracle Buys Sun
    Oracle will acquire Sun common stock for $9.50 per share in cash. The transaction is valued at approximately $7.4 billion, or $5.6 billion net of Sun's cash ...
  103. [103]
    Oracle's Stewardship of Java
    With its acquisition of Sun Microsystems in 2010, Oracle also acquired the ownership and stewardship of Java. More than 9 million developers use Java to create ...
  104. [104]
    Governing Board - OpenJDK
    Annette Keenleyside (Vice Chair, IBM),; Mark Reinhold (OpenJDK Lead, Oracle),; Andrew Haley (At-Large, Red Hat), and; Phil Race (At-Large, Oracle). At-Large ...Missing: contributors | Show results with:contributors
  105. [105]
    Red Hat joins the Eclipse Adoptium Working Group
    Mar 23, 2021 · Red Hat is proud to be a founding strategic member of the Adoptium Working Group as AdoptOpenJDK transitions to its new home at the Eclipse Foundation.
  106. [106]
    JDK 7 - OpenJDK
    JDK 7 reached General Availability on 28 July 2011. Production-ready binary distributions based on the JDK 7 code base are available now from Oracle.Builds & integrations · Features · Milestone schedule
  107. [107]
    [PDF] GNU Classpath - K L O M P
    Kaffe starts seriously adopting GNU Classpath. (2003), even more active developers and multiple active branches. □. I take over maintainership from Brian Jones.
  108. [108]
    [PDF] GNU gcj
    13.2 GNU Classpath Properties libgcj is based on the GNU Classpath (Essential Libraries for Java) a GNU project to create free core class libraries for use ...
  109. [109]
    GNU Crypto - GNU Project - Free Software Foundation (FSF)
    GNU Crypto provides free, versatile, high-quality, and provably correct cryptographic implementations for Java, and is now part of GNU Classpath.
  110. [110]
    GNU Classpath - GNU Project - Free Software Foundation (FSF)
    GNU Classpath 1.0 will be fully compatible with the 1.1 and 1.2 API specifications, in addition to having significant (>95%) compatability with the 1.3, 1.4, ...
  111. [111]
    GNU Classpath 0.99 Announcement (2012-03-07) - GNU
    Mar 7, 2012 · We are proud to announce the release of GNU Classpath 0.99. GNU Classpath, essential libraries for java, is a project to create free core class ...
  112. [112]
    GNU Classpath VM Integration Guide
    JamVM A simple, small bytecode interpreter that works out-of-the-box with pure GNU Classpath; it is emerging as the preferred platform for quickly testing a new ...
  113. [113]
    JamVM -- A compact Java Virtual Machine
    GNU Classpath. GNU Classpath is a community-driven reimplementation of the Java class-libraries. For many years it was the only library supported by JamVM.
  114. [114]
    Apache, Sun still in disharmony over Harmony - InfoWorld
    Dec 19, 2007 · Predating Sun's November 2006 open-sourcing of Java, Harmony was begun in May 2005 and presents an open-source implementation of Java Platform, ...
  115. [115]
    drlvm - Apache Harmony
    Key goals of DRL include the following: Modularity: Functionality is grouped into a limited number of coarse-grained modules with well defined interfaces.Missing: licensing | Show results with:licensing
  116. [116]
    Apache License
    Apache Harmony is retired at the Apache Software Foundation since Nov 16, 2011. The information on these pages may be out ...
  117. [117]
    Apache Harmony Project Gets Mothballed: Sent to 'Attic' -- ADTmag
    Nov 7, 2011 · Launched in 2005, the project focused on creating a community-developed modular virtual machine (VM) and class library architecture to allow ...Missing: history 2004 discontinuation
  118. [118]
    Apache Harmony Finale - InfoQ
    Nov 4, 2011 · Apache Harmony was an open-source clean-room implementation of the JDK, released under the Apache license, but could never call itself Java ...Missing: 2004 discontinuation
  119. [119]
    Harmony | The Apache Attic
    Harmony retired in November 2011 and the move to the Attic was completed in August 2012. Harmony was a modular Java runtime with class libraries and associated ...Missing: history launch 2004 discontinuation IBM
  120. [120]
    IcedTea Project - OpenJDK
    IcedTea is the variant of OpenJDK currently distributed with GNU/Linux distributions such as Fedora, Gentoo and Debian, and our primary focus is to continue ...
  121. [121]
    Overview of excelsior JET, a high performance alternative to java ...
    This paper describes the architecture of Excelsior JET, a Java optimizing environment based upon ahead-of-time compilation of Java bytecode to ...
  122. [122]
    What is the Future of Apache Harmony? - InfoQ
    Mar 17, 2011 · This has not stopped Google from using the Harmony codebase to provide many of the compatibility libraries on the Android platform, although ...