| Java Platform, Standard Edition | |
|---|---|
| Outros nomes | Java 2 Platform, Standard Edition (J2SE) |
| Desenvolvedor | Oracle Corporation |
| Escrito em | Java |
| Sistema operacional | Multiplataforma |
| Tipo | Plataforma de computação |
| Licença | Licença proprietária |
| Website | www |
Java Platform, Standard Edition (Java SE) é uma plataforma de computação, padrão técnico para execução de aplicações em plataformas independentes suportadas por Java, como código portável para ambientes desktop e servidores.[1][2] Java SE era anteriormente conhecido como Java 2 Platform, Standard Edition (J2SE).
A plataforma utiliza a linguagem de programação Java e faz parte da família plataforma de software Java. O Java SE define um conjunto de APIs de propósito geral — como as APIs Java para a Biblioteca de Classes Java — e também inclui a Especificação da Linguagem Java e a Especificação da Máquina Virtual Java.[3] OpenJDK é a implementação de referência oficial desde a versão 7.[4][5][6]
Nomenclatura, padrões e especificações
editarA plataforma era conhecida como Java 2 Platform, Standard Edition ou J2SE a partir da versão 1.2, até que o nome foi alterado para Java Platform, Standard Edition ou Java SE na versão 1.5. O "SE" é usado para distinguir a plataforma base das edições Enterprise (Java EE) e Micro (Java ME). O "2" foi originalmente destinado a enfatizar as grandes mudanças introduzidas na versão 1.2, mas foi removido na versão 1.6. A convenção de nomenclatura foi alterada várias vezes ao longo da história de versões do Java. A partir do J2SE 1.4 (Merlin), o Java SE foi desenvolvido sob o Java Community Process, que produz descrições de especificações propostas e finais para a plataforma Java chamadas Java Specification Requests (JSR).[7] O JSR 59 foi a especificação guarda-chuva para o J2SE 1.4 e o JSR 176 especificou o J2SE 5.0 (Tiger). O Java SE 6 (Mustang) foi lançado sob o JSR 270.
Java Platform, Enterprise Edition (Java EE) é uma especificação relacionada que inclui todas as classes do Java SE, mais várias que são mais úteis para programas executados em servidores em vez de estações de trabalho.
Java Platform, Micro Edition (Java ME) é uma especificação relacionada destinada a fornecer uma coleção certificada de APIs Java para o desenvolvimento de software para dispositivos pequenos com recursos limitados, como telefones celulares, PDAs e set-top boxes.
O Ambiente de Execução Java (JRE) e o Kit de Desenvolvimento Java (JDK) são os arquivos reais baixados e instalados em um computador para executar ou desenvolver programas Java, respectivamente.
Pacotes de propósito geral
editarA maioria desses pacotes é exportada pelo módulo java.base do Sistema de Módulos da Plataforma Java (desde o Java 9).
java.lang
editar
O pacote Java java.lang contém classes fundamentais e interfaces intimamente ligadas à linguagem e ao sistema de tempo de execução. Isso inclui as classes raiz que formam a hierarquia de classes, tipos ligados à definição da linguagem, exceções básicas, funções matemáticas, threads, funções de segurança, bem como algumas informações sobre o sistema nativo subjacente. Este pacote contém 22 das 32 classes java.lang.Error fornecidas no JDK 6.
As principais classes e interfaces em java.lang são:
Object– a classe que é a raiz de toda hierarquia de classes.Enum– a classe base para classes de enumeração (a partir do J2SE 5.0).Class– a classe que é a raiz do sistema de reflexão do Java.Throwable– a classe que é a classe base da hierarquia de classes de exceção.Error,ExceptioneRuntimeException– as classes base para cada tipo de exceção.Thread– a classe que permite operações em threads.String– a classe para strings e literais de string.StringBuffereStringBuilder– classes para realizar manipulação de strings (StringBuildera partir do J2SE 5.0).Comparable– a interface que permite comparação e ordenação genérica de objetos (a partir do J2SE 1.2).Iterable– a interface que permite iteração genérica usando o loopformelhorado (a partir do J2SE 5.0).ClassLoader,Process,Runtime,SecurityManagereSystem– classes que fornecem "operações de sistema" que gerenciam o carregamento dinâmico de classes, criação de processos externos, consultas ao ambiente hospedeiro, como a hora do dia, e aplicação de políticas de segurança.MatheStrictMath– classes que fornecem funções matemáticas básicas como seno, cosseno e raiz quadrada (java.lang.StrictMatha partir do J2SE 1.3).- As classes wrapper primitivas que encapsulam tipos primitivos como objetos.
- As classes de exceção básicas lançadas para exceções de nível de linguagem e outras comuns.
Classes em java.lang são automaticamente importadas em todos os arquivos fonte.
java.lang.ref
editar
O pacote java.lang.ref fornece tipos mais flexíveis de referências do que os disponíveis de outra forma, permitindo interação limitada entre a aplicação e o coletor de lixo da Máquina Virtual Java (JVM). É um pacote importante, central o suficiente para a linguagem para que os projetistas da linguagem o colocassem sob o espaço de nomes java.lang, mas é um tanto específico e não usado por muitos desenvolvedores. Este pacote foi adicionado no J2SE 1.2.
Java tem um sistema expressivo de referências e permite comportamento especial para coleta de lixo. Uma referência normal em Java é conhecida como "referência forte". O pacote java.lang.ref define três outros tipos de referência — soft, fraca e phantom. Cada tipo de referência é projetado para um uso específico.
- Uma
SoftReferencepode ser usada para implementar um cache. Um objeto que não é alcançável por uma referência forte (ou seja, não é fortemente alcançável), mas é referenciado por uma referência soft, é chamado de "fracamente alcançável". Um objeto fracamente alcançável pode ser coletado pelo coletor de lixo a seu critério. Isso geralmente significa que objetos fracamente alcançáveis só são coletados quando a memória livre está baixa — mas novamente, isso é a critério do coletor de lixo. Semanticamente, uma referência soft significa: "Mantenha este objeto quando mais nada o referenciar, a menos que a memória seja necessária." - Uma
WeakReferenceé usada para implementar mapas fracos. Um objeto que não é forte ou fracamente alcançável, mas é referenciado por uma referência fraca, é chamado de "fracamente alcançável". Um objeto fracamente alcançável é coletado no próximo ciclo de coleta. Este comportamento é usado na classeWeakHashMap. Um mapa fraco permite ao programador colocar pares chave/valor no mapa e não se preocupar com os objetos ocupando memória quando a chave não for mais alcançável em nenhum outro lugar. Outra aplicação possível de referências fracas é o pool de strings internas. Semanticamente, uma referência fraca significa: "Livre-se deste objeto quando mais nada o referenciar na próxima coleta de lixo." - Uma
PhantomReferenceé usada para referenciar objetos que foram marcados para coleta de lixo e foram finalizados, mas ainda não foram recuperados. Um objeto que não é forte, soft ou fracamente alcançável, mas é referenciado por uma referência phantom, é chamado de "phantom alcançável". Isso permite uma limpeza mais flexível do que é possível apenas com o mecanismo de finalização. Semanticamente, uma referência phantom significa: "Este objeto não é mais necessário e foi finalizado em preparação para ser coletado."
Cada um desses tipos de referência estende a classe Reference, que fornece o método get() para retornar uma referência forte ao objeto referente (ou null se a referência foi limpa ou se o tipo de referência for phantom), e o método clear() para limpar a referência.
O java.lang.ref também define a classe ReferenceQueue, que pode ser usada em cada uma das aplicações discutidas acima para rastrear objetos que mudaram de tipo de referência. Quando uma java.lang.ref.Reference<T> é criada, ela é opcionalmente registrada com uma fila de referências. A aplicação consulta a fila de referências para obter referências que mudaram o estado de alcançabilidade.
java.lang.reflect
editar
Reflexão é um constituinte da API Java que permite que o código Java examine e "reflita" sobre componentes Java em tempo de execução e use os membros refletidos. Classes no pacote java.lang.reflect, juntamente com java.lang.Class<T> e Package, acomodam aplicações como depuradores, interpretadores, inspetores de objetos, navegadores de classes e serviços como serialização de objetos e JavaBeans que precisam acessar os membros públicos de um objeto alvo (com base em sua classe de tempo de execução) ou os membros declarados por uma determinada classe. Este pacote foi adicionado no JDK 1.1.
A reflexão é usada para instanciar classes e invocar métodos usando seus nomes, um conceito que permite programação dinâmica. Classes, interfaces, métodos, campos e construtores podem ser descobertos e usados em tempo de execução. A reflexão é suportada por metadados que a JVM tem sobre o programa.
Técnicas
editarExistem técnicas básicas envolvidas na reflexão:
- Descoberta – envolve pegar um objeto ou classe e descobrir os membros, superclasses, interfaces implementadas e, em seguida, possivelmente usar os elementos descobertos.
- Uso por nome – envolve começar com o nome simbólico de um elemento e usar o elemento nomeado.
Descoberta
editarA descoberta normalmente começa com um objeto e chamando o método getClass() para obter o java.lang.Class<?> do objeto. O objeto java.lang.Class<T> tem vários métodos para descobrir o conteúdo da classe, por exemplo:
getMethods()– retorna um array de objetosMethodrepresentando todos os métodos públicos da classe ou interfacegetConstructors()– retorna um array de objetosConstructorrepresentando todos os construtores públicos da classegetFields()– retorna um array de objetosFieldrepresentando todos os campos públicos da classe ou interfacegetClasses()– retorna um array de objetosjava.lang.Class<?>[]representando todas as classes e interfaces públicas que são membros (por exemplo, classes internas) da classe ou interfacegetSuperclass()– retorna o objetojava.lang.Class<? super T>representando a superclasse da classe ou interface (nullé retornado para interfaces)getInterfaces()– retorna umjava.lang.Class<?>[]representando todas as interfaces que são implementadas pela classe ou interface
Uso por nome
editarO objeto java.lang.Class<T> pode ser obtido através de descoberta, usando o literal de classe (por exemplo, X.class, para uma classe X) ou usando o nome da classe (por exemplo, Class.forName("mypackage.MyClass")). Com um objeto java.lang.Class<T>, objetos membro Method, Constructor<T> ou Field podem ser obtidos usando o nome simbólico do membro. Por exemplo:
getMethod(String name, Class<?>... parameterTypes)– retorna o objetoMethodrepresentando o método público com o nomenameda classe ou interface que aceita os parâmetros especificados pelos parâmetrosjava.lang.Class<?>....getConstructor(Class<?>... parameterTypes)– retorna o objetoConstructor<T>representando o construtor público da classe que aceita os parâmetros especificados pelos parâmetrosjava.lang.Class<?>....getField(String name)– retorna o objetoFieldrepresentando o campo público com o nomenameda classe ou interface.
Os objetos Method, Constructor<T> e Field podem ser usados para acessar dinamicamente o membro representado da classe. Por exemplo:
Field.get(Object obj)– retorna umjava.lang.Objectcontendo o valor do campo da instância do objeto passado paraget(). (Se o objetoFieldrepresentar um campo estático, o parâmetrojava.lang.Objecté ignorado e pode sernull.)Method.invoke(Object obj, Object... args)– retorna umjava.lang.Objectcontendo o resultado da invocação do método para a instância do primeiro parâmetrojava.lang.Objectpassado parainvoke(). Os parâmetros restantesjava.lang.Object...são passados para o método. (Se o objetoMethodrepresentar um método estático, o primeiro parâmetrojava.lang.Objecté ignorado e pode sernull.)Constructor.newInstance(Object... initargs)– retorna a nova instânciajava.lang.Objectda invocação do construtor. Os parâmetrosjava.lang.Object...são passados para o construtor. (Note que o construtor sem parâmetros de uma classe também pode ser invocado chamandonewInstance().)
Arrays e proxies
editarO pacote java.lang.reflect também fornece uma classe Array que contém métodos estáticos para criar e manipular objetos array, e desde o J2SE 1.3, uma classe Proxy que suporta criação dinâmica de classes proxy que implementam interfaces especificadas.
A implementação de uma classe Proxy é fornecida por um objeto fornecido que implementa a interface InvocationHandler. O método invoke(Object proxy, Method method, Object[] args) do InvocationHandler é chamado para cada método invocado no objeto proxy — o primeiro parâmetro é o objeto proxy, o segundo parâmetro é o objeto Method representando o método da interface implementada pelo proxy, e o terceiro parâmetro é o array de parâmetros passados para o método da interface. O método invoke() retorna um resultado java.lang.Object que contém o resultado retornado ao código que chamou o método da interface proxy.
java.io
editar
O pacote java.io contém classes que suportam entrada e saída. As classes no pacote são primariamente orientadas a stream; no entanto, uma classe para acesso aleatório a arquivos também é fornecida. As classes centrais no pacote são InputStream e OutputStream, que são classes base abstratas para ler de e escrever para streams de bytes, respectivamente. As classes relacionadas Reader e Writer são classes base abstratas para ler de e escrever para streams de caracteres, respectivamente. O pacote também tem algumas classes diversas para suportar interações com o sistema de arquivos hospedeiro.
Streams
editarAs classes de stream seguem o padrão decorator estendendo a subclasse base para adicionar recursos às classes de stream. As subclasses das classes de stream base são tipicamente nomeadas para um dos seguintes atributos:
- a fonte/destino dos dados do stream
- o tipo de dados escritos/lidos do stream
- processamento ou filtragem adicional realizado nos dados do stream
As subclasses de stream são nomeadas usando o padrão de nomenclatura XxxStreamType onde Xxx é o nome que descreve o recurso e StreamType é um de InputStream, OutputStream, Reader ou Writer.
A tabela a seguir mostra as fontes/destinos suportados diretamente pelo pacote java.io:
| Fonte/Destino | Nome | Tipos de stream | Entrada/Saída | Classes |
|---|---|---|---|---|
byte[] |
ByteArray | byte |
entrada, saída | ByteArrayInputStream, ByteArrayOutputStream
|
char[] |
CharArray | char |
entrada, saída | CharArrayReader, CharArrayWriter
|
java.io.File |
File | byte, char |
entrada, saída | FileInputStream, FileOutputStream, FileReader, FileWriter
|
java.lang.String |
String | char |
entrada, saída | StringReader, StringWriter
|
java.lang.Thread |
Piped | byte, char |
entrada, saída | PipedInputStream, PipedOutputStream, PipedReader, PipedWriter
|
Outras bibliotecas padrão fornecem implementações de stream para outros destinos, como o InputStream retornado pelo método getInputStream() de java.net.Socket ou a classe Java EE ServletOutputStream.
O tratamento de tipos de dados e processamento ou filtragem de dados de stream é realizado através de filtros de stream. As classes de filtro aceitam outro objeto de stream compatível como parâmetro para o construtor e decoram o stream encapsulado com recursos adicionais. Filtros são criados estendendo uma das classes de filtro base FilterInputStream, FilterOutputStream, FilterReader ou FilterWriter.
As classes Reader e Writer são realmente apenas streams de bytes com processamento adicional realizado no stream de dados para converter os bytes em caracteres. Elas usam a codificação de caracteres padrão para a plataforma, que a partir do J2SE 5.0 é representada pelo Charset retornado pelo método estático defaultCharset(). A classe InputStreamReader converte um InputStream em um Reader e a classe OutputStreamWriter converte um OutputStream em um Writer. Ambas as classes têm construtores que suportam especificar a codificação de caracteres a ser usada. Se nenhuma codificação for especificada, o programa usa a codificação padrão para a plataforma.
A tabela a seguir mostra os outros processos e filtros que o pacote java.io suporta diretamente. Todas essas classes estendem a classe FilterInputStream correspondente.
| Operação | Nome | Tipos de stream | Entrada/Saída | Classes |
|---|---|---|---|---|
| buffering | Buffered | byte, char |
entrada, saída | BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter
|
| "push back" último valor lido | Pushback | byte, char |
entrada | PushbackInputStream, PushbackReader
|
| ler/escrever tipos primitivos | Data | byte |
entrada, saída | DataInputStream, DataOutputStream
|
| serialização de objetos (ler/escrever objetos) | Object | byte |
entrada, saída | ObjectInputStream, ObjectOutputStream
|
Acesso aleatório
editarA classe RandomAccessFile suporta leitura e escrita de acesso aleatório de arquivos. A classe usa um ponteiro de arquivo que representa um deslocamento em bytes dentro do arquivo para a próxima operação de leitura ou escrita. O ponteiro de arquivo é movido implicitamente pela leitura ou escrita e explicitamente chamando os métodos seek(long) ou skipBytes(int). A posição atual do ponteiro de arquivo é retornada pelo método getFilePointer().
Sistema de arquivos
editarA classe File representa um caminho de arquivo ou diretório em um sistema de arquivos. Objetos File suportam a criação, exclusão e renomeação de arquivos e diretórios e a manipulação de atributos de arquivo como somente leitura e timestamp da última modificação. Objetos File que representam diretórios podem ser usados para obter uma lista de todos os arquivos e diretórios contidos.
A classe FileDescriptor é um descritor de arquivo que representa uma fonte ou sumidouro (destino) de bytes. Tipicamente, isso é um arquivo, mas também pode ser um console ou soquete de rede. Objetos FileDescriptor são usados para criar streams File. Eles são obtidos de streams File e soquetes e soquetes de datagrama java.net.
java.nio
editar
No J2SE 1.4, o pacote java.nio (NIO ou Non-blocking I/O) foi adicionado para suportar E/S mapeada em memória, facilitando operações de E/S mais próximas ao hardware subjacente com desempenho às vezes dramaticamente melhor. O pacote java.nio fornece suporte para vários tipos de buffer. O subpacote java.nio.charset fornece suporte para diferentes codificações de caracteres para dados de caracteres. O subpacote java.nio.channels fornece suporte para canais, que representam conexões a entidades capazes de realizar operações de E/S, como arquivos e soquetes. O pacote java.nio.channels também fornece suporte para bloqueio fino de arquivos.
java.math
editarO pacote java.math suporta aritmética multiprecisão (incluindo operações aritméticas modulares) e fornece geradores de números primos multiprecisão usados para geração de chaves criptográficas. As principais classes do pacote são:
BigDecimal– fornece números decimais com sinal de precisão arbitrária.BigDecimaldá ao usuário controle sobre o comportamento de arredondamento através deRoundingMode.BigInteger– fornece inteiros de precisão arbitrária. Operações emBigIntegernão estouram nem perdem precisão. Além das operações aritméticas padrão, fornece aritmética modular, cálculo de MDC, teste de primalidade, geração de números primos, manipulação de bits e outras operações diversas.MathContext– encapsula as configurações de contexto que descrevem certas regras para operadores numéricos.RoundingMode– uma enumeração que fornece oito comportamentos de arredondamento.
java.net
editar
O pacote java.net fornece rotinas especiais de E/S para redes, permitindo requisições HTTP, bem como outras transações comuns.
java.text
editar
O pacote java.text implementa rotinas de análise sintática para strings e suporta várias linguagens legíveis por humanos e análise específica de localidade.
java.util
editar
Estruturas de dados que agregam objetos são o foco do pacote java.util. Incluído no pacote está a API de Coleções, uma hierarquia de estruturas de dados organizada fortemente influenciada por considerações de padrões de projeto.
Pacotes de propósito especial
editarjava.applet
editar
Criado para suportar a criação de applets Java, o pacote java.applet permite que aplicações sejam baixadas através de uma rede e executadas dentro de uma sandbox vigiada. Restrições de segurança são facilmente impostas à sandbox. Um desenvolvedor, por exemplo, pode aplicar uma assinatura digital a um applet, rotulando-o como seguro. Isso permite que o usuário conceda permissão ao applet para realizar operações restritas (como acessar o disco rígido local) e remove algumas ou todas as restrições da sandbox. Certificados digitais são emitidos por autoridades certificadoras.
Como os applets Java estão agora obsoletos, este pacote está obsoleto.
java.beans
editar
Incluído no pacote java.beans estão várias classes para desenvolver e manipular beans, componentes reutilizáveis definidos pela arquitetura JavaBeans. A arquitetura fornece mecanismos para manipular propriedades de componentes e disparar eventos quando essas propriedades mudam.
As APIs em java.beans são destinadas ao uso por uma ferramenta de edição de beans, na qual beans podem ser combinados, personalizados e manipulados. Um tipo de editor de bean é um designer de GUI em um ambiente de desenvolvimento integrado.
java.awt
editar
O pacote java.awt, ou Abstract Window Toolkit, fornece acesso a um conjunto básico de widgets GUI baseados no conjunto de widgets da plataforma nativa subjacente, o núcleo do subsistema de eventos GUI e a interface entre o sistema de janelas nativo e a aplicação Java. Ele também fornece vários gerenciadores de layout básicos, um pacote de transferência de dados para uso com a Área de Transferência e Arrastar e Soltar, a interface para dispositivos de entrada como mouses e teclados, bem como acesso à bandeja do sistema em sistemas compatíveis. Este pacote, juntamente com javax.swing, contém o maior número de enums (7 no total) no JDK 6.
java.rmi
editar
O pacote java.rmi fornece invocação de método remoto Java para suportar chamadas de procedimento remoto entre duas aplicações Java executando em diferentes JVMs.
java.security
editar
Suporte para segurança, incluindo o algoritmo de resumo de mensagem, está incluído no pacote java.security.
java.sql
editar
Uma implementação da API JDBC (usada para acessar bancos de dados SQL) está agrupada no pacote java.sql.
javax.rmi
editar
O pacote javax.rmi fornecia suporte para a comunicação remota entre aplicações, usando o protocolo RMI sobre IIOP. Este protocolo combina características do RMI e do CORBA.
Java SE Core Technologies - CORBA / RMI-IIOP
javax.swing
editar
Swing é uma coleção de rotinas que se baseiam no java.awt para fornecer um widget toolkit independente de plataforma. O pacote javax.swing usa as rotinas de desenho 2D para renderizar os componentes da interface do usuário em vez de depender do suporte GUI do sistema operacional nativo subjacente.
Este pacote contém o maior número de classes (133 no total) no JDK 6. Este pacote, juntamente com java.awt, também contém o maior número de enums (7 no total) no JDK 6. Ele suporta aparências plugáveis (PLAFs) para que os widgets na GUI possam imitar aqueles do sistema nativo subjacente. Padrões de projeto permeiam o sistema, especialmente uma modificação do padrão modelo–visão–controlador, que afrouxa o acoplamento entre função e aparência. Uma inconsistência é que (a partir do J2SE 1.3) as fontes são desenhadas pelo sistema nativo subjacente, e não pelo Java, limitando a portabilidade do texto. Existem soluções alternativas, como o uso de fontes bitmap. Em geral, "layouts" são usados e mantêm os elementos dentro de uma GUI esteticamente consistente entre plataformas.
javax.swing.text.html.parser
editar
O pacote javax.swing.text.html.parser fornece o analisador HTML tolerante a erros que é usado para escrever vários navegadores web e bots web.
javax.xml.bind.annotation
editar
O pacote javax.xml.bind.annotation continha o maior número de Tipos de Anotação (30 no total) no JDK 6. Ele define anotações para personalizar elementos de programa Java para mapeamento de esquema XML.
org.w3c
editar
Java contém pacotes para utilitários do World Wide Web Consortium (principalmente XML) sob o espaço de nomes org.w3c. Muitos deles existem no módulo java.xml.
org.w3c.dom
editar
Os pacotes org.w3c.dom fornecem interfaces para o Document Object Model (DOM).
org.xml.sax
editar
Os pacotes org.xml.sax fornecem interfaces para o Simple API for XML (SAX).
org.omg
editar
org.omg.CORBA
editar
O pacote org.omg.CORBA fornecia suporte para a comunicação remota entre aplicações usando o General Inter-ORB Protocol e suporta outros recursos da arquitetura de broker de objetos comuns. Assim como o RMI e o RMI-IIOP, este pacote é para chamar métodos remotos de objetos em outras máquinas virtuais (geralmente via rede).
Este pacote continha o maior número de classes java.lang.Exception (45 no total) no JDK 6. De todas as possibilidades de comunicação, o CORBA é portável entre várias linguagens; no entanto, isso traz mais complexidade.
Esses pacotes foram descontinuados no Java 9 e removidos do Java 11.[8]
org.omg.PortableInterceptor
editar
O pacote org.omg.PortableInterceptor continha o maior número de interfaces (39 no total) no JDK 6. Ele fornece um mecanismo para registrar hooks ORB através dos quais os serviços ORB interceptam o fluxo normal de execução do ORB.
Segurança
editarVárias vulnerabilidades críticas de segurança foram relatadas.[9][10] Alertas de segurança da Oracle anunciam correções críticas de segurança relacionadas ao Java SE.[11]
Referências
editar- ↑ «Java SE Overview». Oracle Corporation. Consultado em 26 de fevereiro de 2017. Cópia arquivada em 9 de março de 2021
- ↑ «Java® Platform, Standard Edition & Java Development Kit Version 25 API Specification». Cópia arquivada em 17 de maio de 2026
- ↑ «Java SE 6 Release Contents». Oracle Corporation e/ou suas afiliadas. Consultado em 1 de janeiro de 2013. Cópia arquivada em 22 de maio de 2026
- ↑ Moving to OpenJDK as the official Java SE 7 Reference Implementation
- ↑ Java Platform, Standard Edition 7 Reference Implementations
- ↑ «Java Platform, Standard Edition 8 Reference Implementations». Cópia arquivada em 21 de novembro de 2015
- ↑ «Java Specification Requests Overview». Oracle Corporation e/ou suas afiliadas. Consultado em 1 de janeiro de 2013. Cópia arquivada em 21 de maio de 2026
- ↑ «JEP 320: Remove the Java EE and CORBA Modules». Openjdk.java.net. 23 de maio de 2019. Consultado em 20 de março de 2022. Cópia arquivada em 10 de junho de 2022
- ↑ Dangerous vulnerability in latest Java version The H Security, 10 de janeiro de 2013
- ↑ Darlene Storm (25 de setembro de 2012). «Another critical Java vulnerability puts 1 billion users at risk». Computerworld Security Blog. Consultado em 11 de janeiro de 2013. Arquivado do original em 13 de janeiro de 2013
- ↑ «Critical Patch Updates, Security Alerts and Third Party Bulletin». Oracle. Cópia arquivada em 18 de outubro de 2019